예제 #1
0
        public void HandleBombRequest(RequestPlaceBombPacket request)
        {
            var sender = RetrieveSender(request);

            if (sender == null)
            {
                return;
            }

            var transformComponent = (TransformComponent)sender.GetComponent(typeof(TransformComponent));
            var bombModifier       = (BombCountModifierComponent)sender.GetComponent(typeof(BombCountModifierComponent));

            if (bombModifier.Amount == bombModifier.CurrentBombCount)
            {
                return;
            }
            else
            {
                bombModifier.CurrentBombCount++;
            }

            Vector2 location = transformComponent.LastLocalPosition;

            location  = request.CurrentPosition;
            location += transformComponent.Size * new Vector2(0.5f, 0.875f);
            // TODO: Remove hardcoded 32s

            location = new Vector2(32 * (int)(location.X / 32), 32 * (int)(location.Y / 32));


            var bomb = EntityFactory.CreateBomb(location, sender);

            AddEntity(bomb);
        }
예제 #2
0
        private void HandleBombRequest(RequestPlaceBombPacket requestPlaceBombPacket)
        {
            // Find the session
            var session = GetUserSession(requestPlaceBombPacket.Sender);

            // If the session is valid
            if (session != null)
            {
                session.HandleBombRequest(requestPlaceBombPacket);
            }
        }
예제 #3
0
        public override void HandleInput(InputState inputState)
        {
            // Get the transform component
            var transformComponent = (TransformComponent)_player.GetComponent(typeof(TransformComponent));
            var bombModifier       = (BombCountModifierComponent)_player.GetComponent(typeof(BombCountModifierComponent));

            const int ABSOLUTE_SPEED = 3;

            // We adjust instant velocity as needed here)
            Vector2 newVector = Vector2.Zero;

            if (inputState.NotMoving())
            {
                newVector = Vector2.Zero;
            }

            if (inputState.MoveLeftIssued())
            {
                newVector -= new Vector2(ABSOLUTE_SPEED * 1, 0);
            }

            if (inputState.MoveRightIssued())
            {
                newVector += new Vector2(ABSOLUTE_SPEED * 1, 0);
            }

            if (inputState.MoveUpIssued())
            {
                newVector -= new Vector2(0, ABSOLUTE_SPEED * 1);
            }

            if (inputState.MoveDownIssued())
            {
                newVector += new Vector2(0, ABSOLUTE_SPEED * 1);
            }



            if (newVector != transformComponent.Velocity)
            {
                transformComponent.Velocity = newVector;
            }

            if (inputState.PlaceBomb())
            {
                //TODO: Real validation, for now it's ok

                var packet = new RequestPlaceBombPacket(transformComponent.LocalPosition);
                NetworkManager.Instance.SendPacket(packet);

                // Don't do anything if they can't place any more bombs
                if (bombModifier.Amount == bombModifier.CurrentBombCount)
                {
                    return;
                }
                else
                {
                    bombModifier.CurrentBombCount++;
                }
            }
        }