class_name Grid extends Node2D @export var ground_radius : float @export var cell_height : float @export var num_collumns : int @export var debug : bool @export var packed_buildings : Array[PackedScene] @export var max_build_height = 6 var buildings : Array[Building] = [] func _draw() -> void: if !debug: return for i in range(10): draw_arc(Vector2.ZERO, ground_radius + i * cell_height, 0, TAU, 250, Color.SKY_BLUE, 1.0, true); for i in range(num_collumns): var angle = i * TAU / num_collumns; draw_line(Vector2.ZERO, 10000 * Vector2.from_angle(angle), Color.SKY_BLUE); func add_building_to_collumn(building : Building, collumn : int): # find the height of the top building in the buildings list: building.location = Vector2(collumn, -1) var spot_clear : bool = false while(!spot_clear): building.location.y += 1 spot_clear = true for other in buildings: if other.overlaps(building): spot_clear = false if building.location.y + building.dimension.y > max_build_height: building.free() return false add_child(building) return true func get_world_position (location: Vector2, offset: Vector2 = Vector2.ZERO) -> Vector2: var height = ground_radius + location.y * cell_height - offset.y # currently assumes anchor is bottom left var angle = (location.x + offset.x / cell_height) * TAU / num_collumns return height * Vector2.from_angle(angle) # for testing #func _ready() -> void: # # # #for i in range(100): #var test_building = packed_buildings[0].instantiate() #var collumn = randi() % 60 #add_building_to_collumn(test_building, collumn)