Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void CalculateMovement(float frameTime)
- {
- Vector2 previousPos = Position;
- Velocity.X = MathHelper.Clamp(Velocity.X + horizontalAcceleration * frameTime * movement, -maxHorizontalSpeed, maxHorizontalSpeed);
- if (onGround)
- Velocity.X *= horizontalDragGround;
- else
- Velocity.X *= horizontalDragAir;
- Velocity.Y = MathHelper.Clamp(Velocity.Y + verticalAcceleration * frameTime, -maxVerticalSpeed, maxVerticalSpeed);
- if (onGround)
- Velocity.Y = DoJump();
- DoCollisions();
- if (previousPos.X == Position.X)
- Velocity.X = 0;
- if (previousPos.Y == Position.Y)
- Velocity.Y = 0;
- }
- float DoJump()
- {
- if (World.renderWindow.Input.IsKeyDown(KeyCode.Space))
- return -10;
- else
- return Velocity.Y;
- }
- void DoCollisions()
- {
- onGround = false;
- Position.Y += Velocity.Y;
- Vector2 tileCollision = GetTileCollision();
- if (tileCollision.X != -1 || tileCollision.Y != -1)
- {
- Vector2 collisionDepth = CollisionRectangle.DepthIntersection(
- new Rectangle(
- tileCollision.X * World.tileEngine.TileWidth,
- tileCollision.Y * World.tileEngine.TileHeight,
- World.tileEngine.TileWidth,
- World.tileEngine.TileHeight
- )
- );
- Position.Y += collisionDepth.Y;
- if (collisionDepth.Y < 0)
- onGround = true;
- }
- Position.X += Velocity.X;
- tileCollision = GetTileCollision();
- if (tileCollision.X != -1 || tileCollision.Y != -1)
- {
- Vector2 collisionDepth = CollisionRectangle.DepthIntersection(
- new Rectangle(
- tileCollision.X * World.tileEngine.TileWidth,
- tileCollision.Y * World.tileEngine.TileHeight,
- World.tileEngine.TileWidth,
- World.tileEngine.TileHeight
- )
- );
- Position.X += collisionDepth.X;
- }
- }
- Vector2 GetTileCollision()
- {
- int topLeftTileX = (int)(CollisionRectangle.TopLeft.X / World.tileEngine.TileWidth);
- int topLeftTileY = (int)(CollisionRectangle.TopLeft.Y / World.tileEngine.TileHeight);
- int BottomRightTileX = (int)(CollisionRectangle.DownRight.X / World.tileEngine.TileWidth);
- int BottomRightTileY = (int)(CollisionRectangle.DownRight.Y / World.tileEngine.TileHeight);
- if (CollisionRectangle.DownRight.Y % World.tileEngine.TileHeight == 0)
- BottomRightTileY -= 1;
- if (CollisionRectangle.DownRight.X % World.tileEngine.TileWidth == 0)
- BottomRightTileX -= 1;
- for (int i = topLeftTileX; i <= BottomRightTileX; i++)
- {
- for (int j = topLeftTileY; j <= BottomRightTileY; j++)
- {
- if (World.tileEngine.TileIsSolid(i, j))
- {
- return new Vector2(i,j);
- }
- }
- }
- return new Vector2(-1,-1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement