public override void ProcessGameEvents(object sender, GameUIEventArgs args)
        {
            if (!args.UIKey.Contains("ResolveEventDialog"))
            {
                return;
            }
            if (args.EventType == GameUIEventType.TrySelect)
            {
                if (args.UIKey.Contains("Option"))
                {
                    //点的是选项
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));

                    //当然可以啦
                }
            }
            else if (args.EventType == GameUIEventType.Selected)
            {
                if (args.UIKey.Contains("Option"))
                {
                    var action =
                        CurrentGame.PossibleActions.FirstOrDefault(
                            a =>
                            a.Data[1] == args.AttachedData["Data"]);
                    //点的是选项
                    var msg = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                    msg.AttachedData.Add("PlayerAction", action);
                    Channel.Broadcast(msg);
                }
            }
        }
 protected override void OnSubscribedGameEvents(System.Object sender, GameUIEventArgs args)
 {
     //响应Refresh(来重新创建UI Element)
     if (args.EventType == GameUIEventType.Refresh)
     {
         _refreshRequired = true;
     }
 }
 protected override void OnSubscribedGameEvents(System.Object sender, GameUIEventArgs args)
 {
     if (args.EventType == GameUIEventType.Refresh)
     {
         _refreshRequired = true;
         return;
     }
 }
Пример #4
0
        public override void ProcessGameEvents(object sender, GameUIEventArgs args)
        {
            if (args.EventType == GameUIEventType.ReportInternalAction)
            {
                //进行一番处理

                Manager.SwitchState(GameManagerState.ActionPhaseChooseTarget, CreateStateData(args));
            }
        }
 private void DestoryNullReference(System.Object sender, GameUIEventArgs args)
 {
     // ReSharper disable once ConditionIsAlwaysTrueOrFalse
     if (this == null)
     {
         _channel.GameEvent -= DestoryNullReference;
     }
     else
     {
         OnSubscribedGameEvents(sender, args);
     }
 }
Пример #6
0
        protected override void OnSubscribedGameEvents(Object sender, GameUIEventArgs args)
        {
            if (!args.UIKey.Contains(Guid))
            {
                return;
            }

            //含有自己的GUID,是发给自己的
            if (args.EventType == GameUIEventType.AllowSelect)
            {
                Highlight = true;
            }
        }
Пример #7
0
 protected override void OnSubscribedGameEvents(System.Object sender, GameUIEventArgs args)
 {
     //响应Refresh(来重新创建UI Element)
     if (args.EventType == GameUIEventType.CancelWaitingNetwork)
     {
         gameObject.SetActive(false);
         LogRecorder.Log("Disable Mask");
     }
     else if (args.EventType == GameUIEventType.WaitingNetwork)
     {
         gameObject.SetActive(true);
         LogRecorder.Log("Enable Mask");
     }
 }
        protected override void OnSubscribedGameEvents(System.Object sender, GameUIEventArgs args)
        {
            base.OnSubscribedGameEvents(sender, args);

            if (!args.UIKey.Contains(Guid))
            {
                return;
            }

            if (args.EventType == GameUIEventType.PopupMenu)
            {
                Menu.Popup(args.AttachedData["Actions"] as List <PlayerAction>);
            }
        }
Пример #9
0
        private Dictionary <string, object> CreateStateData(GameUIEventArgs args)
        {
            var dict = new Dictionary <string, object>();

            var actions = args.AttachedData["Actions"] as List <PlayerAction>;

            dict.Add(ActionPhaseChooseTargetStateHandler.StateNameAvailableActions,
                     actions);

            dict.Add(ActionPhaseChooseTargetStateHandler.StateNameTriggerCard,
                     StateData[ActionPhaseChooseTargetStateHandler.StateNameTriggerCard]);

            dict.Add(ActionPhaseChooseTargetStateHandler.StateNameTriggerAction,
                     StateData[ActionPhaseChooseTargetStateHandler.StateNameTriggerAction]);
            return(dict);
        }
        protected override void OnSubscribedGameEvents(System.Object sender, GameUIEventArgs args)
        {
            //响应Refresh(来重新创建UI Element)
            if (args.EventType == GameUIEventType.Refresh)
            {
                RefreshRequired = true;
                this.gameObject.SetActive(true);
            }

            if (args.UIKey.Contains(Guid))
            {
                if (args.EventType == GameUIEventType.AllowSelect)
                {
                    IsHoveringAndAllowSelected = true;
                }
            }
        }
 protected override void OnSubscribedGameEvents(System.Object sender, GameUIEventArgs args)
 {
     base.OnSubscribedGameEvents(sender, args);
     if (args.UIKey.Contains(Guid))
     {
         if (args.EventType == GameUIEventType.SelectionActive)
         {
             //不管当前是否是激活,收到SelectionActive都变成取消态
             _selected = true;
             gameObject.GetComponent <PCBoardCardSmallHighlightEffect>().Highlight = true;
         }
         if (args.EventType == GameUIEventType.SelectionDeactive)
         {
             //不管当前是否是激活,收到Deactive都变成取消态
             _selected = false;
             gameObject.GetComponent <PCBoardCardSmallHighlightEffect>().Highlight = false;
         }
     }
 }
