Armour system

This commit is contained in:
Abdulmujeeb Raji 2024-08-30 12:02:39 +01:00
parent 8acfec7d7b
commit e32a16b700
6 changed files with 28 additions and 0 deletions

18
armour.c Normal file
View file

@ -0,0 +1,18 @@
typedef enum Armour {
ARMOUR_none = 0,
ARMOUR_starter = 1,
} Armour;
Sprite_ID armour_sprite_id(Armour armour) {
switch (armour) {
case ARMOUR_starter: return SPRITE_starterarmour; break;
default: return SPRITE_nil;
}
}
float armour_damage_multiplier(Armour armour) {
switch (armour) {
case ARMOUR_starter: return 0.8; break;
default: return 1;
}
}

BIN
assets/starterarmour.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 B

View file

@ -28,6 +28,7 @@ typedef struct Entity {
Vector2 hitbox[4];
Entity_Archetype primary_weapon;
Entity_Archetype secondary_weapon;
Armour armour;
bool is_weapon;
Weapon_Class weapon_class;
Vector2 weapon_owner_pos;
@ -113,6 +114,7 @@ Vector2* entity_resolve_hitbox(Entity* en) {
}
void entity_take_damage(Entity* en, float damage) {
damage *= armour_damage_multiplier(en->armour);
en->health = clamp(en->health - damage, 0, en->max_health);
// todo add knockback
}

View file

@ -1,5 +1,6 @@
#include "util.c"
#include "sprite.c"
#include "armour.c"
#include "entity.c"
#include "gjk.c"
#include "weapon.c"
@ -43,6 +44,7 @@ int entry(int argc, char **argv) {
sprite_load(STR("assets/spider.png"), SPRITE_spider);
sprite_load(STR("assets/startersword.png"), SPRITE_startersword);
sprite_load(STR("assets/starterbow.png"), SPRITE_starterbow);
sprite_load(STR("assets/starterarmour.png"), SPRITE_starterarmour);
sprite_load(STR("assets/arrow.png"), SPRITE_arrow);
Gfx_Font* font = load_font_from_disk(STR("assets/m3x6.ttf"), get_heap_allocator());
@ -222,6 +224,10 @@ int entry(int argc, char **argv) {
xform = m4_translate(xform, v3(sprite->size.x * -0.5, sprite->size.y * -0.5, 0));
draw_image_xform(sprite->image, xform, sprite->size, COLOR_WHITE);
if (en->armour != ARMOUR_none) {
Sprite* armour_sprite = sprite_get(armour_sprite_id(en->armour));
draw_image_xform(armour_sprite->image, xform, armour_sprite->size, COLOR_WHITE);
}
}
}

View file

@ -4,6 +4,7 @@ void player_setup(Entity* en) {
en->is_animate = true;
en->max_health = 100;
en->health = en->max_health;
en->armour = ARMOUR_starter;
}
void player_process_input(Entity* player, Entity* player_weapon, float delta_time) {

View file

@ -11,6 +11,7 @@ typedef enum Sprite_ID {
SPRITE_tree,
SPRITE_startersword,
SPRITE_starterbow,
SPRITE_starterarmour,
SPRITE_arrow,
SPRITE_MAX,
} Sprite_ID;