From fc7ca18fd76a2adf7924915a58253fd832c2c3ca Mon Sep 17 00:00:00 2001 From: Fries Date: Fri, 21 Jun 2024 22:57:08 -0700 Subject: [PATCH] get the bird to jump! i added deltatime so the bird should hopefully have the same speed if the framerate drops or if you play in PAL 50hz mode. --- data/background-day.png | Bin 7026 -> 7505 bytes source/game.js | 32 +++++++++++++++++++++++++++----- source/main.c | 11 ++++++++++- source/wii_duk.c | 24 +++++++++++++++++------- source/wii_duk.h | 2 +- types.d.ts | 1 + 6 files changed, 56 insertions(+), 14 deletions(-) diff --git a/data/background-day.png b/data/background-day.png index afcb5ec982a3de74cb9186f6af3ba329d63a22bb..f1af5fe6ccd0e907f752515a5fa2c2c4eedf1568 100644 GIT binary patch literal 7505 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 OaXfb7DDlXdEB^z2r}icQ literal 7026 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 b$3|uR-wMAWen9IL0NxiM9{6v+|M9;7ImZIa diff --git a/source/game.js b/source/game.js index ed5d9e6..e0c2afe 100644 --- a/source/game.js +++ b/source/game.js @@ -20,6 +20,8 @@ const PAD_BUTTON_A = 0x0100; const RED_COLOR = rgba(255, 0, 0, 255); const GREEN_COLOR = rgba(0, 255, 0, 255); const WHITE_COLOR = rgba(255, 255, 255, 255); +const FALLING_SPEED = 250; +const TERMINAL_VELOCITY_SPEED = 500; function rgba_compare(rgba1, rgba2) { return (rgba1[0] == rgba2[0]) && @@ -28,13 +30,26 @@ function rgba_compare(rgba1, rgba2) { (rgba1[3] == rgba2[3]); } -globalThis.rectangle_color = RED_COLOR; +/** + * clamps a number to the min and max values. + * @param {number} num + * @param {number} min + * @param {number} max + * @returns a clamped number + */ +function clamp(num, min, max) { + return Math.min(Math.max(num, min), max); +} +globalThis.rectangle_color = RED_COLOR; /** @type {GRRLibTexture} */ globalThis.background = null; /** @type {GRRLibTexture} */ globalThis.bird = null; +globalThis.bird_velocity = 0; +globalThis.bird_position = 0; + function swap_colors() { if (rgba_compare(rectangle_color, RED_COLOR)) { rectangle_color = GREEN_COLOR; @@ -51,6 +66,14 @@ function start() { globalThis.bird = wii.grrlib.load_texture(bird); } +function update_bird() { + const deltatime = wii.get_deltatime(); + bird_position -= bird_velocity * deltatime; + bird_velocity = clamp(bird_velocity - (FALLING_SPEED * deltatime), -TERMINAL_VELOCITY_SPEED, TERMINAL_VELOCITY_SPEED); + + wii.grrlib.draw_img(0, bird_position, bird, 0, 1, 1, WHITE_COLOR); +} + function update() { const pressed = wii.pad.buttons_down(); @@ -60,11 +83,10 @@ function update() { } if (pressed & PAD_BUTTON_A) { - wii.print("a pressed"); - swap_colors(); + bird_velocity = FALLING_SPEED; } - wii.grrlib.fill_screen(WHITE_COLOR); wii.grrlib.draw_img(0, 0, background, 0, 1, 1, WHITE_COLOR); - wii.grrlib.draw_img(0, 0, bird, 0, 1, 1, WHITE_COLOR); + update_bird(); + wii.print("deltatime: " + wii.get_deltatime()) } diff --git a/source/main.c b/source/main.c index 8435ebc..de09c28 100644 --- a/source/main.c +++ b/source/main.c @@ -2,14 +2,18 @@ #include #include #include +#include #include "data.h" #include "wii_duk.h" +const float MICROSECOND = 0.000001f; + extern const char * program; static bool running = true; static GRRLIB_ttfFont * font; static unsigned int green = RGBA(0, 255, 0, 255); +static float deltatime = 1.0f/60; static void duk_fatal_error(void *udata, const char *msg) { const char * err_message_format = "an error has occured: %s"; @@ -36,7 +40,7 @@ int main(int argc, char **argv) { duk_context * ctx = duk_create_heap(NULL, NULL, NULL, NULL, duk_fatal_error); // create a wii object on the global object (globalThis) - define_wii_object(ctx, font, &running); + define_wii_object(ctx, font, &running, &deltatime); duk_put_global_string(ctx, "wii"); // evaluate functions from game.js @@ -48,6 +52,8 @@ int main(int argc, char **argv) { duk_pop(ctx); while (running) { + const unsigned int beginningOfFrame = ticks_to_microsecs(gettime()); + PAD_ScanPads(); // call update function @@ -56,6 +62,9 @@ int main(int argc, char **argv) { duk_pop(ctx); GRRLIB_Render(); + + const unsigned int endOfFrame = ticks_to_microsecs(gettime()); + deltatime = (endOfFrame - beginningOfFrame) * MICROSECOND; } duk_destroy_heap(ctx); diff --git a/source/wii_duk.c b/source/wii_duk.c index e0d9c5a..fb46e00 100644 --- a/source/wii_duk.c +++ b/source/wii_duk.c @@ -5,24 +5,25 @@ static GRRLIB_ttfFont * font; static bool * running; static unsigned int green = RGBA(0, 255, 0, 255); +static float * deltatime; -static duk_ret_t native_print(duk_context *ctx) { +static duk_ret_t native_print(duk_context * ctx) { GRRLIB_PrintfTTF(0, 0, font, duk_to_string(ctx, 0), 32, green); return 0; } -static duk_ret_t native_exit(duk_context *ctx) { +static duk_ret_t native_exit(duk_context * ctx) { *running = false; return 0; } -static duk_ret_t pad_buttons_down(duk_context *ctx) { - u32 pressed = PAD_ButtonsDown(0); +static duk_ret_t pad_buttons_down(duk_context * ctx) { + unsigned int pressed = PAD_ButtonsDown(0); duk_push_number(ctx, pressed); return 1; } -static duk_ret_t get_file(duk_context *ctx) { +static duk_ret_t get_file(duk_context * ctx) { const char* filename = duk_to_string(ctx, 0); void* ptr; @@ -46,6 +47,11 @@ static duk_ret_t get_file(duk_context *ctx) { return duk_error(ctx, DUK_ERR_ERROR, "Error trying to get the file %s.", filename); } +static duk_ret_t get_deltatime(duk_context * ctx) { + duk_push_number(ctx, *deltatime); + return 1; +} + static void define_pad_object(duk_context *ctx) { duk_idx_t pad_obj = duk_push_object(ctx); @@ -53,9 +59,10 @@ static void define_pad_object(duk_context *ctx) { duk_put_prop_string(ctx, pad_obj, "buttons_down"); } -void define_wii_object(duk_context *ctx, struct GRRLIB_Font * grrlib_font, bool * global_running) { +void define_wii_object(duk_context * ctx, struct GRRLIB_Font * grrlib_font, bool * global_running, float * global_deltatime) { font = grrlib_font; - running = global_running; + running = global_running; + deltatime = global_deltatime; duk_idx_t wii_obj = duk_push_object(ctx); @@ -73,4 +80,7 @@ void define_wii_object(duk_context *ctx, struct GRRLIB_Font * grrlib_font, bool duk_push_c_function(ctx, get_file, 1); duk_put_prop_string(ctx, wii_obj, "get_file"); + + duk_push_c_function(ctx, get_deltatime, 0); + duk_put_prop_string(ctx, wii_obj, "get_deltatime"); } diff --git a/source/wii_duk.h b/source/wii_duk.h index 071f088..6c6fb39 100644 --- a/source/wii_duk.h +++ b/source/wii_duk.h @@ -2,5 +2,5 @@ #define WII_DUK_H #include #include -void define_wii_object(duk_context * ctx, struct GRRLIB_Font * grrlib_font, bool * global_running); +void define_wii_object(duk_context * ctx, struct GRRLIB_Font * grrlib_font, bool * global_running, float * global_deltatime); #endif diff --git a/types.d.ts b/types.d.ts index 11049c6..ce4db0a 100644 --- a/types.d.ts +++ b/types.d.ts @@ -5,6 +5,7 @@ declare interface GRRLibTexture {} declare namespace wii { function exit(): void function get_file(filename: string) : FilePtr + function get_deltatime() : number namespace grrlib { function load_texture(file: FilePtr) : GRRLibTexture function fill_screen(color: RGBA): void