Пример #12
0
 protected override void OnSubscribedGameEvents(System.Object sender, GameUIEventArgs args)
 {
     base.OnSubscribedGameEvents(sender, args);
     if (args.UIKey.Contains(Guid))
     {
         if (args.EventType == GameUIEventType.SelectionActive)
         {
             //不管当前是否是激活,收到SelectionActive都变成取消态
             _selected = true;
             SelectionPointer.SetActive(true);
         }
         if (args.EventType == GameUIEventType.SelectionDeactive)
         {
             //不管当前是否是激活,收到Deactive都变成取消态
             _selected = false;
             SelectionPointer.SetActive(false);
         }
     }
 }
Пример #13
0
 public override void ProcessGameEvents(System.Object sender, GameUIEventArgs args)
 {
     //Refresh以后仍然处于这个状态
     if (args.EventType == GameUIEventType.Refresh)
     {
         StateData["Progress"] = 30f;
         StateData["Toggle"]   = true;
     }
     else if (args.EventType == GameUIEventType.TrySelect)
     {
         if (args.UIKey.Contains("PlayerTab"))
         {
             //玩家面板(要看人数)
             var playerNo = (int)args.AttachedData["PlayerNo"];
             if (CurrentGame.Boards.Count > playerNo)
             {
                 Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
             }
         }
         else if (args.UIKey.Contains("ForceRefreshButton"))
         {
             Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
         }
     }
     else if (args.EventType == GameUIEventType.Selected)
     {
         if (args.UIKey.Contains("PlayerTab"))
         {
             //玩家面板
             var playerNo = (int)args.AttachedData["PlayerNo"];
             if (CurrentGame.Boards.Count > playerNo)
             {
                 Manager.SwitchDisplayingBoardNo(playerNo);
             }
         }
         else if (args.UIKey.Contains("ForceRefreshButton"))
         {
             StateData["Toggle"] = false;
             //Refresh
             Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.ForceRefresh, "NetworkManager"));
         }
     }
 }
