using System;  
 | 
using System.Collections;  
 | 
using System.Collections.Generic;  
 | 
using UnityEngine;  
 | 
//修改成控制多个活动模块,如精彩活动模板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;  
 | 
        }  
 | 
  
 | 
        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 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);  
 | 
        }  
 | 
    }  
 | 
  
 | 
}  
 | 
  
 | 
  
 |