private void LogPlayerFeedback(PlayerFeedbackEvent playerFeedbackEvent) { try { var playerConfig = _scenario.Configuration.PlayerConfiguration.SingleOrDefault(pc => pc.ExternalId == playerFeedbackEvent.PlayerExternalId); var rankedPlayerConfig = _scenario.Configuration.PlayerConfiguration.SingleOrDefault(pc => pc.ExternalId == playerFeedbackEvent.RankedPlayerExternalId); if (playerConfig != null && rankedPlayerConfig != null) { var player = _context.InstancePlayers.Find(_game.Id, playerConfig.Id); var rankedPlayer = _context.InstancePlayers.Find(_game.Id, rankedPlayerConfig.Id); if (player != null && rankedPlayer != null) { var playerFeedback = new PlayerFeedback() { Player = player, RankedPlayer = rankedPlayer, LeadershipRank = playerFeedbackEvent.PlayerRankings[0], CommunicationRank = playerFeedbackEvent.PlayerRankings[1], CooperationRank = playerFeedbackEvent.PlayerRankings[2], }; _context.PlayerFeedback.Add(playerFeedback); } } } catch (Exception ex) { // TODO: log } }
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}"); }