26 lines
925 B
GDScript3
26 lines
925 B
GDScript3
|
|
class_name CombatTarget
|
||
|
|
extends RefCounted
|
||
|
|
|
||
|
|
# One opt-in contract for anything a player weapon may deliberately attack.
|
||
|
|
# Aim assist, autonomous garrisons and projectile impacts all consume the same
|
||
|
|
# group, so a new target composition does not need a concrete-type branch in
|
||
|
|
# each combat system.
|
||
|
|
const GROUP: StringName = &"player_weapon_targets"
|
||
|
|
const PRIORITY_META: StringName = &"player_weapon_target_priority"
|
||
|
|
|
||
|
|
# A garrison protects its post before mining nearby debris. Distances still
|
||
|
|
# decide between targets at the same priority.
|
||
|
|
const RESOURCE_PRIORITY: int = 0
|
||
|
|
const DANGER_PRIORITY: int = 100
|
||
|
|
|
||
|
|
|
||
|
|
static func register(node: Node, priority: int = RESOURCE_PRIORITY) -> void:
|
||
|
|
if node == null:
|
||
|
|
return
|
||
|
|
node.add_to_group(GROUP)
|
||
|
|
node.set_meta(PRIORITY_META, priority)
|
||
|
|
|
||
|
|
|
||
|
|
static func priority(node: Node) -> int:
|
||
|
|
return int(node.get_meta(PRIORITY_META, RESOURCE_PRIORITY)) if node != null \
|
||
|
|
else RESOURCE_PRIORITY
|