52 lines
1.1 KiB
GDScript
52 lines
1.1 KiB
GDScript
extends Node
|
|
|
|
@export var player: Node:
|
|
set(val):
|
|
if val is Player:
|
|
player = val
|
|
else:
|
|
player = null
|
|
|
|
@export var camera: Camera2D
|
|
|
|
@export var available_commands: Array[PackedScene]
|
|
|
|
signal commands_changed(commander, commands)
|
|
|
|
func _ready():
|
|
%stock.visible = false
|
|
%wheel.visible = false
|
|
|
|
if available_commands:
|
|
for command_scene in available_commands:
|
|
var command := command_scene.instantiate()
|
|
%stock.add_child(command)
|
|
|
|
func _show_command_wheel(pos: Vector2):
|
|
var wheel := %wheel as Node2D
|
|
wheel.position = pos
|
|
|
|
# TODO center cam ?
|
|
|
|
for command in %wheel.get_children():
|
|
command.queue_free()
|
|
|
|
for command in %stock.get_children():
|
|
# TODO only available
|
|
command = command.duplicate()
|
|
command.color = player.color
|
|
command.connect("clicked", _on_wheel_command_clicked.bind(command))
|
|
%wheel.add_child(command)
|
|
|
|
wheel.visible = true
|
|
|
|
func _on_wheel_command_clicked(command: Command):
|
|
command.apply(%active, %wheel.position)
|
|
%wheel.visible = false
|
|
commands_changed.emit(player, %active.get_children())
|
|
|
|
func background_clicked(pos):
|
|
if camera:
|
|
pos = camera.get_canvas_transform().inverse() * pos
|
|
_show_command_wheel(pos)
|