blob: 1f7991569b3c0e0f2894872496b149f4e9cf80f6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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]))
|