class_name World extends Node2D @onready var player: Player = $Player func _ready() -> void: Game.world = self # TODO: load last saved map instead set_map("res://map/town_01/indoor_01_01.tscn") func set_map(map_file: String) -> void: for node in %Map.get_children(): node.queue_free() var map_scene = load(map_file) var map: Map = map_scene.instantiate() Game.current_map_name = map.name %Map.add_child(map) # set limits if applicable if map.has_node("Camera"): var camera: Camera2D = map.get_node("Camera") $Camera2D.limit_top = camera.limit_top $Camera2D.limit_bottom = camera.limit_bottom $Camera2D.limit_left = camera.limit_left $Camera2D.limit_right = camera.limit_right else: $Camera2D.limit_top = -10000000 $Camera2D.limit_bottom = 10000000 $Camera2D.limit_left = -10000000 $Camera2D.limit_right = 10000000 # if is initial map, set position # TODO: do only if flag is set # TODO: when first starting game, and resetting from hall of fame if map.name == "Indoor_01_01": %Player.global_position = map.get_node("InitialPlayerPosition").global_position player.current_state = player.current_state func add_map(map_file: String) -> void: var map_scene = load(map_file) var map: Map = map_scene.instantiate() %Map.add_child(map) # position to current map connection var current_map := get_current_map() if current_map.has_node(NodePath(map.name)): map.global_position = ( current_map.get_node(NodePath(map.name)).global_position - map.get_node(NodePath(current_map.name)).global_position ) func get_map(map_name: String) -> Map: return %Map.get_node(map_name) func get_current_map() -> Map: return get_map(Game.current_map_name) static func map_to_local(grid_position: Vector2i) -> Vector2: return grid_position * 16.0 + Vector2(8.0, 8.0) static func local_to_map(local_position: Vector2) -> Vector2i: return floor(local_position / 16.0)