Armour system
This commit is contained in:
parent
8acfec7d7b
commit
e32a16b700
6 changed files with 28 additions and 0 deletions
18
armour.c
Normal file
18
armour.c
Normal 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
BIN
assets/starterarmour.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 188 B |
2
entity.c
2
entity.c
|
@ -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
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
1
player.c
1
player.c
|
@ -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) {
|
||||
|
|
1
sprite.c
1
sprite.c
|
@ -11,6 +11,7 @@ typedef enum Sprite_ID {
|
|||
SPRITE_tree,
|
||||
SPRITE_startersword,
|
||||
SPRITE_starterbow,
|
||||
SPRITE_starterarmour,
|
||||
SPRITE_arrow,
|
||||
SPRITE_MAX,
|
||||
} Sprite_ID;
|
||||
|
|
Reference in a new issue