extends Node2D class_name GameGrid var grid_content: Dictionary = {} @onready var tile_map: TileMapLayer = get_tree().root.get_node("Node2D/TileMap") func _ready(): var belt1 = preload("res://ConveyorBelt.tscn").instantiate() place_building(belt1, Vector2i(0, 0), Vector2i.RIGHT) var belt2 = preload("res://ConveyorBelt.tscn").instantiate() place_building(belt2, Vector2i(1, 0), Vector2i.RIGHT) var belt4 = preload("res://ConveyorBelt.tscn").instantiate() place_building(belt4, Vector2i(3, 0), Vector2i.RIGHT) var belt3 = preload("res://ConveyorBelt.tscn").instantiate() place_building(belt3, Vector2i(2, 0), Vector2i.RIGHT) var spawner = preload("res://ItemSpawner.tscn").instantiate() spawner.modulate = Color.RED place_building(spawner, Vector2i(0, -1), Vector2i.DOWN) var spawner2 = preload("res://ItemSpawner.tscn").instantiate() spawner2.modulate = Color.YELLOW place_building(spawner2, Vector2i(0, 1), Vector2i.UP) var sink = preload("res://ItemSink.tscn").instantiate() place_building(sink, Vector2i(2, 1)) func get_content_at_grid(grid_pos: Vector2i) -> Building: return grid_content.get(grid_pos, null) func place_building(building_node: Building, grid_pos: Vector2i, direction: Vector2i = Vector2i.ZERO) -> bool: if grid_content.has(grid_pos) and grid_content[grid_pos] != null: print("grid_pos at %s not free." % grid_pos) building_node.queue_free() return false # Internal setter building_node.current_grid_pos = grid_pos building_node.direction = direction var world_center = tile_map.map_to_local(grid_pos) + (Vector2.ONE * tile_map.rendering_quadrant_size) / 2 building_node.position = world_center add_child(building_node) grid_content[grid_pos] = building_node print("placed %s at %s" % [building_node.name, grid_pos]) return true func remove_building(grid_pos: Vector2i) -> bool: if grid_content.has(grid_pos): var building_to_remove = grid_content[grid_pos] grid_content.erase(grid_pos) if building_to_remove is ConveyorBelt and not building_to_remove.items_on_belt.is_empty(): for item_data in building_to_remove.items_on_belt: item_data.item.queue_free() building_to_remove.queue_free() print("removed building from %s" % grid_pos) return true print("no building to remove at %s" % grid_pos) return false