fixed bug with game over on machines where nanosec counter fills up quicky
This commit is contained in:
4
main.c
4
main.c
@@ -111,6 +111,10 @@ int main(int argc, char* args[]) {
|
|||||||
// dbg_printf("frameTime = %d\n", frameTime);
|
// dbg_printf("frameTime = %d\n", frameTime);
|
||||||
if (frameTime < FRAME_TIME) { // 1000ms/60frames = 16.(6)
|
if (frameTime < FRAME_TIME) { // 1000ms/60frames = 16.(6)
|
||||||
// printf("frameTime = %d\n", frameTime);
|
// printf("frameTime = %d\n", frameTime);
|
||||||
|
if (runner.crashed) {
|
||||||
|
// dbg_printf("runner.timeAfterCrashedMs +=\n");
|
||||||
|
runner.timeAfterCrashedMs += FRAME_TIME - frameTime;
|
||||||
|
}
|
||||||
graphicsDelay(FRAME_TIME - frameTime);
|
graphicsDelay(FRAME_TIME - frameTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
4
misc.c
4
misc.c
@@ -22,5 +22,7 @@ void intToStr(int num, int ndigits, char* result) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getTimeStamp() { // in ms
|
int getTimeStamp() { // in ms
|
||||||
return (_ksys_get_ns_count()/1000000);
|
uint64_t x = 0;
|
||||||
|
x = _ksys_get_ns_count();
|
||||||
|
return (x/1000000);
|
||||||
}
|
}
|
||||||
|
19
runner.c
19
runner.c
@@ -13,6 +13,7 @@ void runnerInit() {
|
|||||||
runner.activated = false;
|
runner.activated = false;
|
||||||
runner.playing = false;
|
runner.playing = false;
|
||||||
runner.crashed = false;
|
runner.crashed = false;
|
||||||
|
runner.timeAfterCrashedMs = 0;
|
||||||
runner.paused = false;
|
runner.paused = false;
|
||||||
runner.inverted = false;
|
runner.inverted = false;
|
||||||
runner.playingIntro = false;
|
runner.playingIntro = false;
|
||||||
@@ -83,12 +84,17 @@ void runnerOnKeyUp(int key) {
|
|||||||
}
|
}
|
||||||
else if (runner.crashed) {
|
else if (runner.crashed) {
|
||||||
// Check that enough time has elapsed before allowing jump key to restart.
|
// Check that enough time has elapsed before allowing jump key to restart.
|
||||||
int deltaTime = getTimeStamp() - runner.time;
|
|
||||||
if (deltaTime < 0) {
|
int now = getTimeStamp();
|
||||||
deltaTime = DELTA_MS_DEFAULT;
|
int deltaTime = now - runner.time;
|
||||||
}
|
// if (deltaTime < 0) {
|
||||||
//printf(".deltaTime = %d\n", deltaTime);
|
// deltaTime = DELTA_MS_DEFAULT;
|
||||||
if (key == RUNNER_KEYCODE_RESTART || (deltaTime >= RUNNER_GAMEOVER_CLEAR_TIME && (key == RUNNER_KEYCODE_JUMP_1 || key == RUNNER_KEYCODE_JUMP_2))) {
|
// runner.time = 0;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// dbg_printf(".now = %d .deltaTime = %d runner.time = %d\n", now, deltaTime, runner.time);
|
||||||
|
if (key == RUNNER_KEYCODE_RESTART || (runner.timeAfterCrashedMs >= RUNNER_GAMEOVER_CLEAR_TIME && (key == RUNNER_KEYCODE_JUMP_1 || key == RUNNER_KEYCODE_JUMP_2))) {
|
||||||
|
//dbg_printf("timeAfterCrashedMs = %d\n", runner.timeAfterCrashedMs);
|
||||||
runnerRestart();
|
runnerRestart();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -235,6 +241,7 @@ void runnerRestart() {
|
|||||||
runner.runningTime = 0;
|
runner.runningTime = 0;
|
||||||
runner.playing = true;
|
runner.playing = true;
|
||||||
runner.crashed = false;
|
runner.crashed = false;
|
||||||
|
runner.timeAfterCrashedMs = 0;
|
||||||
runner.distanceRan = 0;
|
runner.distanceRan = 0;
|
||||||
runner.currentSpeed = RUNNER_SPEED;
|
runner.currentSpeed = RUNNER_SPEED;
|
||||||
runner.time = getTimeStamp();
|
runner.time = getTimeStamp();
|
||||||
|
Reference in New Issue
Block a user