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
예제 #2
0
파일: kart_gfx.cpp 프로젝트: nado/stk-code
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