/// <summary> /// Method called when the server sends a message that a player crashed /// </summary> /// <param name="parts"></param> private void PlayerCrashResolve(string[] parts) { if (_serverStage != ServerStage.Flight) { _pingTimer.Stop(); _pingTimer.Dispose(); throw new OutOfSyncException(); } PlayerColor crashedPlayer = Enum.Parse <PlayerColor>(parts[1]); _orderManager.Properties.Remove(crashedPlayer); PlayerInfos[crashedPlayer].IsFlying = false; PlayerCrashed?.Invoke(this, crashedPlayer); }
// OnCollisionEnter2D is called when this collider2D/rigidbody2D has begun touching another rigidbody2D/collider2D (2D physics only) void OnCollisionEnter2D(Collision2D collision) { var hittedObject = collision.gameObject; var objectType = DefineHittedObjectType(collision.transform); var hitPoint = collision.GetContact(0).point; var hitDirection = DefineDirection(hitPoint, objectType); var eventArgs = new HitDetectionEventArgs() { HittedObject = hittedObject, HittedObjectType = objectType, HitPoint = hitPoint, HitDirection = hitDirection }; if (IsACrash(eventArgs)) { PlayerCrashed?.Invoke(); } else { PlayerHittedObject?.Invoke(eventArgs); } }
/// <summary> /// Method called when the server sends a message to signal that the building stage ended /// </summary> /// <param name="parts"></param> private void BuildingEndedResolve(string[] parts) { if (!IsReady) { _pingTimer.Stop(); _pingTimer.Dispose(); throw new OutOfSyncException(); } IsReady = false; foreach (PlayerInfo info in PlayerInfos.Values) { info.IsReady = false; } for (int i = 1; i < parts.Length; ++i) { _playerOrder.Add(Enum.Parse <PlayerColor>(parts[i])); } _orderManager = new PlayerOrderManager(_playerOrder, GameStage); _orderManager.PlacesChanged += (sender, e) => { PlacesChanged?.Invoke(this, e); }; _orderManager.PlayerCrashed += (sender, e) => { if (e == Player) { Crashed = true; } PlayerInfos[e].IsFlying = false; PlayerCrashed?.Invoke(this, e); }; _serverStage = ServerStage.PastBuild; BuildingEnded?.Invoke(this, EventArgs.Empty); }
private void OnPlayerCrashed(PlayerColor player) { Properties.Remove(player); PlayerCrashed?.Invoke(this, player); PlacesChanged?.Invoke(this, EventArgs.Empty); }