Пример #14
0
        protected override void OnSubscribedGameEvents(System.Object sender, GameUIEventArgs args)
        {
            if (!args.UIKey.Contains(Guid))
            {
                return;
            }

            //含有自己的GUID,是发给自己的
            if (args.EventType == GameUIEventType.AllowSelect)
            {
                Highlight = true;
            }
            else
            if (args.EventType == GameUIEventType.PopupMenu)
            {
                //要求弹出选单
                //MenuController调用Parent的BroadCast
                ParentController.MenuFrame.Popup(args.AttachedData["Actions"] as List <PlayerAction>, this);
                //ParentController.PopupMenu(this,args.AttachedData["Items"]);
            }
        }
 protected abstract void OnSubscribedGameEvents(System.Object sender, GameUIEventArgs args);
        public override void ProcessGameEvents(object sender, GameUIEventArgs args)
        {
            if (!args.UIKey.Contains("PoliticalDialog"))
            {
                return;
            }
            if (args.EventType == GameUIEventType.TrySelect)
            {
                //内政Idle中,能选中的Dialog就能点击
                if (args.UIKey.Contains("Card"))
                {
                    //点的是卡
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                }
                else if (args.UIKey.Contains("Player"))
                {
                    //是玩家名字
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                }
                else if (args.UIKey.Contains("DialogButton"))
                {
                    //是按钮
                    //这里不一定能按
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                }
            }
            else if (args.EventType == GameUIEventType.Selected)
            {
                if (args.UIKey.Contains("Card"))
                {
                    //点的是卡
                    if (StateData.ContainsKey("PoliticalIdle-CardSelected"))
                    {
                        Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.SelectionDeactive,
                                                                     ((GameUIEventArgs)StateData["PoliticalIdle-CardSelected"]).UIKey));
                    }
                    StateData["PoliticalIdle-CardSelected"] = args;
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.SelectionActive, args.UIKey));
                }
                else if (args.UIKey.Contains("Player"))
                {
                    //是玩家名字
                    if (StateData.ContainsKey("PoliticalIdle-Player"))
                    {
                        Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.SelectionDeactive,
                                                                     ((GameUIEventArgs)StateData["PoliticalIdle-Player"]).UIKey));
                    }
                    StateData["PoliticalIdle-Player"] = args;
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.SelectionActive, args.UIKey));
                }
                else if (args.UIKey.Contains("DialogButton"))
                {
                    //是按钮
                    //这里不一定能按
                    //看是什么Button
                    if (args.UIKey.Contains("PassPoliticalPhase"))
                    {
                        var action =
                            CurrentGame.PossibleActions.FirstOrDefault(
                                a => a.ActionType == PlayerActionType.PassPoliticalPhase);

                        var msg = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                        msg.AttachedData.Add("PlayerAction", action);
                        Channel.Broadcast(msg);
                    }
                    else if (args.UIKey.Contains("Confirm"))
                    {
                        var card =
                            (CardInfo)((GameUIEventArgs)StateData["PoliticalIdle-CardSelected"]).AttachedData["Card"];
                        var action =
                            CurrentGame.PossibleActions.FirstOrDefault(
                                a => a.ActionType == PlayerActionType.Aggression && card == (CardInfo)a.Data[0]);

                        var msg = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");

                        if (StateData.ContainsKey("PoliticalIdle-Player"))
                        {
                            var playerNo =
                                (int)((GameUIEventArgs)StateData["PoliticalIdle-Player"]).AttachedData["PlayerNo"];
                            action =
                                CurrentGame.PossibleActions.FirstOrDefault(
                                    a =>
                                    String.Equals(a.Data[1].ToString(), CurrentGame.Boards[playerNo].PlayerName,
                                                  StringComparison.CurrentCultureIgnoreCase));
                            if (action == null)
                            {
                                LogRecorder.Log("No Such Aggression");
                                return;
                            }
                        }
                        msg.AttachedData.Add("PlayerAction", action);
                        Channel.Broadcast(msg);
                    }
                }
            }
        }
Пример #17
0
        public override void ProcessGameEvents(object sender, GameUIEventArgs args)
        {
            var actions          = StateData[StateNameAvailableActions] as List <PlayerAction>;
            var triggerCard      = StateData["ActionPhaseChooseTarget.TriggerCard"] as CardInfo;
            var highlightElement = StateData["HighlightElement"] as Dictionary <String, List <CardInfo> >;

            if (highlightElement == null)
            {
                return;
            }

            if (args.EventType == GameUIEventType.TrySelect)
            {
                if (args.UIKey.Contains("BuildingCell"))
                {
                    //建筑列表
                    if (highlightElement["BuildingCell"].Contains(args.AttachedData["Card"] as CardInfo))
                    {
                        Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                    }
                }
                else if (args.UIKey.Contains("BuildingsPopupMenuItem"))
                {
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                }
                else if (args.UIKey.Contains("HandCivilCard"))
                {
                    //手牌(要看手牌内容)
                    //注意这里总是包括原卡牌,表示取消操作
                    if (highlightElement["HandCivilCard"].Contains(args.AttachedData["Card"] as CardInfo))
                    {
                        Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                    }
                }
            }
            else if (args.EventType == GameUIEventType.Selected)
            {
                if (args.UIKey.Contains("BuildingCell"))
                {
                    //建筑列表
                    List <PlayerAction> acceptedActions = new List <PlayerAction>();
                    var card = args.AttachedData["Card"] as CardInfo;

                    foreach (var action in actions)
                    {
                        if (action.ActionType == PlayerActionType.BuildBuilding &&
                            ((CardInfo)action.Data[0]).InternalId == card.InternalId)
                        {
                            acceptedActions.Add(action);
                        }

                        if (action.ActionType == PlayerActionType.UpgradeBuilding)
                        {
                            if (((CardInfo)action.Data[0]).InternalId == card.InternalId ||
                                ((CardInfo)action.Data[1]).InternalId == card.InternalId)
                            {
                                acceptedActions.Add(action);
                            }
                        }
                        if (action.ActionType == PlayerActionType.Disband ||
                            action.ActionType == PlayerActionType.Destory)
                        {
                            if (((CardInfo)action.Data[0]).InternalId == card.InternalId)
                            {
                                acceptedActions.Add(action);
                            }
                        }
                    }

                    if (acceptedActions.Count > 0)
                    {
                        var msg = new ManagerGameUIEventArgs(GameUIEventType.PopupMenu, args.UIKey);
                        msg.AttachedData.Add("Actions", acceptedActions);
                        Channel.Broadcast(msg);
                    }
                }
                else if (args.UIKey.Contains("BuildingsPopupMenuItem"))
                {
                    var action = args.AttachedData["Action"] as PlayerAction;
                    var msg    = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                    msg.AttachedData.Add("PlayerAction", action);

                    if (action == null)
                    {
                        return;
                    }

                    if (action.Internal)
                    {
                        //出错了,建筑面板不可能有InternalAction
                        Debug.Log("Error: BuildingsPopupMenuItem has Internal Action");
                    }
                    else
                    {
                        Channel.Broadcast(msg);
                    }
                }
                else if (args.UIKey.Contains("HandCivilCard"))
                {
                    //手牌(要看手牌内容)
                    var card = args.AttachedData["Card"] as CardInfo;
                    var msg  = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");

                    //如果是点击了原卡牌
                    if (args.AttachedData["Card"] as CardInfo == triggerCard)
                    {
                        Manager.SwitchState(GameManagerState.ActionPhaseIdle, null);
                        return;
                    }

                    var action = actions.FirstOrDefault(act => act.ActionType == PlayerActionType.DevelopTechCard &&
                                                        (act.Data[0] as CardInfo).InternalId == card.InternalId);
                    msg.AttachedData.Add("PlayerAction", action);
                    Channel.Broadcast(msg);
                }
            }
        }
