summaryrefslogtreecommitdiff
path: root/stage/grid_selector
diff options
context:
space:
mode:
Diffstat (limited to 'stage/grid_selector')
-rw-r--r--stage/grid_selector/grid_selector.gd22
-rw-r--r--stage/grid_selector/grid_selector.tscn4
-rw-r--r--stage/grid_selector/state_cube_placement.gd1
-rw-r--r--stage/grid_selector/state_move_mode.gd1
-rw-r--r--stage/grid_selector/state_range_select.gd6
-rw-r--r--stage/grid_selector/state_select.gd64
6 files changed, 83 insertions, 15 deletions
diff --git a/stage/grid_selector/grid_selector.gd b/stage/grid_selector/grid_selector.gd
index dd2f1e4..156065b 100644
--- a/stage/grid_selector/grid_selector.gd
+++ b/stage/grid_selector/grid_selector.gd
@@ -5,6 +5,8 @@ extends Node2D
signal state_changed
signal moved(grid_position: Vector2i)
signal selected(node: Node2D)
+signal hover_enter(node: Node2D)
+signal hover_exit
signal placed_tiles(grid_positions: Array)
signal move_mode_changed(path: Array)
signal move_mode_confirmed(path: Array)
@@ -28,6 +30,7 @@ var current_entity: Node2D
@export var stage: Stage
@export var ground_map: TileMapLayer
@export var floor_map: TileMapLayer
+@export var camera: Camera2D
@export var current_team: String
@@ -41,6 +44,7 @@ var current_entity: Node2D
@export_group("Range Select", "range_select")
@export var range_select_current_range: int
+@export var range_select_current_mode: GridSelectorStateRangeSelect.Mode
@export_flags_2d_physics var range_select_collision_mask: int
@export_group("Move Mode", "move_mode")
@@ -74,8 +78,7 @@ func _process(delta: float) -> void:
else:
movement_delta_threshold += delta * movement_delta_speed
- current_state.draw(ground_map.local_to_map(base_position) + Vector2i(input_vector))
- moved.emit(ground_map.local_to_map(base_position))
+ move(ground_map.local_to_map(base_position) + Vector2i(input_vector))
else:
movement_delta = 0
movement_delta_threshold = 0
@@ -91,6 +94,11 @@ func set_current_state(value: Node):
state_changed.emit()
+func move(grid_position: Vector2i) -> void:
+ current_state.draw(grid_position)
+ moved.emit(ground_map.local_to_map(base_position))
+
+
func adjust_height(selector_tile: Sprite2D) -> void:
var tile_size: Vector2i = ground_map.tile_set.tile_size
var tile_data: TileData = floor_map.get_cell_tile_data(ground_map.local_to_map(selector_tile.global_position))
@@ -114,7 +122,7 @@ func get_entity_at_floor_tile(grid_position: Vector2i, collision_mask: int) -> N
var collision := get_world_2d().direct_space_state.intersect_point(query, 1)
if collision.size() > 0:
- return collision[0].collider.get_parent()
+ return collision[0].collider.get_root_node()
return null
@@ -128,6 +136,14 @@ func _on_state_select_selected(node: Node2D) -> void:
selected.emit(node)
+func _on_state_select_hover_enter(node: Node2D) -> void:
+ hover_enter.emit(node)
+
+
+func _on_state_select_hover_exit() -> void:
+ hover_exit.emit()
+
+
func _on_state_cube_placement_placed_tiles(grid_positions: Array) -> void:
placed_tiles.emit(grid_positions)
diff --git a/stage/grid_selector/grid_selector.tscn b/stage/grid_selector/grid_selector.tscn
index d2541ed..11bb6df 100644
--- a/stage/grid_selector/grid_selector.tscn
+++ b/stage/grid_selector/grid_selector.tscn
@@ -17,7 +17,7 @@ shader_parameter/pattern = 0
shader_parameter/inside = true
shader_parameter/add_margins = false
-[node name="GridSelector" type="Node2D"]
+[node name="GridSelector" type="Node2D" groups=["grid_selector"]]
y_sort_enabled = true
script = ExtResource("1_3pk7u")
@@ -88,6 +88,8 @@ script = ExtResource("7_0k3dq")
y_sort_enabled = true
[connection signal="placed_tiles" from="StateCubePlacement" to="." method="_on_state_cube_placement_placed_tiles"]
+[connection signal="hover_enter" from="StateSelect" to="." method="_on_state_select_hover_enter"]
+[connection signal="hover_exit" from="StateSelect" to="." method="_on_state_select_hover_exit"]
[connection signal="selected" from="StateSelect" to="." method="_on_state_select_selected"]
[connection signal="changed" from="StateMoveMode" to="." method="_on_state_move_mode_changed"]
[connection signal="confirmed" from="StateMoveMode" to="." method="_on_state_move_mode_confirmed"]
diff --git a/stage/grid_selector/state_cube_placement.gd b/stage/grid_selector/state_cube_placement.gd
index d238437..a1901ad 100644
--- a/stage/grid_selector/state_cube_placement.gd
+++ b/stage/grid_selector/state_cube_placement.gd
@@ -151,6 +151,7 @@ func draw(grid_position: Vector2i) -> void:
if is_in_bounds(grid_position):
grid_selector.global_position = ground_map.map_to_local(grid_position)
grid_selector.base_position = grid_selector.global_position
+ grid_selector.camera.global_position = grid_selector.global_position
var selector_tiles: Array = grid_selector.visual.get_children()
for idx in selector_tiles.size():
diff --git a/stage/grid_selector/state_move_mode.gd b/stage/grid_selector/state_move_mode.gd
index f903926..160d377 100644
--- a/stage/grid_selector/state_move_mode.gd
+++ b/stage/grid_selector/state_move_mode.gd
@@ -38,6 +38,7 @@ func draw(grid_position: Vector2i) -> void:
return
grid_selector.base_position = ground_map.map_to_local(grid_position)
+ grid_selector.camera.global_position = grid_selector.base_position
current_path = calculated_path
changed.emit(current_path)
diff --git a/stage/grid_selector/state_range_select.gd b/stage/grid_selector/state_range_select.gd
index d9345f1..cf671e6 100644
--- a/stage/grid_selector/state_range_select.gd
+++ b/stage/grid_selector/state_range_select.gd
@@ -23,8 +23,6 @@ enum Mode {
Attack,
}
-var current_mode: Mode = Mode.Attack
-
@onready var grid_selector: GridSelector = get_parent()
@onready var ground_map: TileMapLayer = grid_selector.ground_map
@onready var floor_map: TileMapLayer = grid_selector.floor_map
@@ -43,8 +41,9 @@ func _input(event: InputEvent) -> void:
current_grid_position,
grid_selector.range_select_collision_mask
)
+
if entity != null:
- if current_mode == Mode.Attack:
+ if grid_selector.range_select_current_mode == Mode.Attack:
if entity.current_team != grid_selector.current_team:
confirmed.emit(current_grid_position, entity)
get_viewport().set_input_as_handled()
@@ -62,6 +61,7 @@ func draw(grid_position: Vector2i) -> void:
current_grid_position = grid_position
grid_selector.base_position = ground_map.map_to_local(grid_position)
+ grid_selector.camera.global_position = grid_selector.base_position
var tile: Node2D = valid_tiles[grid_position]
tile.modulate = selector_tile.modulate
diff --git a/stage/grid_selector/state_select.gd b/stage/grid_selector/state_select.gd
index 8c06750..23c387e 100644
--- a/stage/grid_selector/state_select.gd
+++ b/stage/grid_selector/state_select.gd
@@ -3,6 +3,10 @@ extends Node2D
signal selected(node: Node2D)
+signal hover_enter(node: Node2D)
+signal hover_exit
+
+var current_unit_index: int = 0
@onready var grid_selector: GridSelector = get_parent()
@onready var ground_map: TileMapLayer = grid_selector.ground_map
@@ -12,21 +16,40 @@ signal selected(node: Node2D)
func _input(event: InputEvent) -> void:
if event.is_action_pressed("left_click"):
- var query := PhysicsPointQueryParameters2D.new()
- query.collision_mask = grid_selector.selection_collision_mask
- query.collide_with_areas = true
- query.position = selector_tile.global_position
-
- var collision := get_world_2d().direct_space_state.intersect_point(query, 1)
+ var collision := get_world_2d().direct_space_state.intersect_point(
+ get_collision_query(), 1
+ )
if not collision.is_empty():
- var collider = collision[0].collider.get_parent()
- grid_selector.current_entity = collider
+ var collider: Area2D = collision[0].collider
+ grid_selector.current_entity = collider.get_root_node()
else:
grid_selector.current_entity = null
if grid_selector.current_entity:
selected.emit(grid_selector.current_entity)
+
+
+ # jump to unit on field previous/next in list
+ if event.is_action_pressed("previous_rotation"):
+ if Network.local_player.units.size() > 0:
+ var next_index: int = (current_unit_index - 1) % Network.local_player.units.size()
+ current_unit_index = next_index
+ grid_selector.move(
+ floor_map.local_to_map(
+ Network.local_player.units[current_unit_index].global_position - floor_map.position
+ )
+ )
+
+ if event.is_action_pressed("next_rotation"):
+ if Network.local_player.units.size() > 0:
+ var next_index: int = (current_unit_index + 1) % Network.local_player.units.size()
+ current_unit_index = next_index
+ grid_selector.move(
+ floor_map.local_to_map(
+ Network.local_player.units[current_unit_index].global_position - floor_map.position
+ )
+ )
func draw(grid_position: Vector2i) -> void:
@@ -34,8 +57,33 @@ func draw(grid_position: Vector2i) -> void:
grid_selector.global_position = ground_map.map_to_local(grid_position)
grid_selector.base_position = grid_selector.global_position
selector_tile.global_position = grid_selector.global_position
+ grid_selector.camera.global_position = grid_selector.global_position
grid_selector.adjust_height(selector_tile)
+
+ # hover
+ var collision := get_world_2d().direct_space_state.intersect_point(
+ get_collision_query(), 1
+ )
+
+ if not collision.is_empty():
+ var collider: Area2D = collision[0].collider
+ grid_selector.current_entity = collider.get_root_node()
+ current_unit_index = Network.local_player.units.find(grid_selector.current_entity)
+ hover_enter.emit(grid_selector.current_entity)
+ else:
+ grid_selector.current_entity = null
+ hover_exit.emit()
+
+
+func get_collision_query() -> PhysicsPointQueryParameters2D:
+ var query := PhysicsPointQueryParameters2D.new()
+ query.collision_mask = grid_selector.selection_collision_mask
+ query.collide_with_areas = true
+ query.collide_with_bodies = false
+ query.position = selector_tile.global_position
+
+ return query
func _state_enter() -> void: