void CObject::SetCrashSpheres(const std::vector<Gfx::ModelCrashSphere>& crashSpheres) { for (const auto& crashSphere : crashSpheres) { SoundType sound = ParseSoundType(crashSphere.sound); CrashSphere objectCrashSphere(crashSphere.position, crashSphere.radius, sound, crashSphere.hardness); AddCrashSphere(objectCrashSphere); } }
std::unique_ptr<CExchangePost> CExchangePost::Create( const ObjectCreateParams& params, Gfx::COldModelManager* modelManager, Gfx::CEngine* engine) { auto obj = MakeUnique<CExchangePost>(params.id); obj->SetTeam(params.team); int rank = engine->CreateObject(); engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object obj->SetObjectRank(0, rank); modelManager->AddModelReference("info1.mod", false, rank); obj->SetPosition(params.pos); obj->SetRotationY(params.angle); obj->SetFloorHeight(0.0f); rank = engine->CreateObject(); engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); modelManager->AddModelReference("info2.mod", false, rank); obj->SetPartPosition(1, Math::Vector(0.0f, 5.0f, 0.0f)); for (int i = 0; i < 3; ++i) { rank = engine->CreateObject(); engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(2+i*2, rank); obj->SetObjectParent(2+i*2, 1); modelManager->AddModelReference("info3.mod", false, rank); obj->SetPartPosition(2+i*2, Math::Vector(0.0f, 4.5f, 0.0f)); rank = engine->CreateObject(); engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(3+i*2, rank); obj->SetObjectParent(3+i*2, 2+i*2); modelManager->AddModelReference("radar4.mod", false, rank); obj->SetPartPosition(3+i*2, Math::Vector(0.0f, 0.0f, -4.0f)); obj->SetPartRotationY(2+i*2, 2.0f*Math::PI/3.0f*i); } obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 3.0f, 0.0f), 6.0f, SOUND_BOUMm, 0.45f)); obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 11.0f, 0.0f), 6.0f, SOUND_BOUMm, 0.45f)); obj->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 5.0f, 0.0f), 6.0f)); obj->CreateShadowCircle(8.0f, 1.0f); Math::Vector pos = obj->GetPosition(); pos.y += params.height; obj->SetPosition(pos); // to display the shadows immediately auto objAuto = MakeUnique<CAutoInfo>(obj.get()); objAuto->Init(); obj->SetAuto(std::move(objAuto)); engine->LoadAllTextures(); return obj; }