summaryrefslogtreecommitdiff
path: root/Game/States/Default
diff options
context:
space:
mode:
Diffstat (limited to 'Game/States/Default')
-rw-r--r--Game/States/Default/StateDefault.gd92
-rw-r--r--Game/States/Default/StateDefault.tscn2
2 files changed, 90 insertions, 4 deletions
diff --git a/Game/States/Default/StateDefault.gd b/Game/States/Default/StateDefault.gd
index 205fa3f..8bc3783 100644
--- a/Game/States/Default/StateDefault.gd
+++ b/Game/States/Default/StateDefault.gd
@@ -3,21 +3,107 @@ extends State
@export var selection_manager: SelectionManager
+@export var selection_rectangle: Area2D
+var hovered_towers: Dictionary[Tower, bool]
-func _state_input(event: InputEvent) -> void:
+
+func _ready() -> void:
+ Client.placed_tower.connect(_on_placed_tower)
+ selection_rectangle.hover_entered.connect(_on_selection_rectangle_hover_entered)
+ selection_rectangle.hover_exited.connect(_on_selection_rectangle_hover_exited)
+
+
+func _state_enter():
+ selection_rectangle.is_enabled = true
+
+
+func _state_exit():
+ selection_rectangle.is_enabled = false
+ hovered_towers.clear()
+ queue_redraw()
+ Input.set_default_cursor_shape(Input.CURSOR_ARROW)
+
+
+func _input(event: InputEvent) -> void:
if event.is_action_pressed("build_mode_start"):
- set_state("StateBuild")
+ state_manager.set_state(state_manager.state_build)
if event.is_action_pressed("select"):
if Unit.selected_unit:
Unit.selected_unit.is_selected = false
-func _state_unhandled_input(event: InputEvent) -> void:
+func _unhandled_input(event: InputEvent) -> void:
# deselect
if event.is_action_pressed("select"):
# if not multi selecting
if not event.is_double_click() and not Input.is_action_pressed("select_multiple"):
for tower: Tower in selection_manager.get_nodes().duplicate():
tower.is_selected = false
+
+
+func _draw() -> void:
+ for tower: Tower in hovered_towers.keys():
+ draw_circle(
+ tower.global_position + Vector2(Client.current_stage.map.tile_set.tile_size) / tower.scale,
+ 8 + tower.components.get(TowerComponent.ComponentType.Range).range,
+ Color(1, 1, 1, 0.5),
+ false,
+ 1.0
+ )
+ tower.modulate = Color(1.25, 1.25, 1.25)
+
+
+func _on_placed_tower(tower: Tower) -> void:
+ tower.hovered.connect(_on_tower_hovered.bind(tower))
+ tower.selected_primary.connect(_on_tower_selected.bind(tower))
+ tower.double_clicked.connect(_on_tower_double_clicked.bind(tower))
+
+
+func _on_tower_hovered(is_hovered: bool, tower: Tower) -> void:
+ if state_manager.current_state != self:
+ return
+
+ if selection_rectangle.is_active:
+ return
+
+ if is_hovered:
+ hovered_towers.set(tower, true)
+ else:
+ hovered_towers.erase(tower)
+
+ queue_redraw()
+
+
+func _on_tower_selected(tower: Tower) -> void:
+ if state_manager.current_state != self:
+ return
+
+ if Input.is_action_pressed("select_multiple") and tower.is_selected:
+ tower.is_selected = false
+ else:
+ Client.select_tower(tower)
+
+
+func _on_tower_double_clicked(tower: Tower) -> void:
+ if state_manager.current_state != self:
+ return
+
+ Client.multi_select(tower.collision_layer)
+
+
+func _on_selection_rectangle_hover_entered(node: Node2D) -> void:
+ if state_manager.current_state != self:
+ return
+
+ hovered_towers.set(node, true)
+ queue_redraw()
+
+
+func _on_selection_rectangle_hover_exited(node: Node2D) -> void:
+ if state_manager.current_state != self:
+ return
+
+ hovered_towers.erase(node)
+ queue_redraw()
diff --git a/Game/States/Default/StateDefault.tscn b/Game/States/Default/StateDefault.tscn
index 957ad5c..c51c290 100644
--- a/Game/States/Default/StateDefault.tscn
+++ b/Game/States/Default/StateDefault.tscn
@@ -2,5 +2,5 @@
[ext_resource type="Script" uid="uid://7evkkbkbfych" path="res://Game/States/Default/StateDefault.gd" id="1_e8s2t"]
-[node name="StateDefault" type="Node"]
+[node name="StateDefault" type="Node2D"]
script = ExtResource("1_e8s2t")