diff options
| author | realtradam <[email protected]> | 2023-05-27 16:36:14 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2023-05-27 16:36:14 -0400 |
| commit | 960fcfeb01626555ddb464c306c85e1f295d1d42 (patch) | |
| tree | 949df7b486a2a2268fdab3b84c889751ac89749f /src/enemies.c | |
| parent | 3c56ba6253de8f4bca750b61d08a22c5588b8ca5 (diff) | |
| download | TOJam2023-960fcfeb01626555ddb464c306c85e1f295d1d42.tar.gz TOJam2023-960fcfeb01626555ddb464c306c85e1f295d1d42.zip | |
enemies shooting
Diffstat (limited to 'src/enemies.c')
| -rw-r--r-- | src/enemies.c | 65 |
1 files changed, 60 insertions, 5 deletions
diff --git a/src/enemies.c b/src/enemies.c index e7de8c3..3779cb5 100644 --- a/src/enemies.c +++ b/src/enemies.c @@ -1,16 +1,17 @@ #include "enemies.h" #include "bullet.h" #include "cglm/vec2.h" +#include "player.h" -static rodeo_collision_2d_world_t collision_enemies_world; +static rodeo_collision_2d_world_t collision_enemies_world = {0}; static rodeo_texture_2d_t enemy_texture; -static cvec_enemy_t enemies; +static cvec_enemy_t enemies = {0}; void init_enemies(void) { - collision_enemies_world = rodeo_collision_2d_world_create(); - enemies = cvec_enemy_t_init(); + //collision_enemies_world = rodeo_collision_2d_world_create(); + //enemies = cvec_enemy_t_init(); enemy_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/enemy.png")); } @@ -33,8 +34,11 @@ spawn_enemy(float x, float y) .hp = 100.0, .move_speed = 1.0f, .behavior = enemy_ai_follow, + .weapon = { .firerate = 1.0f, - .weapon = enemy_weapon_basic, + .type = enemy_weapon_basic, + .cooldown = 0, + }, .id = id }); } @@ -105,6 +109,57 @@ move_enemies(void) } } +void +enemies_attempt_weapon_fire(void) +{ + c_foreach(i, cvec_enemy_t, enemies) { + switch(i.ref->weapon.type) + { + case enemy_weapon_none: + { + // do nothing + } + break; + case enemy_weapon_basic: + { + if(i.ref->weapon.cooldown < 0) + { + i.ref->weapon.cooldown += i.ref->weapon.firerate; + //weapon spawn logic + cvec_collision_2d_world_item_value *player = get_player_position(); + cvec_collision_2d_world_item_value *enemy = rodeo_collision_2d_world_item_get_by_id(i.ref->id); + vec2 dest; + glm_vec2_sub( + (vec2){ player->x, player->y }, + (vec2){ enemy->x, enemy->y }, + dest + ); + glm_vec2_normalize(dest); + glm_vec2_scale(dest, 1.0, dest); + spawn_bullet( + enemy->x, + enemy->y, + dest[0], + dest[1], + get_enemy_bullet_world(), + (rodeo_color_RGBAFloat_t){ + .colors.alpha = 1, + .colors.red = 0.9f, + .colors.green = 0.1f, + .colors.blue = 0.1f + } + ); + } + else + { + i.ref->weapon.cooldown -= rodeo_frame_time_get()/1000.0f; + } + } + break; + } + } +} + enemy_t* get_enemy_by_id( world_id id |
