Fix player update

This commit is contained in:
Miloslav Číž 2020-10-02 17:40:36 +02:00
parent 37a931db7b
commit 8fe888b870
1 changed files with 24 additions and 1 deletions

25
game.h
View File

@ -1331,6 +1331,12 @@ void SFG_initPlayer()
SFG_player.camera.position.y = RCL_UNITS_PER_SQUARE / 2 + SFG_player.camera.position.y = RCL_UNITS_PER_SQUARE / 2 +
SFG_currentLevel.levelPointer->playerStart[1] * RCL_UNITS_PER_SQUARE; SFG_currentLevel.levelPointer->playerStart[1] * RCL_UNITS_PER_SQUARE;
SFG_player.squarePosition[0] =
SFG_player.camera.position.x / RCL_UNITS_PER_SQUARE;
SFG_player.squarePosition[1] =
SFG_player.camera.position.y / RCL_UNITS_PER_SQUARE;
SFG_player.camera.height = SFG_player.camera.height =
SFG_floorHeightAt( SFG_floorHeightAt(
SFG_currentLevel.levelPointer->playerStart[0], SFG_currentLevel.levelPointer->playerStart[0],
@ -3000,6 +3006,17 @@ void SFG_drawLevelStartOverlay()
SFG_FONT_SIZE_MEDIUM,7,255,0); SFG_FONT_SIZE_MEDIUM,7,255,0);
} }
/**
Sets player's height to match the floor height below him.
*/
void SFG_updatePlayerHeight()
{
SFG_player.camera.height =
SFG_floorCollisionHeightAt(
SFG_player.squarePosition[0],SFG_player.squarePosition[1]) +
RCL_CAMERA_COLL_HEIGHT_BELOW;
}
/** /**
Part of SFG_gameStep() for SFG_GAME_STATE_PLAYING. Part of SFG_gameStep() for SFG_GAME_STATE_PLAYING.
*/ */
@ -3010,6 +3027,7 @@ void SFG_gameStepPlaying()
SFG_keyIsDown(SFG_KEY_MENU)) SFG_keyIsDown(SFG_KEY_MENU))
{ {
SFG_setGameState(SFG_GAME_STATE_MENU); SFG_setGameState(SFG_GAME_STATE_MENU);
SFG_playGameSound(3,SFG_MENU_CLICK_VOLUME);
return; return;
} }
@ -3823,7 +3841,8 @@ void SFG_gameStep()
// player die animation (lose) // player die animation (lose)
SFG_updateLevel(); // let monsters and other things continue moving SFG_updateLevel(); // let monsters and other things continue moving
SFG_updatePlayerHeight(); // in case player is on elevator
int32_t t = SFG_game.frameTime - SFG_game.stateChangeTime; int32_t t = SFG_game.frameTime - SFG_game.stateChangeTime;
RCL_Unit h = SFG_floorHeightAt(SFG_player.squarePosition[0], RCL_Unit h = SFG_floorHeightAt(SFG_player.squarePosition[0],
@ -3902,13 +3921,17 @@ void SFG_gameStep()
if (((SFG_game.frameTime - SFG_game.stateChangeTime) > if (((SFG_game.frameTime - SFG_game.stateChangeTime) >
SFG_STORYTEXT_DURATION) && (SFG_keyIsDown(SFG_KEY_A) || SFG_STORYTEXT_DURATION) && (SFG_keyIsDown(SFG_KEY_A) ||
SFG_keyIsDown(SFG_KEY_B))) SFG_keyIsDown(SFG_KEY_B)))
{
SFG_setGameState(SFG_GAME_STATE_MENU); SFG_setGameState(SFG_GAME_STATE_MENU);
SFG_playGameSound(3,SFG_MENU_CLICK_VOLUME);
}
break; break;
case SFG_GAME_STATE_LEVEL_START: case SFG_GAME_STATE_LEVEL_START:
{ {
SFG_updateLevel(); SFG_updateLevel();
SFG_updatePlayerHeight(); // in case player is on elevator
if (SFG_currentLevel.levelNumber > (SFG_game.save[0] & 0x0f)) if (SFG_currentLevel.levelNumber > (SFG_game.save[0] & 0x0f))
{ {