tool extends TK_Context class_name TK_GridContext ## todo: Cell visualization. ## todo: Integration of TileMap. export var cell_size: Vector2 = Vector2(64, 64) setget _set_cell_size signal cell_size_changed(p_old_cell_size, p_new_cell_size) var _colliders: Dictionary # Node to null (set) func local_position_to_context_position(p_position: Vector2) -> Vector2: return p_position / cell_size func is_path_traversible(p_game_object: Node2D, p_from: Vector2, p_to: Vector2) -> bool: for collider in _colliders: if not collider.is_path_traversible(p_game_object, p_from, p_to): return false return true # todo: Effectful traversal. func try_moving(p_game_object: Node2D, p_from: Vector2, p_to: Vector2) -> bool: if not is_path_traversible(p_game_object, p_from, p_to): return false p_game_object.position = cell_size * p_to return true func register_collider(p_collider: Node) -> void: _colliders[p_collider] = null if p_collider.connect("child_exiting_tree", self, "_on_collider_exiting_tree") != OK: assert(false) func _on_collider_exiting_tree(p_collider) -> void: if not _colliders.erase(p_collider): pass func _set_cell_size(p_new_cell_size: Vector2) -> void: if p_new_cell_size.x == 0 or p_new_cell_size.y == 0: push_error("Cell size cannot be zero") return var cell_size_cache = cell_size cell_size = p_new_cell_size emit_signal("cell_size_changed", cell_size_cache, p_new_cell_size)