summaryrefslogtreecommitdiff
path: root/stage/stage.gd
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-01-30 13:19:56 +0100
committerDaniel Weipert <git@mail.dweipert.de>2025-01-30 13:19:56 +0100
commita210c39b5d2be1e7e5c52568d40ba6a29f34b4bb (patch)
tree1425761be2edb336499970a7cb2d8a2c45da9a31 /stage/stage.gd
initial commit
Diffstat (limited to 'stage/stage.gd')
-rw-r--r--stage/stage.gd64
1 files changed, 64 insertions, 0 deletions
diff --git a/stage/stage.gd b/stage/stage.gd
new file mode 100644
index 0000000..1f79915
--- /dev/null
+++ b/stage/stage.gd
@@ -0,0 +1,64 @@
+class_name Stage
+extends Node2D
+
+
+var grid := AStarGrid2D.new()
+
+@onready var grid_selector: GridSelector = %GridSelector
+
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+ grid.region = $Ground.get_used_rect()
+ grid.cell_size = $Floor.tile_set.tile_size
+ grid.cell_shape = AStarGrid2D.CELL_SHAPE_ISOMETRIC_DOWN
+ grid.diagonal_mode = AStarGrid2D.DIAGONAL_MODE_NEVER
+ grid.update()
+
+ # set whole grid non-walkable initially
+ grid.fill_solid_region(grid.region, true)
+
+ # pre-set floor tiles as walkable
+ for tile in $Floor.get_used_cells():
+ grid.set_point_solid(tile, false)
+
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+func _process(_delta: float) -> void:
+ pass
+
+
+func _input(event: InputEvent) -> void:
+ if event.is_action_pressed("test_1"):
+ var unit = preload("res://unit/unit.tscn").instantiate()
+ unit.global_position = %GridSelector.global_position + $Floor.position
+ add_child(unit)
+ # TODO: generate dice throw anim => on end go to dice placement => add unit with tiles => go to select mode
+ if event.is_action_pressed("test_2"):
+ var unit: Node2D = get_node("Unit")
+ var path = grid.get_point_path(
+ $Floor.local_to_map(unit.global_position - $Floor.position),
+ $Floor.local_to_map(get_global_mouse_position() - $Floor.position)
+ )
+ var tween = get_tree().create_tween()
+ for p in path.slice(1): # remove starting position
+ tween.tween_property(unit, "global_position", p + $Floor.position, 0.1)
+
+
+func _on_grid_selector_placed_tiles(grid_positions: Array) -> void:
+ for p in grid_positions:
+ grid.set_point_solid(p, false)
+
+
+func _on_grid_selector_move_mode_confirmed(path: Array) -> void:
+ grid_selector.process_mode = Node.PROCESS_MODE_DISABLED
+
+ var unit: Node2D = get_node("Unit")
+ var tween = get_tree().create_tween()
+ for p in path.slice(1): # remove starting position
+ tween.tween_property(unit, "global_position", p + $Floor.position, 0.1)
+
+ await tween.finished
+ grid_selector.process_mode = Node.PROCESS_MODE_INHERIT
+ grid_selector.current_state = grid_selector.get_node("StateSelect")
+ grid_selector.current_state.draw($Ground.local_to_map(path[path.size() - 1]))