From 858122b8a19cfa15538fe6d9523f55e2d1c0f749 Mon Sep 17 00:00:00 2001 From: awu Date: Tue, 30 Dec 2025 23:38:01 +0100 Subject: [PATCH] Added a Autoload for the Mapsystem --- Scenes/Map/map_global.gd | 120 +++++++++++++++++++++++++++++++++++ Scenes/Map/map_global.gd.uid | 1 + 2 files changed, 121 insertions(+) create mode 100644 Scenes/Map/map_global.gd create mode 100644 Scenes/Map/map_global.gd.uid diff --git a/Scenes/Map/map_global.gd b/Scenes/Map/map_global.gd new file mode 100644 index 0000000..08d798a --- /dev/null +++ b/Scenes/Map/map_global.gd @@ -0,0 +1,120 @@ +extends Node2D + +@onready var GroundLayer: TileMapLayer = $Ground +@onready var ObstacleLayer: TileMapLayer = $Obstacles +# Maybe a SubClass that is a Singleton, so we can create one grid +# and then change it per Map +var _aStarGrid: AStarGrid2D + +var _gridData = { + "cellSize": Vector2.ZERO, + "fullRegion": Rect2i(0,0,0,0), + "currentRegion": Rect2i(0,0,0,0) +} + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + #_aStarGrid = generateSimpleGrid() +# _aStarGrid = generateObstacleGrid() +# %GridDisplay.grid = _aStarGrid + pass + +func generateSimpleGrid() -> AStarGrid2D: + var grid = newGrid(Vector2.ZERO, Rect2i(0,0,0,0)) + + for id in GroundLayer.get_used_cells(): + var data: TileData = GroundLayer.get_cell_tile_data(id) + if data and data.get_custom_data('obstacle'): + grid.set_point_solid(id) + + return grid + +func generateObstacleGrid() -> AStarGrid2D: + var grid = newGrid(Vector2.ZERO, Rect2i(0,0,0,0)) + + var layers = ObstacleLayer.get_children() + for layer in layers: + for id in layer.get_used_cells(): + var data: TileData = layer.get_cell_tile_data(id) + if data and data.get_custom_data('obstacle'): + grid.set_point_solid(id) + + return grid + +func GenerateGridFromLayer(layer: TileMapLayer): + var ground = layer.get_parent().get_node("Ground") + #var grid = newGrid(ground.tile_set.tile_size, ground.get_used_rect()) + var grid = GetGrid() + + if _gridData["cellSize"] == Vector2.ZERO: + SetCellSize(ground.tile_set.tile_size) + + if _gridData["fullRegion"] == Rect2i(0,0,0,0): + _gridData["fullRegion"] = ground.get_used_rect() + + _updateRegionFrom("fullRegion") + + var childLayers = layer.get_children() + if childLayers.size() > 0: + for childLayer in childLayers: + for id in childLayer.get_used_cells(): + var data: TileData = childLayer.get_cell_tile_data(id) + if data and data.get_custom_data('obstacle'): + GetGrid().set_point_solid(id) + else: + for id in layer.get_used_cells(): + var data: TileData = layer.get_cell_tile_data(id) + if data and data.get_custom_data('obstacle'): + GetGrid().set_point_solid(id) + + GetGrid().update() + +func newGrid(cellSize: Vector2, region: Rect2i) -> AStarGrid2D: + _gridData["cellSize"] = cellSize + _gridData["fullRegion"] = region + var _astarGrid = AStarGrid2D.new() + _astarGrid.default_compute_heuristic = AStarGrid2D.HEURISTIC_MANHATTAN + _astarGrid.default_estimate_heuristic = AStarGrid2D.HEURISTIC_MANHATTAN + _astarGrid.diagonal_mode = AStarGrid2D.DIAGONAL_MODE_ONLY_IF_NO_OBSTACLES + _astarGrid.cell_size = cellSize + _astarGrid.region = region + + _astarGrid.update() + + _aStarGrid = _astarGrid + + return _astarGrid + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + +func GetGrid(): + if !_aStarGrid: + _aStarGrid = newGrid(Vector2.ZERO, Rect2i()) + + return _aStarGrid + +func SetGridData(key: Variant, value: Variant): + if _gridData.has(key): + _gridData[key] = value + +func getData(): + return _gridData + +func SetRegion(region: Rect2i, offset: Vector2i = Vector2i.ZERO): + _gridData["currentRegion"] = region + _aStarGrid.offset = offset + _updateRegionFrom("currentRegion") + +func _updateRegionFrom(region: String): + _aStarGrid.region = _gridData[region] + _aStarGrid.update() + +func SetCellSize(cellSize: Vector2): + _gridData["cellSize"] = cellSize + _updateCellSize() + +func _updateCellSize(): + _aStarGrid.cell_size = _gridData["cellSize"] + _aStarGrid.update() diff --git a/Scenes/Map/map_global.gd.uid b/Scenes/Map/map_global.gd.uid new file mode 100644 index 0000000..19528ec --- /dev/null +++ b/Scenes/Map/map_global.gd.uid @@ -0,0 +1 @@ +uid://76bfwrwrqfqr