44 lines
1.1 KiB
GDScript
44 lines
1.1 KiB
GDScript
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]
|
|
|
|
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
|
|
|
|
add_child(building)
|
|
|
|
# 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)
|