diff options
author | jacopo grandi <jak.sk8@hotmail.it> | 2021-02-22 19:51:09 +0100 |
---|---|---|
committer | jacopo grandi <jak.sk8@hotmail.it> | 2021-02-22 19:51:09 +0100 |
commit | 4842b67ab590250d95ad4be5fe61380a09b1e8ea (patch) | |
tree | abb973efe013b3b0970b2f4434119f2c41644f65 /gst | |
parent | bd372bf19eb79e0bfd3f3d9cb20b4c6a49a8a5ed (diff) |
view levels and maxrange strat
Diffstat (limited to 'gst')
-rw-r--r-- | gst/info.c | 12 | ||||
-rw-r--r-- | gst/info.h | 1 | ||||
-rw-r--r-- | gst/units.c | 10 |
3 files changed, 21 insertions, 2 deletions
@@ -238,6 +238,17 @@ float info_unit_get_range(infos *info, info_unit *u, int w) { return sum; } +float info_unit_get_maxrange(infos *info, info_unit *u) { + int lc = u->levels[LEVEL_CHASSIS]; + float sum = 0; + for(int i=0; i<info->chassis[u->chassis].slot_weapon[lc]; i++) { + if (u->weapons[i] != -1) { + sum += info_unit_get_range(info, u, i); + } + } + return sum; +} + float info_unit_get_charge_per_shot (infos *info, info_unit *u, int w) { float sum = 0; int lw = u->levels[LEVEL_WEAPONS+w]; @@ -311,6 +322,7 @@ float info_unit_get_cost (infos *info, info_unit *u) { } + void weapon_init (info_weapon *w) { strcpy(w->name, "nameless"); for (int l=0; l<MAXLEVEL; l++) { @@ -115,6 +115,7 @@ float info_unit_get_damage_target(infos *info, info_unit *u, int w, info_unit *t); float info_unit_get_cooldown(infos *info, info_unit *u, int w); float info_unit_get_range(infos *info, info_unit *u, int w); +float info_unit_get_maxrange(infos *info, info_unit *u); float info_unit_get_armor(infos *info, info_unit *u, int d); float info_unit_get_cost(infos *info, info_unit *u); diff --git a/gst/units.c b/gst/units.c index b0ae2b0..409f9b1 100644 --- a/gst/units.c +++ b/gst/units.c @@ -116,11 +116,17 @@ int army_move_step (infos *info, army *ar, map *m) { if (u->move_points <= 0) continue; if (u->hp <= 0) continue; if (u->charge <= 0) continue; - // search target + // search target inside max range unit *t[32]; + float maxrange = info_unit_get_maxrange(info, &u->info); + unit_search(info, ar, m, u, t, maxrange); + // stop if found + if (t[0] != NULL) { continue; } + + // search target unit_search(info, ar, m, u, t, 100); if (t[0] != NULL) { - // in range to shoot + // in range to move diff[0] = u->gridpos[0] - t[0]->gridpos[0]; diff[1] = u->gridpos[1] - t[0]->gridpos[1]; if (vec2_mag(diff) > /*info->units[u->who].range*/1) { |