feat: stream chunks in-game, render 3D catalog props, and ground chunk coordinates
checkpoint / checkpoint (push) Successful in 5m54s
checkpoint / checkpoint (push) Successful in 5m54s
This commit is contained in:
+27
-8
@@ -263,9 +263,9 @@ func _build_chunk_collision(parent: Node3D, coord: Vector3i, data: ChunkDataDeco
|
||||
var body := StaticBody3D.new()
|
||||
body.name = "chunk_%d_%d_%d" % [coord.x, coord.y, coord.z]
|
||||
var chunk_origin := Vector3(
|
||||
coord.x * Chunk.CHUNK_SIZE_X,
|
||||
coord.y * Chunk.CHUNK_SIZE_Y,
|
||||
coord.z * Chunk.CHUNK_SIZE_Z
|
||||
float(coord.x * Chunk.CHUNK_SIZE_X),
|
||||
float(coord.z * Chunk.CHUNK_SIZE_Z),
|
||||
float(coord.y * Chunk.CHUNK_SIZE_Y)
|
||||
)
|
||||
|
||||
for layer in data.tile_layers:
|
||||
@@ -282,20 +282,39 @@ func _build_chunk_collision(parent: Node3D, coord: Vector3i, data: ChunkDataDeco
|
||||
var box := BoxShape3D.new()
|
||||
box.size = Vector3.ONE
|
||||
shape.shape = box
|
||||
shape.position = chunk_origin + Vector3(x + 0.5, y + 0.5, z + 0.5)
|
||||
shape.position = chunk_origin + Vector3(x + 0.5, z + 0.5, y + 0.5)
|
||||
body.add_child(shape)
|
||||
_collision_shapes_built += 1
|
||||
|
||||
for obj in data.objects:
|
||||
if obj.dynamic:
|
||||
continue # dynamic templates are spawnable entities, not static geometry
|
||||
if bool(obj.properties.get("walkable", true)):
|
||||
if obj.type == "spawn_point" or bool(obj.properties.get("walkable", false)):
|
||||
continue
|
||||
var shape := CollisionShape3D.new()
|
||||
var box := BoxShape3D.new()
|
||||
box.size = obj.scale
|
||||
shape.shape = box
|
||||
shape.position = obj.position
|
||||
var aid := str(obj.asset_id).to_lower()
|
||||
var cat_id := str(obj.properties.get("catalog_id", "")).to_lower()
|
||||
if "lamp" in aid or "lamp" in cat_id:
|
||||
box.size = Vector3(0.5, 3.2, 0.5)
|
||||
shape.shape = box
|
||||
shape.position = chunk_origin + Vector3(obj.position.x, obj.position.z + 1.6, obj.position.y)
|
||||
elif "tree" in aid or "tree" in cat_id:
|
||||
box.size = Vector3(0.8, 4.0, 0.8)
|
||||
shape.shape = box
|
||||
shape.position = chunk_origin + Vector3(obj.position.x, obj.position.z + 2.0, obj.position.y)
|
||||
elif "chest" in aid or "chest" in cat_id:
|
||||
box.size = Vector3(1.0, 0.8, 0.6)
|
||||
shape.shape = box
|
||||
shape.position = chunk_origin + Vector3(obj.position.x, obj.position.z + 0.4, obj.position.y)
|
||||
elif "rock" in aid or "rock" in cat_id:
|
||||
box.size = Vector3(1.2, 1.0, 1.2)
|
||||
shape.shape = box
|
||||
shape.position = chunk_origin + Vector3(obj.position.x, obj.position.z + 0.5, obj.position.y)
|
||||
else:
|
||||
box.size = Vector3(obj.scale.x, obj.scale.z, obj.scale.y)
|
||||
shape.shape = box
|
||||
shape.position = chunk_origin + Vector3(obj.position.x, obj.position.z + obj.scale.y * 0.5, obj.position.y)
|
||||
body.add_child(shape)
|
||||
_collision_shapes_built += 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user