From 4842b67ab590250d95ad4be5fe61380a09b1e8ea Mon Sep 17 00:00:00 2001 From: jacopo grandi Date: Mon, 22 Feb 2021 19:51:09 +0100 Subject: view levels and maxrange strat --- gst/info.c | 12 ++++++++++++ gst/info.h | 1 + gst/units.c | 10 ++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) (limited to 'gst') diff --git a/gst/info.c b/gst/info.c index eab41a2..2329baf 100644 --- a/gst/info.c +++ b/gst/info.c @@ -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; ichassis[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; lmove_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) { -- cgit v1.2.3-54-g00ecf