From e8b2ea6b2bf789b7942d86faebbcc4d810741f25 Mon Sep 17 00:00:00 2001 From: jacopograndi Date: Tue, 1 Feb 2022 15:19:36 +0100 Subject: targeting --- scripts/turret.gd | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'scripts/turret.gd') diff --git a/scripts/turret.gd b/scripts/turret.gd index 32fb17a..62c9f6f 100644 --- a/scripts/turret.gd +++ b/scripts/turret.gd @@ -126,6 +126,39 @@ func filter_visible(set): if hit == node: filtered += [ target ] return filtered + +func targeting (set, aim): + var pick = set[0] + var pick_val = value(pick, aim) + for target in set: + var enemy = _enemies.enemies[target] + var d = value(target, aim) + if d > pick_val: + pick_val = d + pick = target + return pick + +func value(a, aim): + var enemy = _enemies.enemies[a] + match aim: + "first": return enemy.cur+enemy.rel + "last": return - (enemy.cur+enemy.rel) + "strongest": return enemy.hp + "weakest": return -enemy.hp + "closest": + var node = _enemies.node_from_id(a) + return - _shooting_point.distance_squared_to(node.transform.origin) + "furthest": + var node = _enemies.node_from_id(a) + return _shooting_point.distance_squared_to(node.transform.origin) + "least turning": + var node = _enemies.node_from_id(a) + return node.transform.basis.z.signed_angle_to( + gun.transform.basis.z, Vector3.UP) + "most turning": + var node = _enemies.node_from_id(a) + return -node.transform.basis.z.signed_angle_to( + gun.transform.basis.z, Vector3.UP) func get_target(): var ids = [] @@ -135,7 +168,7 @@ func get_target(): set = filter_visible(set) if set.size() > 0: - return set[0] + return targeting(set, aim_mode) else: return null func _physics_process(delta): -- cgit v1.2.3-54-g00ecf