What I would do is compare vectors, i dont know if yo uhave a method all squared away now but I would do something like this:
Code:
#define AGGRO_RANGE skill1
#define ANIMATION_SPEED skill2
#define ATTACK_RANGE skill3
VECTOR temp_enemy_vec
vec_zero (temp_enemy_vec);
if (vec_dist (my.x, player.x) < player.AGGRO_RANGE)
{
if (vec_dist (my.x, player.x) > my.ATTACK_RANGE)
{
my.ANIMATION_SPEED += 6 * time_step;
vec_set (temp_enemy_vec, player.x);
vec_sub (temp_enemy_vec, my.x);
vec_to_angle (my.pan, temp_enemy_vec);
my.tilt = 0;
ent_animate(my, "run", my.ANIMATION_SPEED, ANM_CYCLE);
c_move (my, vector(my.MOVEMENT_SPEED * time_step, 0, 0), nullvector, GLIDE | IGNORE_YOU | IGNORE_PASSABLE);
}
if (vec_dist (my.x, player.x) <= my.ATTACK_RANGE)
{
vec_set (temp_enemy_vec, player.x);
vec_sub (temp_enemy_vec, my.x);
vec_to_angle (my.pan, temp_enemy_vec);
my.tilt = 0;
my.ANIMATION_SPEED = 0;
while (my.ANIMATION_SPEED < 100)
{
ent_animate(my, "attack", my.ANIMATION_SPEED, NULL);
my.ANIMATION_SPEED += 6 * time_step;
wait (1);
}
}
}
Of course this need to be inside a while loop, and it doesn't take into account any of the other factors when dealing with enemy AI, but you could probably safely use something like this for alot of enemies.