KartGFX::KartGFX(const AbstractKart *kart) { if(!UserConfigParams::m_graphical_effects) { for(unsigned int i=0; i<KGFX_COUNT; i++) m_all_emitters.push_back(NULL); return; } m_kart = kart; Vec3 rear_center(0, kart->getKartHeight()*0.35f, -kart->getKartLength()*0.35f); // Create all effects. Note that they must be created // in the order of KartGFXType. addEffect(KGFX_NITRO, "nitro.xml", rear_center); addEffect(KGFX_ZIPPER, "zipper_fire.xml", rear_center); addEffect(KGFX_TERRAIN, "smoke.xml", Vec3(0,0,0)); addEffect(KGFX_SKID1, "skid1.xml", rear_center); addEffect(KGFX_SKID2, "skid2.xml", rear_center); } // KartGFX
KartGFX::KartGFX(const AbstractKart *kart, RaceManager::KartType type, bool is_day) { m_nitro_light = NULL; m_skidding_light_1 = NULL; m_skidding_light_2 = NULL; m_head_light = NULL; m_kart = kart; m_wheel_toggle = 0; m_skid_level = 0; //if(!UserConfigParams::m_graphical_effects) //{ // for(unsigned int i=0; i<KGFX_COUNT; i++) // m_all_emitters.push_back(NULL); // return; //} const KartModel *km = m_kart->getKartModel(); const float length = km->getLength(); scene::ISceneNode *node = m_kart->getNode(); // Create nitro light core::vector3df location(0.0f, 0.5f, -0.5f*length - 0.05f); #ifndef SERVER_ONLY if (CVS->isGLSL()) { m_nitro_light = irr_driver->addLight(location, /*force*/ 0.4f, /*radius*/ 5.0f, 0.0f, 0.4f, 1.0f, false, node); m_nitro_light->setVisible(false); #ifdef DEBUG m_nitro_light->setName( ("nitro emitter (" + m_kart->getIdent() + ")").c_str() ); #endif // Create skidding lights // For the first skidding level m_skidding_light_1 = irr_driver->addLight(core::vector3df(0.0f, 0.1f, -0.5f * length - 0.05f), /* force */ 0.3f, /*radius*/ 3.0f, 1.0f, 0.6f, 0.0f, false, node); m_skidding_light_1->setVisible(false); m_skidding_light_1->setName(("skidding emitter 1 (" + m_kart->getIdent() + ")").c_str() ); // For the second skidding level m_skidding_light_2 = irr_driver->addLight(core::vector3df(0.0f, 0.1f, -0.5f * length - 0.05f), /* force */0.4f, /*radius*/4.0f, 1.0f, 0.0f, 0.0f, false, node); m_skidding_light_2->setVisible(false); m_skidding_light_2->setName(("skidding emitter 2 (" + m_kart->getIdent() + ")").c_str() ); m_head_light = irr_driver->addLight(core::vector3df(0.0f, 0.2f, 1.5f * length), /* force */ 0.5f, /*radius*/5.0f, 1.0f, 1.0f, 1.0f, false, node); m_head_light->setName( ("head light " + m_kart->getIdent() + ")").c_str() ); m_head_light->setVisible(type == RaceManager::KT_PLAYER && !is_day); m_nitro_light->grab(); m_skidding_light_1->grab(); m_skidding_light_2->grab(); m_head_light->grab(); } #endif // Create particle effects Vec3 rear_left(kart->getWheelGraphicsPosition(3).getX(), 0.05f, kart->getWheelGraphicsPosition(3).getZ()-0.1f ); Vec3 rear_right(kart->getWheelGraphicsPosition(2).getX(), 0.05f, kart->getWheelGraphicsPosition(2).getZ()-0.1f ); Vec3 rear_center(0, kart->getKartHeight()*0.35f, -0.35f*length); Vec3 rear_nitro_center(0, kart->getKartHeight()*0.2f, -0.1f*length); // FIXME Used to match the emitter as seen in blender const Vec3 delta(0, 0, 0.6f); Vec3 rear_nitro_right = km->getNitroEmittersPositon(0) + delta; Vec3 rear_nitro_left = km->getNitroEmittersPositon(1) + delta; if (!km->hasNitroEmitters()) rear_nitro_right = rear_nitro_left = rear_nitro_center; // Create all effects. Note that they must be created // in the order of KartGFXType. addEffect(KGFX_NITRO1, "nitro.xml", rear_nitro_right, true ); addEffect(KGFX_NITRO2, "nitro.xml", rear_nitro_left, true ); addEffect(KGFX_NITROSMOKE1, "nitro-smoke.xml", rear_nitro_left, false); addEffect(KGFX_NITROSMOKE2, "nitro-smoke.xml", rear_nitro_right, false); addEffect(KGFX_EXHAUST1, "kart_exhaust.xml",rear_nitro_right, false ); addEffect(KGFX_EXHAUST2, "kart_exhaust.xml",rear_nitro_left, false ); addEffect(KGFX_ZIPPER, "zipper_fire.xml", rear_center, true ); addEffect(KGFX_TERRAIN, "smoke.xml", Vec3(0, 0, 0), false); addEffect(KGFX_SKID1L, "skid1.xml", rear_left, true ); addEffect(KGFX_SKID1R, "skid1.xml", rear_right, true ); addEffect(KGFX_SKID2L, "skid2.xml", rear_left, true ); addEffect(KGFX_SKID2R, "skid2.xml", rear_right, true ); } // KartGFX