Пример #18
0
        public override void ProcessGameEvents(System.Object sender, GameUIEventArgs args)
        {
            #region ProcessActionPhaseIdleStateEvents - TrySelect
            if (args.EventType == GameUIEventType.TrySelect)
            {
                //在空闲状态,允许点击的UI元素如下
                if (args.UIKey.Contains("CardRow"))
                {
                    //卡牌列上的卡
                    //要看是什么张卡,白点够不够
                    var action =
                        CurrentGame.PossibleActions.FirstOrDefault(a => (
                                                                       a.ActionType == PlayerActionType.TakeCardFromCardRow ||
                                                                       a.ActionType == PlayerActionType.PutBackCard) && (
                                                                       Convert.ToInt32(a.Data[1]) ==
                                                                       (int)
                                                                       args.AttachedData[
                                                                           "Position"]));

                    if (action != null)
                    {
                        Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                    }
                }
                else if (args.UIKey.Contains("BuildingCell"))
                {
                    //建筑列表
                    //看有没有相关的Action,没有就不让选
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                }
                else if (args.UIKey.Contains("BuildingsPopupMenuItem"))
                {
                    //Building的MenuItem都是可选的Action
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                }
                else if (args.UIKey.Contains("ConstructingWonderBox"))
                {
                    //在建造中的奇迹
                    List <PlayerAction> acceptedActions =
                        CurrentGame.PossibleActions.Where(
                            action =>
                            action.ActionType == PlayerActionType.BuildWonder).ToList();

                    acceptedActions.Sort((a, b) => ((int)a.Data[1]).CompareTo(b.Data[0]));

                    if (acceptedActions.Count > 0)
                    {
                        Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                    }
                }
                else if (args.UIKey.Contains("ConstructingWonderMenuItem"))
                {
                    //Wonder的MenuItem只要拉得出来都是可选的Action
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                }
                else if (args.UIKey.Contains("WorkerBank"))
                {
                    //人力库(要看粮食)
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                }
                else if (args.UIKey.Contains("PlayerTab"))
                {
                    //玩家面板(要看人数)
                    var playerNo = (int)args.AttachedData["PlayerNo"];
                    if (CurrentGame.Boards.Count > playerNo)
                    {
                        Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                    }
                }
                else if (args.UIKey.Contains("HandCivilCard")
                         )
                {
                    //手牌(要看手牌内容)
                    var card = args.AttachedData["Card"] as CardInfo;
                    if (CurrentGame.PossibleActions.FirstOrDefault(
                            action => (
                                action.ActionType == PlayerActionType.DevelopTechCard ||
                                action.ActionType == PlayerActionType.PlayActionCard ||
                                action.ActionType == PlayerActionType.Revolution ||
                                action.ActionType == PlayerActionType.ElectLeader) && (action.Data[0] as CardInfo == card)) !=
                        null)
                    {
                        Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                    }
                }
                else if (args.UIKey.Contains("HandMilitaryCard"))
                {
                    var card = args.AttachedData["Card"] as CardInfo;
                    if (CurrentGame.PossibleActions.FirstOrDefault(
                            action =>
                            action.ActionType == PlayerActionType.SetupTactic && action.Data[0] as CardInfo == card) !=
                        null)
                    {
                        Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                    }
                }
                else if (args.UIKey.Contains("DialogButton"))
                {
                    //按钮
                    Channel.Broadcast(new ManagerGameUIEventArgs(GameUIEventType.AllowSelect, args.UIKey));
                }
            }
            #endregion

            #region ProcessActionPhaseIdleStateEvents - Selected
            if (args.EventType == GameUIEventType.Selected)
            {
                //如果玩家在空闲状态下,选中不同的目标
                //TODO 这里省略判断,默认合法(理论上上面TrySelect的内容应该留在这里判断)
                if (args.UIKey.Contains("CardRow"))
                {
                    //卡牌列上的卡

                    //第一步,把要的action找出来
                    var action =
                        CurrentGame.PossibleActions.FirstOrDefault(a => (
                                                                       a.ActionType == PlayerActionType.TakeCardFromCardRow ||
                                                                       a.ActionType == PlayerActionType.PutBackCard) && (
                                                                       Convert.ToInt32(a.Data[1]) ==
                                                                       (int)
                                                                       args.AttachedData[
                                                                           "Position"]));

                    //第二步,发消息给server,take action
                    var msg = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                    msg.AttachedData.Add("PlayerAction", action);
                    Channel.Broadcast(msg);
                }
                else if (args.UIKey.Contains("WorkerBank"))
                {
                    //人力库(要看粮食)

                    var action =
                        CurrentGame.PossibleActions.FirstOrDefault(
                            a => a.ActionType == PlayerActionType.IncreasePopulation);

                    var msg = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                    msg.AttachedData.Add("PlayerAction", action);
                    Channel.Broadcast(msg);
                }
                else if (args.UIKey.Contains("BuildingCell"))
                {
                    //建筑列表
                    var card = (CardInfo)args.AttachedData["Card"];
                    //看有没有相关的Action,没有就不让选
                    List <PlayerAction> acceptedActions = new List <PlayerAction>();

                    foreach (var action in CurrentGame.PossibleActions)
                    {
                        if (action.ActionType == PlayerActionType.BuildBuilding &&
                            ((CardInfo)action.Data[0]).InternalId == card.InternalId)
                        {
                            acceptedActions.Add(action);
                        }

                        if (action.ActionType == PlayerActionType.UpgradeBuilding)
                        {
                            if (((CardInfo)action.Data[0]).InternalId == card.InternalId ||
                                ((CardInfo)action.Data[1]).InternalId == card.InternalId)
                            {
                                acceptedActions.Add(action);
                            }
                        }
                        if (action.ActionType == PlayerActionType.Disband ||
                            action.ActionType == PlayerActionType.Destory)
                        {
                            if (((CardInfo)action.Data[0]).InternalId == card.InternalId)
                            {
                                acceptedActions.Add(action);
                            }
                        }
                    }
                    var msg = new ManagerGameUIEventArgs(GameUIEventType.PopupMenu, args.UIKey);
                    msg.AttachedData.Add("Actions", acceptedActions);
                    Channel.Broadcast(msg);
                }
                else if (args.UIKey.Contains("BuildingsPopupMenuItem"))
                {
                    var action = args.AttachedData["Action"] as PlayerAction;
                    var msg    = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                    msg.AttachedData.Add("PlayerAction", action);

                    if (action == null)
                    {
                        return;
                    }

                    if (action.Internal)
                    {
                        //出错了,建筑面板不可能有InternalAction
                        Debug.Log("Error: BuildingsPopupMenuItem has Internal Action");
                    }
                    else
                    {
                        Channel.Broadcast(msg);
                    }
                }
                else if (args.UIKey.Contains("ConstructingWonderBox"))
                {
                    //在建造中的奇迹
                    List <PlayerAction> acceptedActions =
                        CurrentGame.PossibleActions.Where(
                            action =>
                            action.ActionType == PlayerActionType.BuildWonder).ToList();

                    acceptedActions.Sort((a, b) => ((int)a.Data[1]).CompareTo(b.Data[0]));

                    if (acceptedActions.Count > 0)
                    {
                        var msg = new ManagerGameUIEventArgs(GameUIEventType.PopupMenu, args.UIKey);
                        msg.AttachedData.Add("Actions", acceptedActions);
                        Channel.Broadcast(msg);
                    }
                }
                else if (args.UIKey.Contains("ConstructingWonderMenuItem"))
                {
                    var action = args.AttachedData["Action"] as PlayerAction;
                    var msg    = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                    msg.AttachedData.Add("PlayerAction", action);

                    if (action == null)
                    {
                        return;
                    }

                    if (action.Internal)
                    {
                        //出错了,Wonder不可能有InternalAction
                        Debug.Log("Error: BuildingsPopupMenuItem has Internal Action");
                    }
                    else
                    {
                        Channel.Broadcast(msg);
                    }
                }
                else if (args.UIKey.Contains("PlayerTab"))
                {
                    //玩家面板
                    var playerNo = (int)args.AttachedData["PlayerNo"];
                    if (CurrentGame.Boards.Count > playerNo)
                    {
                        Manager.SwitchDisplayingBoardNo(playerNo);
                    }
                }
                else if (args.UIKey.Contains("DialogButton"))
                {
                    //按钮
                    if (args.UIKey.Contains("ResetActionPhase"))
                    {
                        var action =
                            CurrentGame.PossibleActions.FirstOrDefault(
                                a => a.ActionType == PlayerActionType.ResetActionPhase);

                        var msg = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                        msg.AttachedData.Add("PlayerAction", action);
                        Channel.Broadcast(msg);
                    }
                    else if (args.UIKey.Contains("EndActionPhase"))
                    {
                        var action =
                            CurrentGame.PossibleActions.FirstOrDefault(
                                a => a.ActionType == PlayerActionType.EndActionPhase);

                        var msg = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                        msg.AttachedData.Add("PlayerAction", action);
                        Channel.Broadcast(msg);
                    }
                }
                else if (args.UIKey.Contains("HandCivilCard"))
                {
                    //手牌(要看手牌内容)
                    var handCardActions = CurrentGame.PossibleActions.Where(
                        a =>
                        a.ActionType == PlayerActionType.DevelopTechCard ||
                        a.ActionType == PlayerActionType.PlayActionCard ||
                        a.ActionType == PlayerActionType.Revolution ||
                        a.ActionType == PlayerActionType.ElectLeader).ToList();
                    var action = handCardActions.FirstOrDefault(
                        a => a.Data[0] as CardInfo == args.AttachedData["Card"] as CardInfo);

                    var msg = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                    msg.AttachedData.Add("PlayerAction", action);

                    if (action == null)
                    {
                        return;
                    }

                    if (action.Internal)
                    {
                        Manager.SwitchState(GameManagerState.ActionPhaseInternalQuery,
                                            new Dictionary <String, System.Object>()
                        {
                            { ActionPhaseChooseTargetStateHandler.StateNameTriggerCard, args.AttachedData["Card"] as CardInfo },
                            { ActionPhaseChooseTargetStateHandler.StateNameTriggerAction, action }
                        });
                    }
                    else
                    {
                        Channel.Broadcast(msg);
                    }
                }
                else if (args.UIKey.Contains("HandMilitaryCard"))
                {
                    var card       = args.AttachedData["Card"] as CardInfo;
                    var cardAction = CurrentGame.PossibleActions.FirstOrDefault(
                        action =>
                        action.ActionType == PlayerActionType.SetupTactic && action.Data[0] as CardInfo == card);

                    if (cardAction == null)
                    {
                        return;
                    }

                    var msg = new ManagerGameUIEventArgs(GameUIEventType.TakeAction, "NetworkManager");
                    msg.AttachedData.Add("PlayerAction", cardAction);

                    if (cardAction.Internal)
                    {
                        LogRecorder.Log("Error HandMilitaryCard Internal Action");
                    }
                    else
                    {
                        Channel.Broadcast(msg);
                    }
                }
            }
            #endregion
        }