blob: bd445248f9462c20a690a39cee9a70e9477a767f (
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
|
class_name StateBuild
extends State
static var current_builder_element: BuilderElement
@export var hud: HUD
@export var selection_manager: SelectionManager
@export var tower_manager: TowerManager
func _ready() -> void:
Client.placed_tower.connect(_on_placed_tower)
func _state_enter():
%BuildGrid.visible = true
hud.tower_configurations_container.visible = true
for tower: Tower in selection_manager.get_nodes().duplicate():
tower.is_selected = false
func _state_exit():
%BuildGrid.visible = false
hud.tower_configurations_container.visible = false
func _input(event: InputEvent):
if event.is_action_pressed("builder_tower_select"):
if current_builder_element:
get_viewport().set_input_as_handled()
if current_builder_element.can_build():
var placed_tower = current_builder_element.element.instantiate() as Tower
placed_tower.global_position = current_builder_element.global_position
tower_manager.place_tower(placed_tower)
if not Input.is_action_pressed("builder_tower_place_keep"):
current_builder_element.queue_free()
current_builder_element = null
if event.is_action_pressed("build_mode_start"):
get_viewport().set_input_as_handled()
if current_builder_element:
current_builder_element.queue_free()
current_builder_element = null
state_manager.set_state(state_manager.state_default)
if event.is_action_pressed("builder_cancel") and current_builder_element:
get_viewport().set_input_as_handled()
current_builder_element.queue_free()
current_builder_element = null
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("select"):
state_manager.set_state(state_manager.state_default)
func _on_placed_tower(tower: Tower) -> void:
tower.selected_secondary.connect(_on_tower_selected_secondary.bind(tower))
func _on_tower_selected_secondary(tower: Tower) -> void:
if state_manager.current_state != self:
return
if Input.is_action_just_pressed("builder_cancel"):
Client.remove_tower(tower)
|