示例#1
0
        public override void OnCoreGameEventHandler(OnCoreGameEvent data)
        {
            base.OnCoreGameEventHandler(data);

            switch (data.EventCode)
            {
            case EventCode.MatchBegan:
            {
                CoreGameRoot.ExecuteRootMatchBegan();
                break;
            }

            case EventCode.ShowCardAndTurnNext:
            {
                int             current_cards_actor_id = Convert.ToInt32(Network.Client.CurrentRoom.CustomProperties ["current_cards_actor_id"]);
                PlayerViewModel currentCardsPlayer     = CoreGameRoot.PlayerCollection.SingleOrDefault(vm => vm.ActorId == current_cards_actor_id);
                currentCardsPlayer.ExecuteShowCardsToPile();
                CoreGameRoot.ExecuteRefreshCoreGame();
                break;
            }

            case EventCode.PassAndTurnNext:
            {
                CoreGameRoot.ExecuteRefreshCoreGame();
                break;
            }

            case EventCode.MatchOver:
            {
                CoreGameRoot.ExecuteRootMatchOver();
                break;
            }

            case EventCode.ClearCardsInPile:
            {
                CoreGameRoot.Pile.Cards.Clear();
                break;
            }

            default:
                break;
            }
        }
示例#2
0
        public void OnEvent(ExitGames.Client.Photon.EventData photonEvent)
        {
            switch (photonEvent.Code)
            {
            case EventCode.Join:
            {
                RoomPanelViewModel roomPanelVM = OutOfGameRoot.CanvasRoot.PanelCollection.ToList().Single(vm => vm is RoomPanelViewModel) as RoomPanelViewModel;
                roomPanelVM.ExecuteRefreshRoom();
                CoreGameRoot.ExecutePlayerJoin();
                break;
            }

            case EventCode.Leave:
            {
                RoomPanelViewModel roomPanelVM = OutOfGameRoot.CanvasRoot.PanelCollection.ToList().Single(vm => vm is RoomPanelViewModel) as RoomPanelViewModel;
                roomPanelVM.ExecuteRefreshRoom();
                CoreGameRoot.ExecutePlayerLeave();
                break;
            }

            case EventCode.PropertiesChanged:
            {
                RoomPanelViewModel roomPanelVM = OutOfGameRoot.CanvasRoot.PanelCollection.ToList().Single(vm => vm is RoomPanelViewModel) as RoomPanelViewModel;
                roomPanelVM.ExecuteRefreshRoomProperties();
                roomPanelVM.ExecuteRefreshPlayerProperties();
                CoreGameRoot.ExecuteRefreshCoreGame();
                break;
            }

            default:
            {
                // photonEvent.Code == 245; custom raised event.
                object event_content = null;
                photonEvent.Parameters.TryGetValue(ParameterCode.CustomEventContent, out event_content);

                Publish(new OnCoreGameEvent()
                    {
                        EventCode    = photonEvent.Code,
                        EventContent = event_content
                    });
                break;
            }
            }
        }
        public override void PlayerLeave(CoreGameRootViewModel viewModel)
        {
            base.PlayerLeave(viewModel);

            // 在 PlayerCollection 中查找 LBRoom 中没有的, 删除
            List <PlayerViewModel> player_need_remove = new List <PlayerViewModel> ();

            viewModel.PlayerCollection.ToList().ForEach(vm => {
                if (Network.Client.CurrentRoom.Players.ToList().Exists(kv => kv.Value.ID == vm.ActorId) == false)
                {
                    player_need_remove.Add(vm);
                }
            });

            foreach (var vm in player_need_remove)
            {
                viewModel.PlayerCollection.Remove(vm);
            }

            viewModel.ExecuteCalcPosIdAndRepos();
            viewModel.ExecuteRefreshCoreGame();
        }
        public override void PlayerJoin(CoreGameRootViewModel viewModel)
        {
            base.PlayerJoin(viewModel);
            // 在 LBRoom 中查找 PlayerCollection 中没有的, 加入
            Network.Client.CurrentRoom.Players.OrderBy(_ => _.Key).ToList().ForEach(kv => {
                int actorId   = kv.Key;
                Player player = kv.Value;

                if (viewModel.PlayerCollection.ToList().Exists(vm => vm.ActorId == actorId) == false)
                {
                    PlayerViewModel playerVM    = MVVMKernelExtensions.CreateViewModel <PlayerViewModel> ();
                    playerVM.ActorId            = player.ID;
                    playerVM.PlayerName         = player.Name;
                    playerVM.IsSelf             = player.IsLocal;
                    playerVM.PlayerRoomIdentity = player.IsMasterClient ? RoomIdentity.RoomMaster : RoomIdentity.RoomGuest;
                    playerVM.LBPlayer           = player;

                    viewModel.PlayerCollection.Add(playerVM);
                }
            });

            viewModel.ExecuteCalcPosIdAndRepos();
            viewModel.ExecuteRefreshCoreGame();
        }