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; } }
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); } }
protected override void OnSubscribedGameEvents(Object sender, GameUIEventArgs args) { if (!args.UIKey.Contains(Guid)) { return; } //含有自己的GUID,是发给自己的 if (args.EventType == GameUIEventType.AllowSelect) { Highlight = true; } }
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>); } }
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; } } }
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); } } }
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")); } } }
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); } } } }
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); } } }
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 }