2024-12-18 16:35:26 -05:00

70 lines
2.4 KiB
GDScript

class_name City extends Node3D
static var instance: City
@onready var block: PackedScene = preload("res://Scenes/Gameplay/block.tscn")
@onready var speedRing: PackedScene = preload("res://Scenes/Gameplay/ring.tscn")
@onready var neighborhood: Node3D = $Neighborhood
@onready var ringholder: Node3D = $Rings
@export var houses: Array[PackedScene]
@export var columns: int = 8
@export var rows: int = 15
@export var blockLength: float = 11
@export var blockScale: float = 10
var distance: float = 0
var rowIndex: int = 0
var cellSize: float
var rings: Array[SpeedRing]
var ringIndex: int = 0
func _enter_tree():
rings.resize(6)
if (instance == null || !is_instance_valid(instance)):
instance = self
else:
queue_free()
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
cellSize = blockLength * blockScale
for i in range(rings.size()):
rings[i] = speedRing.instantiate()
rings[i].scale = Vector3(5, 5, 5)
rings[i].strength = 1.5
ringholder.add_child(rings[i])
for y in range(rows):
for x in range(columns):
var road: Node3D = block.instantiate()
road.position = Vector3((x - (float(columns - 2) / 2)) * cellSize, 0, rowIndex * -cellSize)
neighborhood.add_child(road)
var house: Node3D = houses.pick_random().instantiate()
house.position = road.position + Vector3(-cellSize / 2, -0.2, -cellSize / 2)
house.rotate_y(randi_range(0, 3) * (PI / 2))
neighborhood.add_child(house)
rowIndex += 1
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
if (distance >= cellSize):
distance -= cellSize
for i in range(columns * 2):
neighborhood.get_child(i).queue_free()
for i in range(columns):
var road: Node3D = block.instantiate()
road.position = Vector3((i - (float(columns - 2) / 2)) * cellSize, 0, rowIndex * -cellSize)
neighborhood.add_child(road)
var house: Node3D = houses.pick_random().instantiate()
house.position = road.position + Vector3(-cellSize / 2, -0.2, -cellSize / 2)
house.rotate_y(randi_range(0, 3) * (PI / 2))
neighborhood.add_child(house)
rings[ringIndex].position = Vector3(randf_range(-25, 25), randf_range(50, 85), (rowIndex * -cellSize) - randf_range(0, cellSize * 0.8))
ringIndex += 1
if (ringIndex >= rings.size()): ringIndex = 0
rowIndex += 1
func _on_back_pressed() -> void:
get_tree().root.add_child(load("res://Scenes/UI/MainMenu.tscn").instantiate())
queue_free()