示例#1
0
        private void ProcessFeedbackMessage(Message message)
        {
            if (message is PlayerFeedbackMessage feedbackMessage)
            {
                var player = PlayerManager.Get(feedbackMessage.PlayerPhotonId);
                player.State = (int)ClientState.FeedbackSent;
                PlayerManager.UpdatePlayer(player);

                if (_simulationLifecycleManager.ECSRoot.ECS.TryGetSystem <EventSystem>(out var eventSystem))
                {
                    foreach (var feedbackPlayer in feedbackMessage.RankedPlayerPhotonIdBySection)
                    {
                        var feedbackEvent = new PlayerFeedbackEvent
                        {
                            PlayerExternalId       = feedbackMessage.PlayerPhotonId,
                            RankedPlayerExternalId = feedbackPlayer.Key,
                            PlayerRankings         = feedbackPlayer.Value
                        };
                        eventSystem.Publish(feedbackEvent);
                    }
                }

                PlayerFeedbackSentEvent?.Invoke(PlayerManager.Players);
                return;
            }

            throw new Exception($"Unhandled Simulation ClientState Message: ${message}");
        }
示例#2
0
 public override void OnLeave(ILeaveGameCallInfo info)
 {
     if (PlayerManager.Players.Count == 0)
     {
         Shutdown(true);
     }
     else
     {
         _simulationLifecycleManager.ECSRoot.ECS.PlayerDisconnected(info.ActorNr - 1);
         PlayerFeedbackSentEvent?.Invoke(PlayerManager.Players);
     }
     base.OnLeave(info);
 }