Ejemplo n.º 1
0
        /// <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);
        }
    }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
 private void OnPlayerCrashed(PlayerColor player)
 {
     Properties.Remove(player);
     PlayerCrashed?.Invoke(this, player);
     PlacesChanged?.Invoke(this, EventArgs.Empty);
 }