diff --git a/entry_randygame.c b/entry_randygame.c index 9a74589..4255135 100644 --- a/entry_randygame.c +++ b/entry_randygame.c @@ -1,4 +1,25 @@ +typedef struct Sprite { + Gfx_Image* image; + Vector2 size; +} Sprite; +typedef enum SpriteID { + SPRITE_nil, + SPRITE_player, + SPRITE_tree0, + SPRITE_tree1, + SPRITE_rock0, + SPRITE_MAX, +} SpriteID; +// randy: maybe we make this an X macro?? https://chatgpt.com/share/260222eb-2738-4d1e-8b1d-4973a097814d +Sprite sprites[SPRITE_MAX]; +Sprite* get_sprite(SpriteID id) { + if (id >= 0 && id < SPRITE_MAX) { + return &sprites[id]; + } + return &sprites[0]; +} + typedef enum EntityArchetype { arch_nil = 0, arch_rock = 1, @@ -10,6 +31,8 @@ typedef struct Entity { bool is_valid; EntityArchetype arch; Vector2 pos; + bool render_sprite; + SpriteID sprite_id; } Entity; #define MAX_ENTITY_COUNT 1024 @@ -36,11 +59,23 @@ void entity_destroy(Entity* entity) { memset(entity, 0, sizeof(Entity)); } +void setup_player(Entity* en) { + en->arch = arch_player; + en->sprite_id = SPRITE_player; +} + void setup_rock(Entity* en) { en->arch = arch_rock; - // ... + en->sprite_id = SPRITE_rock0; } +void setup_tree(Entity* en) { + en->arch = arch_tree; + en->sprite_id = SPRITE_tree0; + // en->sprite_id = SPRITE_tree1; +} + + int entry(int argc, char **argv) { window.title = STR("Randy's Game"); window.width = 1280; @@ -51,22 +86,24 @@ int entry(int argc, char **argv) { world = alloc(get_heap_allocator(), sizeof(World)); memset(world, 0, sizeof(World)); - - Gfx_Image* player = load_image_from_disk(STR("player.png"), get_heap_allocator()); - assert(player, "fuckie wucky happen"); - Gfx_Image* tree0 = load_image_from_disk(STR("tree0.png"), get_heap_allocator()); - assert(tree0, "fuckie wucky happen"); - Gfx_Image* tree1 = load_image_from_disk(STR("tree1.png"), get_heap_allocator()); - assert(tree1, "fuckie wucky happen"); - Gfx_Image* rock0 = load_image_from_disk(STR("rock0.png"), get_heap_allocator()); - assert(rock0, "fuckie wucky happen"); + + sprites[SPRITE_player] = (Sprite){ .image=load_image_from_disk(STR("player.png"), get_heap_allocator()), .size=v2(6.0, 8.0) }; + sprites[SPRITE_tree0] = (Sprite){ .image=load_image_from_disk(STR("tree0.png"), get_heap_allocator()), .size=v2(7, 12) }; + sprites[SPRITE_tree1] = (Sprite){ .image=load_image_from_disk(STR("tree1.png"), get_heap_allocator()), .size=v2(7, 12) }; + sprites[SPRITE_rock0] = (Sprite){ .image=load_image_from_disk(STR("rock0.png"), get_heap_allocator()), .size=v2(7, 4) }; Entity* player_en = entity_create(); + setup_player(player_en); for (int i = 0; i < 10; i++) { Entity* en = entity_create(); setup_rock(en); - en->pos = v2(i * 10.0, 0.0); + en->pos = v2(get_random_float32_in_range(-200, 200), get_random_float32_in_range(-200, 200)); + } + for (int i = 0; i < 10; i++) { + Entity* en = entity_create(); + setup_tree(en); + en->pos = v2(get_random_float32_in_range(-200, 200), get_random_float32_in_range(-200, 200)); } float64 seconds_counter = 0.0; @@ -83,30 +120,25 @@ int entry(int argc, char **argv) { float64 now = os_get_current_time_in_seconds(); float64 delta_t = now - last_time; last_time = now; - + os_update(); + // :render for (int i = 0; i < MAX_ENTITY_COUNT; i++) { Entity* en = &world->entities[i]; if (en->is_valid) { switch (en->arch) { - case arch_rock: + default: { - Vector2 size = v2(7.0, 4.0); + Sprite* sprite = get_sprite(en->sprite_id); Matrix4 xform = m4_scalar(1.0); xform = m4_translate(xform, v3(en->pos.x, en->pos.y, 0)); - xform = m4_translate(xform, v3(size.x * -0.5, 0.0, 0)); - draw_image_xform(rock0, xform, size, COLOR_RED); + xform = m4_translate(xform, v3(sprite->size.x * -0.5, 0.0, 0)); + draw_image_xform(sprite->image, xform, sprite->size, COLOR_WHITE); + break; } - - case arch_player: - { - - } - - default: {} } } @@ -132,22 +164,7 @@ int entry(int argc, char **argv) { input_axis = v2_normalize(input_axis); player_en->pos = v2_add(player_en->pos, v2_mulf(input_axis, 100.0 * delta_t)); - - { - Vector2 size = v2(6.0, 8.0); - Matrix4 xform = m4_scalar(1.0); - xform = m4_translate(xform, v3(player_en->pos.x, player_en->pos.y, 0)); - xform = m4_translate(xform, v3(size.x * -0.5, 0.0, 0)); - draw_image_xform(player, xform, size, COLOR_RED); - } - { - Vector2 size = v2(7.0, 12.0); - Matrix4 xform = m4_scalar(1.0); - xform = m4_translate(xform, v3(size.x * -0.5, 0.0, 0)); - draw_image_xform(tree0, xform, size, COLOR_RED); - } - gfx_update(); seconds_counter += delta_t; frame_count += 1;