Add tricks I hope help dramatically improve the synchronisation between the STK physics and irlricht animations in cutscene
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@11633 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
5b623927d8
commit
48d480a67d
@ -83,6 +83,8 @@ void AnimationBase::reset()
|
||||
{
|
||||
curr->reset();
|
||||
}
|
||||
|
||||
TrackObject::reset();
|
||||
} // reset
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@ -47,6 +47,7 @@
|
||||
*/
|
||||
CutsceneWorld::CutsceneWorld() : World()
|
||||
{
|
||||
m_time_at_second_reset = 0.0f;
|
||||
m_aborted = false;
|
||||
WorldStatus::setClockMode(CLOCK_NONE);
|
||||
m_use_highscores = false;
|
||||
@ -59,6 +60,7 @@ CutsceneWorld::CutsceneWorld() : World()
|
||||
*/
|
||||
void CutsceneWorld::init()
|
||||
{
|
||||
m_second_reset = false;
|
||||
World::init();
|
||||
|
||||
dynamic_cast<CutsceneGUI*>(m_race_gui)->setFadeLevel(1.0f);
|
||||
@ -189,6 +191,8 @@ void CutsceneWorld::update(float dt)
|
||||
|
||||
if (m_time < 0.0001f)
|
||||
{
|
||||
//printf("INITIAL TIME for CutsceneWorld\n");
|
||||
|
||||
PtrVector<TrackObject>& objects = m_track->getTrackObjectManager()->getObjects();
|
||||
TrackObject* curr;
|
||||
for_in(curr, objects)
|
||||
@ -196,7 +200,20 @@ void CutsceneWorld::update(float dt)
|
||||
curr->reset();
|
||||
}
|
||||
}
|
||||
|
||||
else if (m_second_reset)
|
||||
{
|
||||
m_second_reset = false;
|
||||
|
||||
PtrVector<TrackObject>& objects = m_track->getTrackObjectManager()->getObjects();
|
||||
TrackObject* curr;
|
||||
for_in(curr, objects)
|
||||
{
|
||||
curr->reset();
|
||||
}
|
||||
|
||||
m_time_at_second_reset = m_time;
|
||||
}
|
||||
|
||||
m_time += dt;
|
||||
|
||||
if (m_time < 2.0f)
|
||||
@ -212,7 +229,7 @@ void CutsceneWorld::update(float dt)
|
||||
dynamic_cast<CutsceneGUI*>(m_race_gui)->setFadeLevel(0.0f);
|
||||
}
|
||||
|
||||
float currFrame = m_time * 25.0f; // We assume 25 FPS
|
||||
float currFrame = (m_time - m_time_at_second_reset)* 25.0f - 1.0f; // We assume 25 FPS. Irrlicht starts at frame 0.
|
||||
|
||||
//printf("Estimated current frame : %f\n", currFrame);
|
||||
|
||||
|
@ -45,6 +45,12 @@ class CutsceneWorld : public World
|
||||
float m_duration;
|
||||
bool m_aborted;
|
||||
|
||||
/** monkey tricks to get the animations in sync with irrlicht. we reset the time
|
||||
* after all is loaded and it's running withotu delays
|
||||
*/
|
||||
bool m_second_reset;
|
||||
float m_time_at_second_reset;
|
||||
|
||||
void abortCutscene()
|
||||
{
|
||||
if (m_time < m_duration - 2.0f) m_duration = m_time + 2.0f;
|
||||
|
@ -242,6 +242,7 @@ TrackObject::TrackObject(const XMLNode &xml_node)
|
||||
scene::IAnimatedMeshSceneNode *node =
|
||||
irr_driver->addAnimatedMesh((scene::IAnimatedMesh*)m_mesh);
|
||||
m_node = node;
|
||||
node->setName(model_name.c_str());
|
||||
|
||||
m_frame_start = node->getStartFrame();
|
||||
xml_node.get("frame-start", &m_frame_start);
|
||||
|
Loading…
x
Reference in New Issue
Block a user