예제 #1
0
        private void UpdateStateManager()
        {
            List <Actions> actions = new List <Actions>();

            bool hasPressedLeft = false, hasPressedRight = false, hasDrank = false;

            foreach (IController controller in controllers)
            {
                if (controller.IsActionActive(Actions.MoveLeft))
                {
                    hasPressedLeft = true;
                    if (!hasPressedRight)
                    {
                        actions.Add(Actions.MoveLeft);
                        CollisionDetector.DoPositionsIntersect(Position, Position, Position, Position);
                    }
                }

                if (controller.IsActionActive(Actions.MoveRight))
                {
                    hasPressedRight = true;
                    if (!hasPressedLeft)
                    {
                        actions.Add(Actions.MoveRight);
                    }
                }
                if (!hasPressedLeft && !hasPressedRight)
                {
                    Velocity = new Vector2(0, Velocity.Y);
                }

                if (controller.IsActionActive(Actions.Jump))
                {
                    actions.Add(Actions.Jump);
                }

                if (controller.IsActionActive(Actions.PickUp))
                {
                    if (keyPickupHeld == false)
                    {
                        actions.Add(Actions.PickUp);
                        keyPickupHeld = true;
                    }
                }
                else
                {
                    keyPickupHeld = false;
                }

                if (controller.IsActionActive(Actions.Drink) && !hasDrank)
                {
                    hasDrank = true;
                    actions.Add(Actions.Drink);
                }
            }

            ProcessActions(actions);
        }
예제 #2
0
        private static void OutCollisionRectangle(ICollidable collidable1, Vector2 newPosition, ICollidable collidable2, out Vector2 position, out Vector2 size)
        {
            if (!CollisionDetector.DoPositionsIntersect(newPosition, collidable1.Size, collidable2.Position, collidable2.Size))
            {
                position = size = new Vector2();
                return;
            }

            float x1 = Math.Max(newPosition.X, collidable2.Position.X);
            float y1 = Math.Max(newPosition.Y, collidable2.Position.Y);
            float x2 = Math.Min(newPosition.X + collidable1.Size.X, collidable2.Position.X + collidable2.Size.X);
            float y2 = Math.Min(newPosition.Y + collidable1.Size.Y, collidable2.Position.Y + collidable2.Size.Y);

            position = new Vector2(x1, y1);
            size     = new Vector2(Math.Abs(x2 - x1), Math.Abs(y2 - y1));
        }