summaryrefslogtreecommitdiff
path: root/stage/hud_unit.gd
blob: 060f0e5b8a2f5467dc0de8699a65d639cd2ebffc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
extends CanvasLayer


var units_moved: Array[Unit]
var units_attacked: Array[Unit]

@onready var grid_selector: GridSelector = get_tree().get_first_node_in_group("grid_selector")


func _ready() -> void:
	visible = false
	
	Network.current_player_changed.connect(func():
		units_moved.clear()
		units_attacked.clear()
	)
	
	grid_selector.selected.connect(func(node: Node2D):
		grid_selector.process_mode = Node.PROCESS_MODE_DISABLED
		visible = true
		
		if node.current_team == grid_selector.current_team and Network.is_my_turn():
			$PanelContainer/VBoxContainer/Button.visible = true
			$PanelContainer/VBoxContainer/Button2.visible = true
			$PanelContainer/VBoxContainer/Button.grab_focus()
		else:
			$PanelContainer/VBoxContainer/Button.visible = false
			$PanelContainer/VBoxContainer/Button2.visible = false
			$PanelContainer/VBoxContainer/Button3.grab_focus()
		
		$PanelContainer/VBoxContainer/Button.disabled = node in units_moved
		$PanelContainer/VBoxContainer/Button2.disabled = node in units_attacked
	)
	
	grid_selector.move_mode_confirmed.connect(func(_path: Array):
		units_moved.append(grid_selector.current_entity)
	)
	
	grid_selector.move_mode_exited.connect(func():
		grid_selector.current_state = grid_selector.state_select
		grid_selector.process_mode = Node.PROCESS_MODE_DISABLED
		visible = true
		$PanelContainer/VBoxContainer/Button.grab_focus()
	)
	
	grid_selector.range_select_confirmed.connect(func(grid_position: Vector2i, _entity: Node2D):
		if grid_selector.range_select_current_mode == GridSelectorStateRangeSelect.Mode.Attack:
			units_attacked.append(grid_selector.current_entity)
		
		grid_selector.current_state = grid_selector.state_select
		grid_selector.current_state.draw(grid_position)
	)
	
	grid_selector.range_select_exited.connect(func():
		grid_selector.current_state = grid_selector.state_select
	)


func _input(event: InputEvent) -> void:
	if not visible:
		return
	
	if event.is_action_pressed("left_click"):
		for button: Button in $PanelContainer/VBoxContainer.get_children():
			if button.has_focus() and not button.disabled:
				button.pressed.emit()
				break
	
	elif event.is_action_pressed("right_click"):
		visible = false
		grid_selector.process_mode = Node.PROCESS_MODE_INHERIT


func _on_button_pressed() -> void:
	grid_selector.process_mode = Node.PROCESS_MODE_INHERIT
	grid_selector.current_state = grid_selector.state_move_mode
	visible = false


func _on_button_2_pressed() -> void:
	grid_selector.process_mode = Node.PROCESS_MODE_INHERIT
	grid_selector.current_state = grid_selector.state_range_select
	visible = false