From cf888244fe7cdf3e7e43512c5db3d0b6482b0e55 Mon Sep 17 00:00:00 2001 From: Abdulmujeeb Raji Date: Thu, 29 Aug 2024 18:39:19 +0100 Subject: [PATCH] Entity no longer stores sprite_id, sprite_get_id_from_arch() --- entity.c | 1 - entry_helpless.c | 33 +++++++++++++++++++++++---------- sprite.c | 14 ++++++++++++++ 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/entity.c b/entity.c index fb32daf..4ebabd8 100644 --- a/entity.c +++ b/entity.c @@ -21,7 +21,6 @@ typedef struct Entity { bool renderable; Entity_Archetype arch; Vector2 pos; - Sprite_ID sprite_id; bool is_animate; float32 health, damage; Vector2 hitbox[4]; diff --git a/entry_helpless.c b/entry_helpless.c index 8a6cebc..4c17b21 100644 --- a/entry_helpless.c +++ b/entry_helpless.c @@ -1,11 +1,10 @@ #include "util.c" -#include "sprite.c" #include "entity.c" +#include "sprite.c" #include "gjk.c" void player_setup(Entity* en) { en->arch = ARCH_player; - en->sprite_id = SPRITE_player; en->renderable = true; en->is_animate = true; en->health = 100; @@ -13,7 +12,6 @@ void player_setup(Entity* en) { void spider_setup(Entity* en) { en->arch = ARCH_spider; - en->sprite_id = SPRITE_spider; en->renderable = true; en->is_animate = true; en->health = 30; @@ -30,7 +28,6 @@ void weapon_setup(Entity* en, Entity_Archetype weapon_type) { en->is_weapon = true; switch (weapon_type) { case ARCH_startersword: { - en->sprite_id = SPRITE_startersword; en->weapon_class = WEAPON_melee; en->damage = 10; en->hitbox[0] = v2(0, 0); @@ -41,7 +38,6 @@ void weapon_setup(Entity* en, Entity_Archetype weapon_type) { } break; case ARCH_starterbow: { - en->sprite_id = SPRITE_starterbow; en->weapon_class = WEAPON_ranged; en->damage = 5; en->weapon_speed = 3; @@ -55,9 +51,9 @@ void weapon_setup(Entity* en, Entity_Archetype weapon_type) { void arrow_setup(Entity* en, Vector2 start_pos, Vector2 fire_dir, float32 base_dmg) { en->arch = ARCH_arrow; - en->sprite_id = SPRITE_arrow; en->renderable = true; en->is_projectile = true; + en->is_animate = false; // idk why this was on in the first place? en->projectile_range = 200; en->projectile_fire_dir = fire_dir; en->projectile_start_pos = start_pos; @@ -170,11 +166,22 @@ int entry(int argc, char **argv) { if (en->is_animate && en->health <= 0) { en->alive = false; } + + // TODO Finish dis + // if (en->is_item && is_key_just_pressed('C')) { + // Vector2* player_hitbox = entity_resolve_hitbox(player); + // Vector2* item_hitbox = entity_resolve_hitbox(en); + + // if (gjk(player_hitbox, 4, item_hitbox, 4)) { + // entity_destroy(en); + // } + // } if (en->is_weapon) { en->weapon_cooldown_secs -= 1.0 * delta_time; // decreases by 1 every second if (is_key_just_pressed('Z') && en->weapon_cooldown_secs <= 0) { en->weapon_cooldown_secs = 1 / (en->weapon_speed); + switch (en->weapon_class) { case WEAPON_melee: { Vector2* hitbox = entity_resolve_hitbox(en); @@ -199,6 +206,7 @@ int entry(int argc, char **argv) { } if (en->is_projectile) { + en->pos = v2_add(en->pos, v2_mulf(en->projectile_fire_dir, en->projectile_speed * 50.0 * delta_time)); if (en->pos.x < en->projectile_start_pos.x + en->projectile_range && en->pos.y < en->projectile_start_pos.y + en->projectile_range) { Vector2* hitbox = entity_resolve_hitbox(en); @@ -211,18 +219,16 @@ int entry(int argc, char **argv) { } } - en->pos = v2_add(en->pos, v2_mulf(en->projectile_fire_dir, en->projectile_speed * 50.0 * delta_time)); } else { entity_destroy(en); } } } - // :rendering - // TODO add a layer system, so that you place render instructions anywhere + // :entity rendering for (Entity* en = 0; entity_increment(&en);) { if (en->alive && en->renderable) { - Sprite* sprite = sprite_get(en->sprite_id); + Sprite* sprite = sprite_get(sprite_get_id_from_arch(en->arch)); Matrix4 xform = m4_scalar(1.0); if (en->is_projectile) { @@ -251,6 +257,13 @@ int entry(int argc, char **argv) { draw_image_xform(sprite->image, xform, sprite->size, COLOR_WHITE); } } + + // :ui rendering + { + // TODO Set projection + // TODO Weapon Slots + // TODO Health Bar + } os_update(); gfx_update(); diff --git a/sprite.c b/sprite.c index 2b0365d..98d7284 100644 --- a/sprite.c +++ b/sprite.c @@ -4,6 +4,7 @@ typedef struct Sprite { } Sprite; typedef enum Sprite_ID { + SPRITE_nil, SPRITE_player, SPRITE_spider, SPRITE_mutant, @@ -27,4 +28,17 @@ Sprite* sprite_get(Sprite_ID id) { return &sprites[id]; } return &sprites[0]; +} + +Sprite_ID sprite_get_id_from_arch(Entity_Archetype arch) { + switch (arch) { + case ARCH_player: return SPRITE_player; break; + case ARCH_spider: return SPRITE_spider ; break; + case ARCH_mutant: return SPRITE_mutant ; break; + case ARCH_tree: return SPRITE_tree ; break; + case ARCH_startersword: return SPRITE_startersword ; break; + case ARCH_starterbow: return SPRITE_starterbow ; break; + case ARCH_arrow: return SPRITE_arrow ; break; + default: return 0; + } } \ No newline at end of file