extends StaticBody3D ## Base for placed pieces (campfire, workbench, chest, later walls/floors). ## Builds the visual from the item's procedural mesh and a box collider from ## the item's footprint. Subclasses add behaviour. var item_id := "" var def: Dictionary = {} func setup(d: Dictionary) -> void: def = d item_id = d.id var mi := MeshInstance3D.new() mi.name = "Mesh" mi.mesh = ItemDB.mesh_for(item_id) mi.material_override = ItemDB.item_material() add_child(mi) var aabb := mi.mesh.get_aabb() var cs := CollisionShape3D.new() var box := BoxShape3D.new() box.size = Vector3(aabb.size.x, maxf(aabb.size.y, 0.3), aabb.size.z) cs.shape = box cs.position = aabb.get_center() add_child(cs) _build() func _build() -> void: pass func display_name() -> String: return ItemDB.item_name(item_id) func interact_prompt(_player: Node) -> String: return display_name() func interact(_player: Node) -> void: pass