mirror of
https://github.com/godotengine/godot-demo-projects.git
synced 2026-01-06 14:10:55 +03:00
36 lines
996 B
GDScript
36 lines
996 B
GDScript
extends TileMap
|
|
|
|
enum CellType { ACTOR, OBSTACLE, OBJECT }
|
|
export(NodePath) var dialogue_ui
|
|
|
|
func _ready():
|
|
for child in get_children():
|
|
set_cellv(world_to_map(child.position), child.type)
|
|
|
|
|
|
func get_cell_pawn(cell, type = CellType.ACTOR):
|
|
for node in get_children():
|
|
if node.type != type:
|
|
continue
|
|
if world_to_map(node.position) == cell:
|
|
return(node)
|
|
|
|
|
|
func request_move(pawn, direction):
|
|
var cell_start = world_to_map(pawn.position)
|
|
var cell_target = cell_start + direction
|
|
|
|
var cell_tile_id = get_cellv(cell_target)
|
|
match cell_tile_id:
|
|
-1:
|
|
set_cellv(cell_target, CellType.ACTOR)
|
|
set_cellv(cell_start, -1)
|
|
return map_to_world(cell_target) + cell_size / 2
|
|
CellType.OBJECT, CellType.ACTOR:
|
|
var target_pawn = get_cell_pawn(cell_target, cell_tile_id)
|
|
print("Cell %s contains %s" % [cell_target, target_pawn.name])
|
|
|
|
if not target_pawn.has_node("DialoguePlayer"):
|
|
return
|
|
get_node(dialogue_ui).show_dialogue(pawn, target_pawn.get_node("DialoguePlayer"))
|