aboutsummaryrefslogtreecommitdiffstats
path: root/src/ft_select_bad_boy_action.c
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-03-30 19:45:31 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-03-30 19:45:31 +0200
commit5b287c89362171175592c5eab247fb8a7b7d28ff (patch)
tree7319f00b79ee85a9e551b5ce5a89280e549fb5ca /src/ft_select_bad_boy_action.c
parentPretty coolio (diff)
download42-cub3d-5b287c89362171175592c5eab247fb8a7b7d28ff.tar.gz
42-cub3d-5b287c89362171175592c5eab247fb8a7b7d28ff.tar.bz2
42-cub3d-5b287c89362171175592c5eab247fb8a7b7d28ff.tar.xz
42-cub3d-5b287c89362171175592c5eab247fb8a7b7d28ff.tar.zst
42-cub3d-5b287c89362171175592c5eab247fb8a7b7d28ff.zip
Fine
Diffstat (limited to 'src/ft_select_bad_boy_action.c')
-rw-r--r--src/ft_select_bad_boy_action.c82
1 files changed, 74 insertions, 8 deletions
diff --git a/src/ft_select_bad_boy_action.c b/src/ft_select_bad_boy_action.c
index 34e0efe..5f4cc3a 100644
--- a/src/ft_select_bad_boy_action.c
+++ b/src/ft_select_bad_boy_action.c
@@ -13,6 +13,63 @@
#include <libft.h>
#include <cub3d.h>
#include <stdlib.h>
+#include <math.h>
+
+/*
+** bad_boy[].act[] - index summary
+** -------------------------------
+** 0: wait
+** 1: walk
+** 2: fire
+**
+** rand() rules
+** ------------
+** I. player is not in sight
+** rand 0-3 | 0-2 wait | 3 walk
+** II. player is in sight
+** rand 0-7 | 0-1 wait | 2-5 walk | 6-7
+*/
+
+static double
+ ft_get_dist(t_sprite sprite, t_cub *cl)
+{
+ return (sqrt(pow(cl->plist.pos_x - sprite.s_pos_x, 2) +
+ pow(cl->plist.pos_y - sprite.s_pos_y, 2)));
+}
+
+static int8_t
+ ft_set_r_i(void)
+{
+ int8_t r;
+
+ if (FT_OS == 2)
+ r = random() % 4;
+ else
+ r = rand() % 4;
+ if (r == 3)
+ return (1);
+ else
+ return (0);
+ return (r);
+}
+
+static int8_t
+ ft_set_r_ii(void)
+{
+ int8_t r;
+
+ if (FT_OS == 2)
+ r = random() % 8;
+ else
+ r = rand() % 8;
+ if (r <= 1)
+ return (0);
+ else if (r >= 2 && r <= 5)
+ return (1);
+ else
+ return (2);
+ return (r);
+}
void
ft_select_bad_boy_action(t_cub *cl)
@@ -23,16 +80,25 @@ void
i = 0;
while (i < cl->mlist.sprite_nbr[13])
{
- if (cl->bad_boy[i].sleep == 0 && cl->bad_boy[i].life > 0)
+ if (cl->bad_boy[i].sleep == 0 && cl->bad_boy[i].life > 0 &&
+ (ft_get_dist(cl->sprites[13][i], cl) > FT_ENMY_SIGHT_RANGE
+ || cl->rlist.wall_dist_tab[cl->wlist.x_size / 2] >
+ ft_get_dist(cl->sprites[13][0], cl)))
+ {
+ r = ft_set_r_i();
+ }
+ else if (cl->bad_boy[i].sleep == 0 && cl->bad_boy[i].life > 0 &&
+ (ft_get_dist(cl->sprites[13][i], cl) <= FT_ENMY_SIGHT_RANGE
+ || cl->rlist.wall_dist_tab[cl->wlist.x_size / 2] <=
+ ft_get_dist(cl->sprites[13][0], cl)))
{
- if (FT_OS == 2)
- r = random() % 2;
- else
- r = rand() % 2;
- cl->bad_boy[i].act[r](&cl->bad_boy[i],
- &cl->sprites[13][i], &cl->mlist);
- cl->bad_boy[i].sleep = 1;
+ r = ft_set_r_ii();
}
+ else if (cl->bad_boy[i].life <= 0)
+ /* something */
+ cl->bad_boy[i].act[r](&cl->bad_boy[i],
+ &cl->sprites[13][i], &cl->mlist);
+ cl->bad_boy[i].sleep = 1;
i++;
}
}