From 123d151c574df3c419d81f094290aeeb2eb86c61 Mon Sep 17 00:00:00 2001 From: Fries Date: Mon, 24 Jun 2024 17:37:38 -0700 Subject: [PATCH] add pipes to the game. they can move! no collision yet. the numbers still need a bit of tweaking though. --- data/pipe-green-flipped.png | Bin 0 -> 3869 bytes data/pipe-green.png | Bin 0 -> 3766 bytes source/CMakeLists.txt | 2 +- source/game.js | 121 +++++++++++++++++++++++------------- source/grrlib_duk.c | 10 +-- source/rgba.c | 36 +++++++++++ source/rgba.h | 7 +++ source/wii_duk.c | 7 +++ types.d.ts | 12 ++++ 9 files changed, 143 insertions(+), 52 deletions(-) create mode 100644 data/pipe-green-flipped.png create mode 100644 data/pipe-green.png create mode 100644 source/rgba.c create mode 100644 source/rgba.h diff --git a/data/pipe-green-flipped.png b/data/pipe-green-flipped.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7247d943aa9b5858d6b00ce148237f4ff92614 GIT binary patch literal 3869 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 literal 0 HcmV?d00001 diff --git a/data/pipe-green.png b/data/pipe-green.png new file mode 100644 index 0000000000000000000000000000000000000000..1d9c08b7b4c2879ab0dc56f93a78f0d81784b496 GIT binary patch literal 3766 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 PIPE_MAX_TIME) { + const index = pipes.indexOf(pipe); + pipes.splice(index, -1); + return; + } + wii.grrlib.draw_img(pipe.position, pipe.top_y, pipe_flipped, 0, 1, 1, WHITE_COLOR); + wii.grrlib.draw_img(pipe.position, pipe.bottom_y, globalThis.pipe, 0, 1, 1, WHITE_COLOR); + pipe.position -= 100 * wii.get_deltatime(); + pipe.time_active += wii.get_deltatime(); } function update() { @@ -83,10 +106,22 @@ function update() { } if (pressed & PAD_BUTTON_A) { - bird_velocity = FALLING_SPEED; + bird.velocity = FALLING_SPEED; + } + + if (timer >= PIPE_SPAWN_TIME) { + timer = 0; + } + + if (timer == 0) { + pipes.push(create_pipe()); } wii.grrlib.draw_img(0, 0, background, 0, 1, 1, WHITE_COLOR); update_bird(); + for (var i = 0; i < pipes.length; i++) { + update_pipe(pipes[i]); + } wii.print("deltatime: " + wii.get_deltatime()) + timer += wii.get_deltatime(); } diff --git a/source/grrlib_duk.c b/source/grrlib_duk.c index e972d3c..7fddb7c 100644 --- a/source/grrlib_duk.c +++ b/source/grrlib_duk.c @@ -1,13 +1,7 @@ #include "grrlib_duk.h" -#include "duk_config.h" -#include "duktape.h" +#include #include - -static unsigned int get_color(duk_context *ctx, duk_idx_t index) { - size_t rgba_size; - unsigned char * rgba = duk_get_buffer(ctx, index, &rgba_size); - return rgba[0] << 24 | rgba[1] << 16 | rgba[2] << 8 | rgba[3]; -} +#include "rgba.h" static duk_ret_t grrlib_fill_screen(duk_context *ctx) { unsigned int color = get_color(ctx, 0); diff --git a/source/rgba.c b/source/rgba.c new file mode 100644 index 0000000..92827d6 --- /dev/null +++ b/source/rgba.c @@ -0,0 +1,36 @@ +#include "rgba.h" + +duk_ret_t compare_rgba(duk_context * ctx) { + unsigned int color1 = get_color(ctx, 0); + unsigned int color2 = get_color(ctx, 1); + + duk_push_boolean(ctx, color1 == color2); + + return 1; +} + +duk_ret_t rgba(duk_context * ctx) { + int r = duk_get_number(ctx, 0); + int g = duk_get_number(ctx, 1); + int b = duk_get_number(ctx, 2); + int a = duk_get_number(ctx, 3); + + if (r > 255 || g > 255 || b > 255 || a > 255) { + return duk_error(ctx, DUK_ERR_ERROR, "You can't use a number bigger then 255."); + } + + unsigned char * buffer; + buffer = duk_push_fixed_buffer(ctx, 4); + buffer[0] = r; + buffer[1] = g; + buffer[2] = b; + buffer[3] = a; + + return 1; +} + +unsigned int get_color(duk_context * ctx, duk_idx_t index) { + size_t rgba_size; + unsigned char * rgba = duk_get_buffer(ctx, index, &rgba_size); + return rgba[0] << 24 | rgba[1] << 16 | rgba[2] << 8 | rgba[3]; +} diff --git a/source/rgba.h b/source/rgba.h new file mode 100644 index 0000000..9e1d5cb --- /dev/null +++ b/source/rgba.h @@ -0,0 +1,7 @@ +#ifndef RGBA_H +#define RGBA_H +#include +unsigned int get_color(duk_context * ctx, duk_idx_t index); +duk_ret_t rgba(duk_context * ctx); +duk_ret_t compare_rgba(duk_context * ctx); +#endif diff --git a/source/wii_duk.c b/source/wii_duk.c index fb46e00..fa6ea19 100644 --- a/source/wii_duk.c +++ b/source/wii_duk.c @@ -1,6 +1,7 @@ #include "wii_duk.h" #include "data.h" #include "grrlib_duk.h" +#include "rgba.h" static GRRLIB_ttfFont * font; static bool * running; @@ -83,4 +84,10 @@ void define_wii_object(duk_context * ctx, struct GRRLIB_Font * grrlib_font, bool duk_push_c_function(ctx, get_deltatime, 0); duk_put_prop_string(ctx, wii_obj, "get_deltatime"); + + duk_push_c_function(ctx, rgba, 4); + duk_put_prop_string(ctx, wii_obj, "rgba"); + + duk_push_c_function(ctx, compare_rgba, 2); + duk_put_prop_string(ctx, wii_obj, "compare_rgba"); } diff --git a/types.d.ts b/types.d.ts index ce4db0a..064f9ff 100644 --- a/types.d.ts +++ b/types.d.ts @@ -1,11 +1,23 @@ declare interface RGBA {} declare interface FilePtr {} declare interface GRRLibTexture {} +declare interface DrawableObject { + texture: GRRLibTexture +}; +declare interface Pipe { + top_y: number + bottom_y: number + position: number + time_active: number +}; declare namespace wii { function exit(): void function get_file(filename: string) : FilePtr function get_deltatime() : number + function compare_rgba(color1: RGBA, color2: RGBA) : boolean + function print(message: string) : void + function rgba(r: number, g: number, b: number, a: number): RGBA namespace grrlib { function load_texture(file: FilePtr) : GRRLibTexture function fill_screen(color: RGBA): void