Files
godot-demo-projects/2d/role_playing_game/grid_movement/grid/Grid.gd
2025-10-02 16:39:50 -07:00

37 lines
963 B
GDScript

extends TileMap
enum CELL_TYPES { 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 = 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, ACTOR)
set_cellv(cell_start, -1)
return map_to_world(cell_target) + cell_size / 2
OBJECT, 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"))