using System; using System.Collections; using System.Collections.Generic; using UnityEngine; //修改成控制多个活动模块,如精彩活动模板1,精彩活动模板2 public class OpenServerActivityCenter : Singleton { public event Action openServerActivityStateChange; //{活动模板:{活动ID:活动接口}} Dictionary> GameServerActivitys = new Dictionary>(); 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()); } 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()); } 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()); } bool isOpen = false; var openServerActivitys = GameServerActivitys[activityType]; if (openServerActivitys.ContainsKey(_funcOrder)) { isOpen = openServerActivitys[_funcOrder].IsOpen || openServerActivitys[_funcOrder].IsAdvance; } return isOpen; } public bool IsPriorityOpenOpen(int _funcOrder, int activityType = (int)ActivityType.AT_JCHD) { if (!GameServerActivitys.ContainsKey(activityType)) { GameServerActivitys.Add(activityType, new Dictionary()); } var openServerActivitys = GameServerActivitys[activityType]; if (openServerActivitys.ContainsKey(_funcOrder)) { return openServerActivitys[_funcOrder].priorityOpen; } return false; } 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 onStateUpdate; } public class ILOpenServerActivityProxy : IOpenServerActivity { public bool IsOpen => funcIsOpen(); public bool IsAdvance => funcIsAdvance(); public bool priorityOpen => funcPriorityOpen(); public event Action onStateUpdate; private Func funcIsOpen; private Func funcIsAdvance; private Func funcPriorityOpen; public ILOpenServerActivityProxy(Func isOpen, Func isAdvance, Func priorityOpen) { funcIsOpen = isOpen; funcIsAdvance = isAdvance; funcPriorityOpen = priorityOpen; } public void StateUpdate(int id) { if (onStateUpdate != null) { onStateUpdate(id); } } }