1
0
Fork 0
spacetac/core/unit.gd

56 lines
1.3 KiB
GDScript

@tool
class_name Unit
extends Composer
@export var can_move = false
@export var sprite: Texture2D:
set(val):
sprite = val
_check_compose()
@export var player: Node:
set(val):
if val is Player:
player = val
else:
player = null
var target_reached = true
var target_position: Vector2
func _compose():
$sprite.texture = sprite
if player:
# TODO something more subtle
modulate = player.color
if player.code and not Engine.is_editor_hint():
add_to_group("player:" + player.code)
func _physics_process(delta):
if not target_reached:
# TODO use position instead of position, once parented to battlefield
global_position += (target_position - global_position).normalized() * 100.0 * delta
if global_position == target_position:
target_reached = true
make_decision() # TODO not every tick
func set_target(pos: Vector2):
if pos != target_position:
target_position = pos
target_reached = false
func make_decision():
if can_move:
var enemy: Unit = null
var closest := INF
for unit in get_tree().get_nodes_in_group("unit"):
if unit is Unit and unit.player != player:
var distance := global_position.distance_to(unit.global_position)
if distance < closest:
closest = distance
enemy = unit
if enemy:
set_target(enemy.global_position)