diff options
Diffstat (limited to 'stage/stage.gd')
-rw-r--r-- | stage/stage.gd | 64 |
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])) |