예제 #1
0
        /// <summary>
        /// Creates Dictionary for all Animations available to MainPlayer
        /// </summary>
        private void CreateAnimationDictionary()
        {
            Animations = new Dictionary <string, Animation>();

            Animations.Add("MoveUp", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(32, 160)));
            Animations.Add("MoveDown", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(0, 160)));
            Animations.Add("MoveLeft", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(96, 160)));
            Animations.Add("MoveRight", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(64, 160)));

            Animations.Add("SwordDown", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(0, 176)));
            Animations.Add("SwordUp", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(32, 176)));
            Animations.Add("SwordRight", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(64, 176)));
            Animations.Add("SwordLeft", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(96, 176)));

            Animations.Add("PushingDown", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(0, 192)));
            Animations.Add("PushingUp", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(32, 192)));
            Animations.Add("PushingRight", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(64, 192)));
            Animations.Add("PushingLeft", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(96, 192)));

            Animations.Add("PullingDown", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(0, 208)));
            Animations.Add("PullingUp", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(32, 208)));
            Animations.Add("PullingRight", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(64, 208)));
            Animations.Add("PullingLeft", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(96, 208)));

            Animations.Add("CarryDown", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(0, 224)));
            Animations.Add("CarryUp", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(32, 224)));
            Animations.Add("CarryRight", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(64, 224)));
            Animations.Add("CarryLeft", new Animation(AssetManager.SpriteSheets["PlayerSheet"], 2, 16, 16, 0.2f, new Vector2(96, 224)));

            CurrentAnimation = "MoveDown";

            AnimationLibrary = new AnimationLibrary("MainPlayer", Animations);

            AnimationManager = new AnimationManager(AnimationLibrary);
            AnimationManager.Play(CurrentAnimation);
        }
예제 #2
0
 public override void Draw(SpriteBatch spriteBatch)
 {
     AnimationManager.Draw(spriteBatch, Position);
 }
예제 #3
0
 public override void Update(GameTime gameTime)
 {
     AnimationManager.Update(gameTime);
 }
예제 #4
0
        public void MoveToNewArea(Rectangle collisionRectangle, Rectangle areaRectangle, GameTime gameTime)
        {
            float deltaTime = (float)gameTime.ElapsedGameTime.TotalSeconds;

            if (TransitionMoveState == AreaTransitionMoveState.Start)
            {
                // Check Rectangle width/height
                float _collisionWidth, _collisionHeight;

                _collisionHeight = collisionRectangle.Height;
                _collisionWidth  = collisionRectangle.Width;

                if (_collisionWidth < _collisionHeight)
                {
                    // Slide into new area using X-coordinate
                    if (OriginPoint.X < areaRectangle.Left)
                    {
                        TransitionMoveState = AreaTransitionMoveState.SlideRight;
                        TransformPosition   = Position + new Vector2(16, 0);
                    }
                    else
                    {
                        TransitionMoveState = AreaTransitionMoveState.SlideLeft;
                        TransformPosition   = Position + new Vector2(-16, 0);
                    }
                    return;
                }
                else
                {
                    // Slide into new area using Y-coordinate
                    if (OriginPoint.Y > areaRectangle.Bottom)
                    {
                        TransitionMoveState = AreaTransitionMoveState.SlideUp;
                        TransformPosition   = Position + new Vector2(0, -16);
                    }
                    else
                    {
                        TransitionMoveState = AreaTransitionMoveState.SlideDown;
                        TransformPosition   = Position + new Vector2(0, 16);
                    }
                    return;
                }
            }
            else
            {
                Vector2 movePosition = new Vector2(0, 0);

                switch (TransitionMoveState)
                {
                case AreaTransitionMoveState.SlideDown:
                {
                    if (Position.Y >= TransformPosition.Y)
                    {
                        TransitionMoveState = AreaTransitionMoveState.Complete;
                    }
                    else
                    {
                        movePosition = movePosition + new Vector2(0, (32 * deltaTime));
                    }

                    break;
                }

                case AreaTransitionMoveState.SlideUp:
                {
                    if (Position.Y <= TransformPosition.Y)
                    {
                        TransitionMoveState = AreaTransitionMoveState.Complete;
                    }
                    else
                    {
                        movePosition = movePosition + new Vector2(0, -(32 * deltaTime));
                    }
                    break;
                }

                case AreaTransitionMoveState.SlideRight:
                {
                    if (Position.X >= TransformPosition.X)
                    {
                        TransitionMoveState = AreaTransitionMoveState.Complete;
                    }
                    else
                    {
                        movePosition = movePosition + new Vector2((32 * deltaTime), 0);
                    }

                    break;
                }

                case AreaTransitionMoveState.SlideLeft:
                {
                    if (Position.X <= TransformPosition.X)
                    {
                        TransitionMoveState = AreaTransitionMoveState.Complete;
                    }
                    else
                    {
                        movePosition = movePosition + new Vector2(-(32 * deltaTime), 0);
                    }

                    break;
                }
                }

                Position = Position + movePosition;
                UpdateBoundingBoxPosition();

                AnimationManager.Update(gameTime);
            }
        }
