valencia-rail-rush/chunk.gd

127 lines
4.4 KiB
GDScript

extends Node3D
var exits: Array = [false, false, false, false]
const STREET_WIDTH: float = 80
@onready var exit_area = $BuildingAreas/B_area_E/Collision
@onready var building_area = $BuildingAreas/B_area/Collision
func _ready() -> void:
$Mesh.mesh.size.x = Global.chunk_size
$Mesh.mesh.size.y = Global.chunk_size
var building_side = (Global.chunk_size - STREET_WIDTH) / 2
var building_center = (building_side + STREET_WIDTH) / 2
building_area.shape.size.z = building_side
building_area.shape.size.x = building_side
building_area.position.x = building_center
building_area.position.z = building_center
exit_area.shape.size.z = STREET_WIDTH
exit_area.shape.size.x = building_side
for st_body in $BuildingAreas.get_children():
st_body.get_node("Collision").position.x = building_center
for degree in range(1, 4):
var new_area = $BuildingAreas/B_area.duplicate()
new_area.rotation.y = deg_to_rad(90) * degree
$BuildingAreas.add_child(new_area)
func update() -> void:
var i = 0
for exit in exits:
if not exit:
i += 1
continue
if i == 0: #n
var vertices = PackedVector3Array()
vertices.push_back(Vector3(-STREET_WIDTH/2, 0.5, -Global.chunk_size/2))
vertices.push_back(Vector3(STREET_WIDTH/2 , 0.5, -Global.chunk_size/2))
vertices.push_back(Vector3(-STREET_WIDTH/2, 0.5, 0))
vertices.push_back(Vector3(STREET_WIDTH/2, 0.5, -Global.chunk_size/2))
vertices.push_back(Vector3(STREET_WIDTH/2, 0.5, 0))
vertices.push_back(Vector3(-STREET_WIDTH/2, 0.5, 0))
# Initialize the ArrayMesh.
var arr_mesh = ArrayMesh.new()
var arrays = []
arrays.resize(Mesh.ARRAY_MAX)
arrays[Mesh.ARRAY_VERTEX] = vertices
# Create the Mesh.
arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
var m = MeshInstance3D.new()
m.mesh = arr_mesh
add_child(m)
$BuildingAreas/B_area_N/Collision.disabled = true
if i == 1: #s
var vertices = PackedVector3Array()
vertices.push_back(Vector3(-STREET_WIDTH/2, 0.5, 0))
vertices.push_back(Vector3(STREET_WIDTH/2, 0.5, 0))
vertices.push_back(Vector3(-STREET_WIDTH/2, 0.5, Global.chunk_size/2))
vertices.push_back(Vector3(STREET_WIDTH/2, 0.5, 0))
vertices.push_back(Vector3(STREET_WIDTH/2, 0.5, Global.chunk_size/2))
vertices.push_back(Vector3(-STREET_WIDTH/2, 0.5, Global.chunk_size/2))
# Initialize the ArrayMesh.
var arr_mesh = ArrayMesh.new()
var arrays = []
arrays.resize(Mesh.ARRAY_MAX)
arrays[Mesh.ARRAY_VERTEX] = vertices
# Create the Mesh.
arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
var m = MeshInstance3D.new()
m.mesh = arr_mesh
add_child(m)
$BuildingAreas/B_area_S/Collision.disabled = true
if i == 2: #w
var vertices = PackedVector3Array()
vertices.push_back(Vector3(-Global.chunk_size/2, 0.5, -STREET_WIDTH/2))
vertices.push_back(Vector3(0, 0.5, -STREET_WIDTH/2))
vertices.push_back(Vector3(-Global.chunk_size/2, 0.5, STREET_WIDTH/2))
vertices.push_back(Vector3(0, 0.5, -STREET_WIDTH/2))
vertices.push_back(Vector3(0, 0.5, STREET_WIDTH/2))
vertices.push_back(Vector3(-Global.chunk_size/2, 0.5, STREET_WIDTH/2))
# Initialize the ArrayMesh.
var arr_mesh = ArrayMesh.new()
var arrays = []
arrays.resize(Mesh.ARRAY_MAX)
arrays[Mesh.ARRAY_VERTEX] = vertices
# Create the Mesh.
arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
var m = MeshInstance3D.new()
m.mesh = arr_mesh
add_child(m)
$BuildingAreas/B_area_W/Collision.disabled = true
if i == 3: #e
var vertices = PackedVector3Array()
vertices.push_back(Vector3(0, 0.5, -STREET_WIDTH/2))
vertices.push_back(Vector3(Global.chunk_size/2, 0.5, -STREET_WIDTH/2))
vertices.push_back(Vector3(0, 0.5, STREET_WIDTH/2))
vertices.push_back(Vector3(Global.chunk_size/2, 0.5, -STREET_WIDTH/2))
vertices.push_back(Vector3(Global.chunk_size/2, 0.5, STREET_WIDTH/2))
vertices.push_back(Vector3(0, 0.5, STREET_WIDTH/2))
# Initialize the ArrayMesh.
var arr_mesh = ArrayMesh.new()
var arrays = []
arrays.resize(Mesh.ARRAY_MAX)
arrays[Mesh.ARRAY_VERTEX] = vertices
# Create the Mesh.
arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
var m = MeshInstance3D.new()
m.mesh = arr_mesh
add_child(m)
$BuildingAreas/B_area_E/Collision.disabled = true
var center_mesh = MeshInstance3D.new()
center_mesh.position = Vector3(0,0.6,0)
center_mesh.mesh = PlaneMesh.new()
center_mesh.mesh.size = Vector2(STREET_WIDTH,STREET_WIDTH)
add_child(center_mesh)
i += 1