public async ValueTask OnPlayerMovement(IPlayerMovementEvent e) { if (CodeAndInfos.ContainsKey(e.Game)) { List <IClientPlayer> impostors = CodeAndInfos[e.Game].impostors; ConcurrentDictionary <IClientPlayer, Vector2> frozens = CodeAndInfos[e.Game].frozens; IEnumerable <IClientPlayer> crewmates = e.Game.Players.Except(impostors).Except(frozens.Keys); if (frozens.ContainsKey(e.ClientPlayer)) { if (frozens.TryGetValue(e.ClientPlayer, out var position)) { await e.ClientPlayer.Character.NetworkTransform.SnapToAsync(position); } else { _logger.LogWarning($"[FTag] Could not read position from ConcurrentDictionary for frozen player: {e.ClientPlayer.Character.PlayerInfo.PlayerName} in {e.Game.Code}"); } return; } if (crewmates.Contains(e.ClientPlayer)) { var sun = e.ClientPlayer; foreach (var pair in frozens) { IClientPlayer frozen = pair.Key; Vector2 position = pair.Value; if (sun != frozen && CheckIfColliding(sun, frozen)) { await Unfreeze(frozen).ConfigureAwait(true); frozens.Remove(frozen, out _); } } } if (impostors.Contains(e.ClientPlayer)) { var impostor = e.ClientPlayer; foreach (var crewmate in crewmates) { if (CheckIfColliding(crewmate, impostor)) { frozens.TryAdd(crewmate, crewmate.Character.NetworkTransform.Position); await crewmate.Character.SetColorAsync(ColorType.Blue); if (!crewmates.Any()) { foreach (var nonImpostor in e.Game.Players.Except(impostors)) { await nonImpostor.KickAsync(); } } } } } } }
public void OnPlayerMove(IPlayerMovementEvent e) { var position = e.PlayerControl.NetworkTransform.Position; _proximityHub.Clients.Group(e.Game.Code).PlayerMove( e.PlayerControl.PlayerInfo.PlayerName, new Pose(position.X, position.Y)); }
public void OnPlayerMovement(IPlayerMovementEvent evt) => Interlocked.Increment(ref _movementsPerSecond);
public void OnPlayerMovement(IPlayerMovementEvent evt) { Interlocked.Increment(ref OnPlayerMovementCount); }