Allow configurable exhuast particle, fixes #2878

This commit is contained in:
Benau 2017-10-06 01:08:27 +08:00
parent 3ad081104e
commit cf2a9f7089
4 changed files with 38 additions and 4 deletions

View File

@ -111,14 +111,24 @@ KartGFX::KartGFX(const AbstractKart *kart, bool is_day)
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 );
if (!kart->getKartModel()->getExhaustXML().empty())
{
const std::string& ex = kart->getKartModel()->getExhaustXML();
addEffect(KGFX_EXHAUST1, ex, rear_nitro_right, false);
addEffect(KGFX_EXHAUST2, ex, rear_nitro_left, false);
}
else
{
m_all_emitters.push_back(NULL);
m_all_emitters.push_back(NULL);
}
} // KartGFX
// ----------------------------------------------------------------------------

View File

@ -49,8 +49,6 @@ public:
KGFX_NITRO2,
KGFX_NITROSMOKE1,
KGFX_NITROSMOKE2,
KGFX_EXHAUST1,
KGFX_EXHAUST2,
KGFX_ZIPPER,
KGFX_TERRAIN,
KGFX_SKIDL,
@ -59,6 +57,8 @@ public:
KGFX_SKID1R = KGFX_SKIDR,
KGFX_SKID2L,
KGFX_SKID2R,
KGFX_EXHAUST1,
KGFX_EXHAUST2,
KGFX_COUNT};
private:

View File

@ -215,6 +215,10 @@ void KartModel::loadInfo(const XMLNode &node)
}
}
if (const XMLNode* exhaust = node.getNode("exhaust"))
{
exhaust->get("file", &m_exhaust_xml);
}
} // loadInfo
// ----------------------------------------------------------------------------
@ -336,6 +340,7 @@ KartModel* KartModel::makeCopy(KartRenderType krt)
km->m_render_info = new RenderInfo();
km->m_inverse_bone_matrices = m_inverse_bone_matrices;
km->m_version = m_version;
km->m_exhaust_xml = m_exhaust_xml;
km->m_render_info->setKartModelRenderInfo(krt);
km->m_nitro_emitter_position[0] = m_nitro_emitter_position[0];
@ -1206,6 +1211,12 @@ void KartModel::toggleHeadlights(bool on)
} // toggleHeadlights
//-----------------------------------------------------------------------------
/** Called when a kart is load. this will load all the inverse bone matrices
* for each bone in straight frame. The location, rotation and scale in
* kart.xml for attachments (speedweighted objects, headlight, hat...) are in
* object space, so if you use a inverse bone matrix * that matrix, it will be
* relative to the bone, and you can use the result to set parent.
*/
void KartModel::initInverseBoneMatrices()
{
if (m_version < 3)

View File

@ -310,16 +310,27 @@ private:
/** Pointer to the kart object belonging to this kart model. */
AbstractKart* m_kart;
/** Tell the render type of this kart model, either colorized (red / blue now)
* or transparent (ghost kart). */
KartRenderType m_krt;
/** For our engine to get the desired hue / saturation for colorization. */
RenderInfo* m_render_info;
/** True if this kart model can be colorization in red / blue (now only
* used in soccer mode). */
bool m_support_colorization;
/** Used to cache inverse bone matrices for each bone in straight frame
* for attachment. */
std::unordered_map<std::string, core::matrix4> m_inverse_bone_matrices;
/** Version of kart model (in kart.xml). */
unsigned m_version;
/** Exhaust particle file (xml) for the kart, empty if disabled. */
std::string m_exhaust_xml;
// ------------------------------------------------------------------------
void initInverseBoneMatrices();
// ------------------------------------------------------------------------
@ -444,6 +455,8 @@ public:
// ------------------------------------------------------------------------
const core::matrix4&
getInverseBoneMatrix(const std::string& bone_name) const;
// ------------------------------------------------------------------------
const std::string& getExhaustXML() const { return m_exhaust_xml; }
}; // KartModel
#endif