summaryrefslogtreecommitdiff
path: root/Game/States/Build/StateBuild.gd
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2024-09-08 22:35:06 +0200
committerDaniel Weipert <git@mail.dweipert.de>2024-09-08 22:35:06 +0200
commit4597189f157834c80f56b12b701fd2b2a15c2798 (patch)
treef522e9a58ec756dc27306781da99e828b195c549 /Game/States/Build/StateBuild.gd
parent7d7d845e76f78a87cf87c9464d700e52cd88ce6f (diff)
next commit
Diffstat (limited to 'Game/States/Build/StateBuild.gd')
-rw-r--r--Game/States/Build/StateBuild.gd50
1 files changed, 50 insertions, 0 deletions
diff --git a/Game/States/Build/StateBuild.gd b/Game/States/Build/StateBuild.gd
new file mode 100644
index 0000000..b92020b
--- /dev/null
+++ b/Game/States/Build/StateBuild.gd
@@ -0,0 +1,50 @@
+class_name StateBuild
+extends State
+
+
+static var current_builder_element: BuilderElement
+
+
+func _state_enter():
+ %BuildGrid.visible = true
+ var builder_element_scene = preload("res://Game/States/Build/BuilderElement.tscn")
+ var builder_element = builder_element_scene.instantiate()
+
+ var tower = preload("res://Towers/Tower.tscn").instantiate() as Tower
+ tower.attack_range = [
+ Client.stage.map.tile_set.tile_size.x * 2,
+ Client.stage.map.tile_set.tile_size.x * 3,
+ Client.stage.map.tile_set.tile_size.x * 4,
+ ].pick_random()
+
+ builder_element.element = tower
+ get_tree().current_scene.add_child(builder_element)
+ current_builder_element = builder_element
+
+
+func _state_exit():
+ %BuildGrid.visible = false
+
+
+func _state_input(event: InputEvent):
+ if event.is_action_pressed("builder_tower_select"):
+ get_viewport().set_input_as_handled()
+
+ if current_builder_element.can_build():
+ var placed_tower = current_builder_element.element.duplicate() as Tower
+ Client.place_tower(placed_tower, current_builder_element.global_position)
+
+ placed_tower.selected.connect(func():
+ Client.stage.hud.tower.text = "Range: %s - Power: %s - Speed: %s" % [
+ placed_tower.attack_range, placed_tower.attack_power, placed_tower.attack_speed
+ ]
+ )
+
+ if not Input.is_action_pressed("builder_tower_place_keep"):
+ current_builder_element.queue_free()
+ set_state("StateDefault")
+
+ if event.is_action_pressed("builder_cancel") or event.is_action_pressed("build_mode_start"):
+ get_viewport().set_input_as_handled()
+ current_builder_element.queue_free()
+ set_state("StateDefault")