Add jumping
This commit is contained in:
parent
a8b2a06aa2
commit
d7aad665e2
1 changed files with 26 additions and 4 deletions
30
game.cpp
30
game.cpp
|
@ -675,13 +675,13 @@ class Character
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Camera mCamera;
|
Camera mCamera;
|
||||||
|
Unit mVericalSpeed;
|
||||||
|
|
||||||
Character()
|
Character()
|
||||||
{
|
{
|
||||||
mCamera.position.x = 7807;//UNITS_PER_SQUARE * 1;
|
mCamera.position.x = 7807;//UNITS_PER_SQUARE * 1;
|
||||||
mCamera.position.y = 18489;//UNITS_PER_SQUARE * 5;
|
mCamera.position.y = 18489;//UNITS_PER_SQUARE * 5;
|
||||||
mCamera.direction = -3550;//200;
|
mCamera.direction = -3550;//200;
|
||||||
mCamera.fovAngle = UNITS_PER_SQUARE / 4;
|
|
||||||
mCamera.height = UNITS_PER_SQUARE * 3;
|
mCamera.height = UNITS_PER_SQUARE * 3;
|
||||||
mCamera.resolution.x = 110 / SUBSAMPLE;
|
mCamera.resolution.x = 110 / SUBSAMPLE;
|
||||||
mCamera.resolution.y = 88;
|
mCamera.resolution.y = 88;
|
||||||
|
@ -691,7 +691,9 @@ public:
|
||||||
mCamera.collisionHeightBelow = UNITS_PER_SQUARE;
|
mCamera.collisionHeightBelow = UNITS_PER_SQUARE;
|
||||||
mCamera.collisionHeightAbove = UNITS_PER_SQUARE / 3;
|
mCamera.collisionHeightAbove = UNITS_PER_SQUARE / 3;
|
||||||
mCamera.collisionStepHeight = UNITS_PER_SQUARE / 2;
|
mCamera.collisionStepHeight = UNITS_PER_SQUARE / 2;
|
||||||
}
|
|
||||||
|
mVericalSpeed = 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Character player;
|
Character player;
|
||||||
|
@ -848,13 +850,13 @@ int main()
|
||||||
{
|
{
|
||||||
draw();
|
draw();
|
||||||
|
|
||||||
int16_t step = max(1,UNITS_PER_SQUARE / (p.bBtn() ? 7 : 15));
|
int16_t step = max(1,UNITS_PER_SQUARE / 15);
|
||||||
const int16_t step2 = max(UNITS_PER_SQUARE / 40,1);
|
const int16_t step2 = max(UNITS_PER_SQUARE / 40,1);
|
||||||
|
|
||||||
Vector2D d = angleToDirection(player.mCamera.direction);
|
Vector2D d = angleToDirection(player.mCamera.direction);
|
||||||
|
|
||||||
Vector2D moveOffset;
|
Vector2D moveOffset;
|
||||||
Unit heightOffset = -100;
|
Unit heightOffset = player.mVericalSpeed;
|
||||||
|
|
||||||
moveOffset.x = 0;
|
moveOffset.x = 0;
|
||||||
moveOffset.y = 0;
|
moveOffset.y = 0;
|
||||||
|
@ -916,8 +918,28 @@ int main()
|
||||||
else
|
else
|
||||||
player.mCamera.direction += addition * step2;
|
player.mCamera.direction += addition * step2;
|
||||||
|
|
||||||
|
Unit prevHeight = player.mCamera.height;
|
||||||
|
|
||||||
moveCameraWithCollision(&player.mCamera,moveOffset,heightOffset,
|
moveCameraWithCollision(&player.mCamera,moveOffset,heightOffset,
|
||||||
floorHeightAt, ceilingHeightAt);
|
floorHeightAt, ceilingHeightAt);
|
||||||
|
|
||||||
|
Unit heightDiff = player.mCamera.height - prevHeight;
|
||||||
|
|
||||||
|
if (heightDiff == 0)
|
||||||
|
player.mVericalSpeed = 0; // hit floor/ceiling
|
||||||
|
|
||||||
|
|
||||||
|
if (player.mVericalSpeed == 0 && p.bBtn())
|
||||||
|
{
|
||||||
|
int16_t camX = divRoundDown(player.mCamera.position.x,UNITS_PER_SQUARE);
|
||||||
|
int16_t camY = divRoundDown(player.mCamera.position.y,UNITS_PER_SQUARE);
|
||||||
|
|
||||||
|
if (player.mCamera.height - player.mCamera.collisionHeightBelow -
|
||||||
|
floorHeightAt(camX,camY) < 2)
|
||||||
|
player.mVericalSpeed = 200; // jump
|
||||||
|
}
|
||||||
|
|
||||||
|
player.mVericalSpeed -= 20; // gravity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue