diff options
Diffstat (limited to 'src/flier.c')
-rw-r--r-- | src/flier.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/flier.c b/src/flier.c index 81596d0..1fd3092 100644 --- a/src/flier.c +++ b/src/flier.c @@ -3,6 +3,7 @@ #include "loader.h" #include "tilemap.h" #include <stdbool.h> +#include <stdlib.h> #include <math.h> #include <string.h> #include "particles.h" @@ -270,12 +271,16 @@ static int flier_update(struct entity *self) { case FLIER_PATROL: move2(self); if (ext->reached_x && ext->reached_y) { - ext->current_node++; + size_t const last_node = ext->current_node++; if (ext->current_node == ext->path_length) { ext->current_node = 0; } - ext->reached_x = false; - ext->reached_y = false; + if (ext->path[last_node].x != ext->path[ext->current_node].x) { + ext->reached_x = false; + } + if (ext->path[last_node].y != ext->path[ext->current_node].y) { + ext->reached_y = false; + } anim(self, FLIER_A_IDLE); self->state = FLIER_IDLE; self->timer = ext->idle_time; @@ -298,6 +303,7 @@ static int flier_update(struct entity *self) { } if (abs(entities.player[0].x - self->x) + abs(entities.player[0].y - self->y) > to_fixed(96)) { self->state = FLIER_IDLE; + ext->reached_x = ext->reached_y = false; // not doing this makes them get lost and confused } self->timer--; if (self->timer == 0) { @@ -316,6 +322,12 @@ static int flier_update(struct entity *self) { self->state = FLIER_ALERT_IDLE; self->timer = ext->attack_delay; } + if (abs(entities.player[0].x - self->x) + abs(entities.player[0].y - self->y) > to_fixed(96)) { + anim(self, FLIER_A_IDLE); + self->state = FLIER_IDLE; + self->timer = ext->idle_time; + ext->reached_x = ext->reached_y = false; // not doing this makes them get lost and confused + } break; case FLIER_ALERT_ATTACK: @@ -335,6 +347,7 @@ static int flier_update(struct entity *self) { anim(self, FLIER_A_IDLE); self->state = FLIER_IDLE; self->timer = ext->idle_time; + ext->reached_x = ext->reached_y = false; // not doing this makes them get lost and confused } break; } |