public Block(
     Vector2f position,
     TileOrientation orientation,
     Dictionary <TileOrientation, GameSprite> tileSet)
 {
     pos          = position;
     box          = new GameSprite(tileSet[orientation]);
     box.Position = position;
     box.Update(0);
 }
        public TestPlayer(Vector2f defaultPos)
        {
            spriteIndex          = new GameSprite(Sprites.getInstance().PlayerStandRight);
            pos                  = defaultPos;
            spriteIndex.Position = pos;
            spriteIndex.Update(0);

            gravity   = 8500;
            jumpSpeed = 2200;
            canJump   = false;

            vel = new Vector2f(0, 0);
            acc = new Vector2f(0, gravity);

            moveSpeed  = 700;
            facingLeft = false;
        }
        public void Update(float deltaTime, KeyState keys, Room room)
        {
            if (keys.Jump && canJump)
            {
                var platforms = Engine.FindGameObjectsByTag("block", room);
                if (Engine.IsPlaceMeeting(new Vector2f(pos.X, pos.Y + 1), this, platforms))
                {
                    vel.Y   = -jumpSpeed;
                    canJump = false;
                }
            }

            if (keys.Left && pos.X > 0)
            {
                if (vel.X != -moveSpeed)
                {
                    vel.X       = -moveSpeed;
                    spriteIndex = new GameSprite(Sprites.getInstance().PlayerWalkLeft);
                }

                facingLeft = true;
            }
            else if (keys.Right && pos.X < room.GetSize().X)
            {
                if (vel.X != moveSpeed)
                {
                    vel.X       = moveSpeed;
                    spriteIndex = new GameSprite(Sprites.getInstance().PlayerWalkRight);
                }

                facingLeft = false;
            }
            else
            {
                vel.X = 0;

                if (facingLeft)
                {
                    spriteIndex = new GameSprite(Sprites.getInstance().PlayerStandLeft);
                }
                else
                {
                    spriteIndex = new GameSprite(Sprites.getInstance().PlayerStandRight);
                }
            }

            var blocks = Engine.FindGameObjectsByTag("block", room);

            if (Engine.IsPlaceMeeting(new Vector2f(pos.X + vel.X * deltaTime, pos.Y), this, blocks))
            {
                while (!Engine.IsPlaceMeeting(new Vector2f(pos.X, pos.Y), this, blocks))
                {
                    pos.X += Math.Sign(vel.X);
                }
                pos.X -= Math.Sign(vel.X);
                vel.X  = 0;
            }

            if (Engine.IsPlaceMeeting(new Vector2f(pos.X + 2, pos.Y + vel.Y * deltaTime), this, blocks) &&
                Engine.IsPlaceMeeting(new Vector2f(pos.X - 2, pos.Y + vel.Y * deltaTime), this, blocks))
            {
                while (!Engine.IsPlaceMeeting(new Vector2f(pos.X, pos.Y), this, blocks))
                {
                    pos.Y += Math.Sign(vel.Y);
                }
                pos.Y -= Math.Sign(vel.Y);

                vel.Y = 0;
                acc.Y = 0;

                if (!keys.Jump)
                {
                    canJump = true;
                }
            }
            else
            {
                acc.Y = gravity;
            }

            if (vel.Y > 0)
            {
                if (facingLeft)
                {
                    spriteIndex = new GameSprite(Sprites.getInstance().PlayerFallLeft);
                }
                else
                {
                    spriteIndex = new GameSprite(Sprites.getInstance().PlayerFallRight);
                }
            }
            else if (vel.Y < 0)
            {
                if (facingLeft)
                {
                    spriteIndex = new GameSprite(Sprites.getInstance().PlayerJumpLeft);
                }
                else
                {
                    spriteIndex = new GameSprite(Sprites.getInstance().PlayerJumpRight);
                }
            }
            else if (spriteIndex.ImageSpeed == 0)
            {
                if (facingLeft)
                {
                    spriteIndex = new GameSprite(Sprites.getInstance().PlayerWalkLeft);
                }
                else
                {
                    spriteIndex = new GameSprite(Sprites.getInstance().PlayerWalkRight);
                }
            }

            spriteIndex.Position = pos;
            spriteIndex.Update(deltaTime);
        }