예제 #5
0
        public void Update(GameTime gameTime)
        {
            HandleInput();
            Vector2 _position = new Vector2(0);

            if (ControlKeys["UpKey"] == true)
            {
                if (IsAnimated == false)
                {
                    IsAnimated = true;
                }

                if (IsColliding == true && IsCollisionAbove(SolidBoundingBox.Bottom) == true)
                {
                    CurrentAnimation = "PushingUp";
                }
                else
                {
                    CurrentAnimation = "MoveUp";
                }
                _position = _position + new Vector2(0, -MoveSpeed);
                Facing    = PlayerFacing.Up;
            }
            if (ControlKeys["DownKey"] == true)
            {
                if (IsAnimated == false)
                {
                    IsAnimated = true;
                }

                if (IsColliding == true && IsCollisionLeft(SolidBoundingBox.Top) == true)
                {
                    CurrentAnimation = "PushingDown";
                }
                else
                {
                    CurrentAnimation = "MoveDown";
                }
                _position = _position + new Vector2(0, MoveSpeed);
                Facing    = PlayerFacing.Down;
            }
            if (ControlKeys["RightKey"] == true)
            {
                if (IsAnimated == false)
                {
                    IsAnimated = true;
                }

                if (IsColliding == true && IsCollisionRight(SolidBoundingBox.Left) == true)
                {
                    CurrentAnimation = "PushingRight";
                }
                else
                {
                    CurrentAnimation = "MoveRight";
                }
                _position = _position + new Vector2(MoveSpeed, 0);
                Facing    = PlayerFacing.Right;
            }
            if (ControlKeys["LeftKey"] == true)
            {
                if (IsAnimated == false)
                {
                    IsAnimated = true;
                }

                if (IsColliding == true && IsCollisionLeft(SolidBoundingBox.Right) == true)
                {
                    CurrentAnimation = "PushingLeft";
                }
                else
                {
                    CurrentAnimation = "MoveLeft";
                }
                _position = _position + new Vector2(-MoveSpeed, 0);
                Facing    = PlayerFacing.Left;
            }
            if (ControlKeys["NoMoveKeys"] == true)
            {
                IsAnimated = false;

                switch (Facing)
                {
                case PlayerFacing.Down:
                {
                    CurrentAnimation = "MoveDown";
                    break;
                }

                case PlayerFacing.Up:
                {
                    CurrentAnimation = "MoveUp";
                    break;
                }

                case PlayerFacing.Left:
                {
                    CurrentAnimation = "MoveLeft";
                    break;
                }

                case PlayerFacing.Right:
                {
                    CurrentAnimation = "MoveRight";
                    break;
                }
                }

                AnimationManager.Play(CurrentAnimation);
            }

            if (IsColliding == true)
            {
                foreach (Rectangle _collision in CollisionBoxes)
                {
                    Uncollide(_collision);
                }

                for (int i = CollisionBoxes.Count - 1; i >= 0; i--)
                {
                    CollisionBoxes.RemoveAt(i);
                }

                IsColliding = false;
            }

            UpdatePosition(_position);

            if (IsAnimated == true)
            {
                AnimationManager.Play(CurrentAnimation);
                AnimationManager.Update(gameTime);
            }
        }