From 238be066ba59b5933376d24c9374bc3e5df7fd25 Mon Sep 17 00:00:00 2001 From: randy Date: Wed, 3 Jul 2024 17:54:19 +0700 Subject: [PATCH] entity megastruct init --- entry_randygame.c | 106 +++++++++++++++++++++++++++++++++++++++++++--- rock0.png | Bin 0 -> 110 bytes tree0.png | Bin 0 -> 124 bytes tree1.png | Bin 0 -> 125 bytes 4 files changed, 99 insertions(+), 7 deletions(-) create mode 100644 rock0.png create mode 100644 tree0.png create mode 100644 tree1.png diff --git a/entry_randygame.c b/entry_randygame.c index 275c147..2bff1f9 100644 --- a/entry_randygame.c +++ b/entry_randygame.c @@ -1,4 +1,46 @@ +typedef enum EntityArchetype { + arch_nil = 0, + arch_rock = 1, + arch_tree = 2, + arch_player = 3, +} EntityArchetype; + +typedef struct Entity { + bool is_valid; + EntityArchetype arch; + Vector2 pos; +} Entity; +#define MAX_ENTITY_COUNT 1024 + +typedef struct World { + Entity entities[MAX_ENTITY_COUNT]; +} World; +World* world = 0; + +Entity* entity_create() { + Entity* entity_found = 0; + for (int i = 0; i < MAX_ENTITY_COUNT; i++) { + Entity* existing_entity = &world->entities[i]; + if (!existing_entity->is_valid) { + entity_found = existing_entity; + break; + } + } + assert(entity_found, "No more free entities!"); + entity_found->is_valid = true; + return entity_found; +} + +void entity_destroy(Entity* entity) { + memset(entity, 0, sizeof(Entity)); +} + +void setup_rock(Entity* en) { + en->arch = arch_rock; + // ... +} + int entry(int argc, char **argv) { window.title = STR("Randy's Game"); @@ -7,12 +49,27 @@ int entry(int argc, char **argv) { window.x = 200; window.y = 200; window.clear_color = hex_to_rgba(0x2a2d3aff); + + 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"); + Entity* player_en = entity_create(); + + for (int i = 0; i < 10; i++) { + Entity* en = entity_create(); + setup_rock(en); + en->pos = v2(i * 10.0, 0.0); + } - Vector2 player_pos = v2(0, 0); float64 seconds_counter = 0.0; s32 frame_count = 0; @@ -30,6 +87,32 @@ int entry(int argc, char **argv) { os_update(); + for (int i = 0; i < MAX_ENTITY_COUNT; i++) { + Entity* en = &world->entities[i]; + if (en->is_valid) { + + switch (en->arch) { + + case arch_rock: + { + Vector2 size = v2(7.0, 4.0); + 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); + } + + case arch_player: + { + + } + + default: {} + } + + } + } + if (is_key_just_pressed(KEY_ESCAPE)) { window.should_close = true; } @@ -49,13 +132,22 @@ int entry(int argc, char **argv) { } input_axis = v2_normalize(input_axis); - player_pos = v2_add(player_pos, v2_mulf(input_axis, 100.0 * delta_t)); + 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_pos.x, player_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(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; diff --git a/rock0.png b/rock0.png new file mode 100644 index 0000000000000000000000000000000000000000..21776ada14c82160217b1a17a6634b0a6cb5f9c2 GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!3HFqj;YoHDaPU;cPEB*=VV?2IU1fWjv*W~ zOHUo-WH8`iHmv-=@UB0%s=$7}Cp)rlU-x91`9VIcC5M4sL5lzHlr?-CfqED`UHx3v IIVCg!0BiOhR{#J2 literal 0 HcmV?d00001 diff --git a/tree0.png b/tree0.png new file mode 100644 index 0000000000000000000000000000000000000000..e9d1dd9efc3eb6562df2a055ade5383c81bec7ed GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)J!3HGPOk44ofy`glX(f`n0vZ7hDc0J zPH1TQ4+QBBOg=mo41Sz$CCL(!l9DHlyDB(m)b1!gTe~DWM4f0>mY4 literal 0 HcmV?d00001