using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
namespace vnxbqy.UI
|
{
|
//修改成控制多个活动模块,如精彩活动模板1,精彩活动模板2
|
|
public class OpenServerActivityCenter : Singleton<OpenServerActivityCenter>
|
{
|
public event Action openServerActivityStateChange;
|
|
//{活动模板:{活动ID:活动接口}}
|
Dictionary<int, Dictionary<int, IOpenServerActivity>> GameServerActivitys = new Dictionary<int, Dictionary<int, IOpenServerActivity>>();
|
|
public int selectFuncOrder = -1;
|
|
public enum ActivityType
|
{
|
AT_JCHD = 0, //精彩活动
|
AT_JRZF, //节日祝福
|
AT_HFHD, //合服活动
|
AT_Activity1, //预备活动1
|
AT_Activity2, //日期型活动- 按日期开放的排行榜系列活动相关 id从200开始(与其他活动区分,虽然id重复并没有关系), 类同节日活动
|
AT_Activity3, //预备活动3
|
//后续IL开发添加预设
|
default1,
|
default2,
|
default3,
|
default4,
|
default5,
|
default6,
|
default7,
|
default8,
|
default9,
|
default10,
|
}
|
|
public OpenServerActivityCenter()
|
{
|
TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
|
}
|
|
public void Register(int funcOrder, IOpenServerActivity activity, int activityType = (int)ActivityType.AT_JCHD)
|
{
|
if (!GameServerActivitys.ContainsKey(activityType))
|
{
|
GameServerActivitys.Add(activityType, new Dictionary<int, IOpenServerActivity>());
|
}
|
|
var openServerActivitys = GameServerActivitys[activityType];
|
if (!openServerActivitys.ContainsKey(funcOrder))
|
{
|
openServerActivitys.Add(funcOrder, activity);
|
activity.onStateUpdate += OnStateUpdate;
|
}
|
}
|
|
private void OnStateUpdate(int _order)
|
{
|
if (openServerActivityStateChange != null)
|
{
|
openServerActivityStateChange();
|
}
|
}
|
|
private void OnServerOpenDayRefresh()
|
{
|
if (openServerActivityStateChange != null)
|
{
|
openServerActivityStateChange();
|
}
|
}
|
|
public bool IsAnyActivityOpen(out int _functionOrder, int activityType = (int)ActivityType.AT_JCHD)
|
{
|
if (!GameServerActivitys.ContainsKey(activityType))
|
{
|
GameServerActivitys.Add(activityType, new Dictionary<int, IOpenServerActivity>());
|
}
|
|
var openServerActivitys = GameServerActivitys[activityType];
|
_functionOrder = 0;
|
foreach (var _order in openServerActivitys.Keys)
|
{
|
if (openServerActivitys[_order].IsOpen || openServerActivitys[_order].IsAdvance)
|
{
|
_functionOrder = _order;
|
return true;
|
}
|
}
|
return false;
|
}
|
|
public bool IsActivityOpen(int _funcOrder, int activityType = (int)ActivityType.AT_JCHD)
|
{
|
if (!GameServerActivitys.ContainsKey(activityType))
|
{
|
GameServerActivitys.Add(activityType, new Dictionary<int, IOpenServerActivity>());
|
}
|
|
bool isOpen = false;
|
var openServerActivitys = GameServerActivitys[activityType];
|
if (openServerActivitys.ContainsKey(_funcOrder))
|
{
|
isOpen = openServerActivitys[_funcOrder].IsOpen || openServerActivitys[_funcOrder].IsAdvance;
|
}
|
if (_funcOrder == 31)
|
{
|
isOpen = !InvestModel.Instance.IsFinish();
|
}
|
return isOpen;
|
}
|
|
public bool IsPriorityOpenOpen(int _funcOrder, int activityType = (int)ActivityType.AT_JCHD)
|
{
|
if (!GameServerActivitys.ContainsKey(activityType))
|
{
|
GameServerActivitys.Add(activityType, new Dictionary<int, IOpenServerActivity>());
|
}
|
|
var openServerActivitys = GameServerActivitys[activityType];
|
if (openServerActivitys.ContainsKey(_funcOrder))
|
{
|
return openServerActivitys[_funcOrder].priorityOpen;
|
}
|
return false;
|
}
|
|
|
public bool ExistChildBookmark(int _funcOrder)
|
{
|
switch (_funcOrder)
|
{
|
case 0:
|
case 2:
|
case 19:
|
case 22:
|
return true;
|
default:
|
var config = OpenServerActivityConfig.Get(_funcOrder);
|
if (config != null)
|
{
|
return config.childTypes.Length > 0;
|
}
|
return false;
|
}
|
}
|
|
|
public int[] GetChildTypes(int _funcOrder)
|
{
|
var config = OpenServerActivityConfig.Get(_funcOrder);
|
if (config != null)
|
{
|
return config.childTypes;
|
}
|
return null;
|
}
|
|
|
public void ProcessErrorTip()
|
{
|
SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
|
}
|
|
//AT_Activity2 日期型活动-默认设计都是同一个入口,根据活动替换图标和名称,打开不同界面
|
public NewDayActivityInfo GetNewDayActionEnterInfo()
|
{
|
if (IsActivityOpen((int)NewDayActivityID.BossTrial, (int)ActivityType.AT_Activity2))
|
{
|
return new NewDayActivityInfo() { activityID = (int)NewDayActivityID.BossTrial, redpointID = MainRedDot.BossTrialRepoint, winName = "BossTrialActWin" };
|
}
|
else if (IsActivityOpen((int)NewDayActivityID.SecretPlaceXB, (int)ActivityType.AT_Activity2))
|
{
|
return new NewDayActivityInfo() { activityID = (int)NewDayActivityID.SecretPlaceXB, redpointID = MainRedDot.MjxbRedpoint, winName = "SecretPlaceActWin" };
|
}
|
else if (IsActivityOpen((int)NewDayActivityID.PetHorseAct, (int)ActivityType.AT_Activity2))
|
{
|
return new NewDayActivityInfo() { activityID = (int)NewDayActivityID.PetHorseAct, redpointID = MainRedDot.QCTrainActRedpoint, winName = "PetHorseActWin" };
|
}
|
else if (IsActivityOpen((int)NewDayActivityID.TreasurePavilionAct, (int)ActivityType.AT_Activity2))
|
{
|
return new NewDayActivityInfo() { activityID = (int)NewDayActivityID.TreasurePavilionAct, redpointID = MainRedDot.TreasurePavilionRankActRepoint, winName = "TreasurePavilionRankActWin" };
|
}
|
|
return new NewDayActivityInfo() { activityID = 0 };
|
}
|
|
//AT_Activity2 入口信息
|
public struct NewDayActivityInfo
|
{
|
public int activityID;
|
public int redpointID;
|
public string winName;
|
}
|
}
|
|
public interface IOpenServerActivity
|
{
|
bool IsOpen { get; }
|
bool IsAdvance { get; }
|
bool priorityOpen { get; }
|
|
event Action<int> onStateUpdate;
|
}
|
|
public class ILOpenServerActivityProxy : IOpenServerActivity
|
{
|
public bool IsOpen => funcIsOpen();
|
|
public bool IsAdvance => funcIsAdvance();
|
|
public bool priorityOpen => funcPriorityOpen();
|
|
public event Action<int> onStateUpdate;
|
|
private Func<bool> funcIsOpen;
|
private Func<bool> funcIsAdvance;
|
private Func<bool> funcPriorityOpen;
|
|
public ILOpenServerActivityProxy(Func<bool> isOpen, Func<bool> isAdvance, Func<bool> priorityOpen)
|
{
|
funcIsOpen = isOpen;
|
funcIsAdvance = isAdvance;
|
funcPriorityOpen = priorityOpen;
|
}
|
|
|
public void StateUpdate(int id)
|
{
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(id);
|
}
|
}
|
|
}
|
|
}
|
|