using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { //修改成控制多个活动模块,如精彩活动模板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, //预备活动2 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()); } var openServerActivitys = GameServerActivitys[activityType]; if (openServerActivitys.ContainsKey(_funcOrder)) { return openServerActivitys[_funcOrder].IsOpen || openServerActivitys[_funcOrder].IsAdvance; } return false; } 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 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"); } } 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); } } } }