Collider3DRef Collider3D::Build(const PrimitiveList& list) { std::size_t primitiveCount = list.GetSize(); if (primitiveCount > 1) { std::vector<Collider3DRef> geoms(primitiveCount); for (unsigned int i = 0; i < primitiveCount; ++i) geoms[i] = CreateGeomFromPrimitive(list.GetPrimitive(i)); return CompoundCollider3D::New(std::move(geoms)); } else if (primitiveCount > 0) return CreateGeomFromPrimitive(list.GetPrimitive(0)); else return NullCollider3D::New(); }
NzBaseGeom* NzBaseGeom::Build(NzPhysWorld* physWorld, const NzPrimitiveList& list) { unsigned int primitiveCount = list.GetSize(); #if NAZARA_PHYSICS_SAFE if (primitiveCount == 0) { NazaraError("PrimitiveList must have at least one primitive"); return nullptr; } #endif if (primitiveCount > 1) { std::vector<NzBaseGeom*> geoms(primitiveCount); for (unsigned int i = 0; i < primitiveCount; ++i) geoms[i] = CreateGeomFromPrimitive(physWorld, list.GetPrimitive(i)); return new NzCompoundGeom(physWorld, &geoms[0], primitiveCount); } else return CreateGeomFromPrimitive(physWorld, list.GetPrimitive(0)); }