From: <au...@us...> - 2012-08-23 01:53:02
|
Revision: 11516 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=11516&view=rev Author: auria Date: 2012-08-23 01:52:55 +0000 (Thu, 23 Aug 2012) Log Message: ----------- Work on end cutscene. Code to start particles based on a condition Modified Paths: -------------- main/trunk/src/animations/animation_base.cpp main/trunk/src/modes/cutscene_world.cpp main/trunk/src/modes/cutscene_world.hpp main/trunk/src/tracks/track_object.cpp main/trunk/src/tracks/track_object.hpp Added Paths: ----------- main/trunk/data/gfx/smoke_short_burst.xml main/trunk/data/tracks/endcutscene/ main/trunk/data/tracks/endcutscene/Gnu.b3d main/trunk/data/tracks/endcutscene/Rope.b3d main/trunk/data/tracks/endcutscene/Tux.b3d main/trunk/data/tracks/endcutscene/WallPart.b3d main/trunk/data/tracks/endcutscene/Wheel1.b3d main/trunk/data/tracks/endcutscene/Wheel2.b3d main/trunk/data/tracks/endcutscene/Wheel3.b3d main/trunk/data/tracks/endcutscene/Wheel4.b3d main/trunk/data/tracks/endcutscene/castelwall.jpg main/trunk/data/tracks/endcutscene/chain2.png main/trunk/data/tracks/endcutscene/endcutscene_track.b3d main/trunk/data/tracks/endcutscene/gnu.png main/trunk/data/tracks/endcutscene/materials.xml main/trunk/data/tracks/endcutscene/metal.jpg main/trunk/data/tracks/endcutscene/ribbed_steel.jpg main/trunk/data/tracks/endcutscene/rope.jpg main/trunk/data/tracks/endcutscene/scene.xml main/trunk/data/tracks/endcutscene/track.xml main/trunk/data/tracks/endcutscene/tux_body.png main/trunk/data/tracks/endcutscene/tuxkart.png Added: main/trunk/data/gfx/smoke_short_burst.xml =================================================================== (Binary files differ) Property changes on: main/trunk/data/gfx/smoke_short_burst.xml ___________________________________________________________________ Added: svn:mime-type + application/xml Added: main/trunk/data/tracks/endcutscene/Gnu.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/Gnu.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/endcutscene/Rope.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/Rope.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/endcutscene/Tux.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/Tux.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/endcutscene/WallPart.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/WallPart.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/endcutscene/Wheel1.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/Wheel1.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/endcutscene/Wheel2.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/Wheel2.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/endcutscene/Wheel3.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/Wheel3.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/endcutscene/Wheel4.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/Wheel4.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/endcutscene/castelwall.jpg =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/castelwall.jpg ___________________________________________________________________ Added: svn:mime-type + image/jpeg Added: main/trunk/data/tracks/endcutscene/chain2.png =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/chain2.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: main/trunk/data/tracks/endcutscene/endcutscene_track.b3d =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/endcutscene_track.b3d ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: main/trunk/data/tracks/endcutscene/gnu.png =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/gnu.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: main/trunk/data/tracks/endcutscene/materials.xml =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/materials.xml ___________________________________________________________________ Added: svn:mime-type + application/xml Added: main/trunk/data/tracks/endcutscene/metal.jpg =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/metal.jpg ___________________________________________________________________ Added: svn:mime-type + image/jpeg Added: main/trunk/data/tracks/endcutscene/ribbed_steel.jpg =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/ribbed_steel.jpg ___________________________________________________________________ Added: svn:mime-type + image/jpeg Added: main/trunk/data/tracks/endcutscene/rope.jpg =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/rope.jpg ___________________________________________________________________ Added: svn:mime-type + image/jpeg Added: main/trunk/data/tracks/endcutscene/scene.xml =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/scene.xml ___________________________________________________________________ Added: svn:mime-type + application/xml Added: main/trunk/data/tracks/endcutscene/track.xml =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/track.xml ___________________________________________________________________ Added: svn:mime-type + application/xml Added: main/trunk/data/tracks/endcutscene/tux_body.png =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/tux_body.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: main/trunk/data/tracks/endcutscene/tuxkart.png =================================================================== (Binary files differ) Property changes on: main/trunk/data/tracks/endcutscene/tuxkart.png ___________________________________________________________________ Added: svn:mime-type + image/png Modified: main/trunk/src/animations/animation_base.cpp =================================================================== --- main/trunk/src/animations/animation_base.cpp 2012-08-23 01:52:32 UTC (rev 11515) +++ main/trunk/src/animations/animation_base.cpp 2012-08-23 01:52:55 UTC (rev 11516) @@ -93,6 +93,8 @@ */ void AnimationBase::update(float dt, Vec3 *xyz, Vec3 *hpr, Vec3 *scale) { + TrackObject::update(dt); + // Don't do anything if the animation is disabled if(!m_playing) return; m_current_time += dt; Modified: main/trunk/src/modes/cutscene_world.cpp =================================================================== --- main/trunk/src/modes/cutscene_world.cpp 2012-08-23 01:52:32 UTC (rev 11515) +++ main/trunk/src/modes/cutscene_world.cpp 2012-08-23 01:52:55 UTC (rev 11516) @@ -76,7 +76,7 @@ TrackObject* curr; for_in(curr, objects) { - if (curr->getType() == "sfx-emitter" && !curr->getTriggerCondition().empty()) + if (curr->getType() == "particle-emitter" && !curr->getTriggerCondition().empty()) { const std::string& condition = curr->getTriggerCondition(); @@ -92,6 +92,25 @@ } float FPS = 25.0f; // for now we assume the cutscene is saved at 25 FPS + m_particles_to_trigger[frame / FPS].push_back(curr); + } + } + else if (curr->getType() == "sfx-emitter" && !curr->getTriggerCondition().empty()) + { + const std::string& condition = curr->getTriggerCondition(); + + if (StringUtils::startsWith(condition, "frame ")) + { + std::string frameStr = condition.substr(6); // remove 'frame ' prefix + int frame; + + if (!StringUtils::fromString(frameStr, frame)) + { + fprintf(stderr, "[CutsceneWorld] Invalid condition '%s'\n", condition.c_str()); + continue; + } + + float FPS = 25.0f; // for now we assume the cutscene is saved at 25 FPS m_sounds_to_trigger[frame / FPS].push_back(curr); } else if (StringUtils::startsWith(condition, "until ")) @@ -153,6 +172,17 @@ */ void CutsceneWorld::update(float dt) { + /* + { + PtrVector<TrackObject>& objects = m_track->getTrackObjectManager()->getObjects(); + TrackObject* curr; + for_in(curr, objects) + { + printf("* %s\n", curr->getType().c_str()); + } + } + **/ + m_time += dt; if (m_time < 2.0f) @@ -168,7 +198,6 @@ dynamic_cast<CutsceneGUI*>(m_race_gui)->setFadeLevel(0.0f); } - float currFrame = m_time * 25.0f; // We assume 25 FPS const std::vector<Subtitle>& subtitles = m_track->getSubtitles(); @@ -232,9 +261,27 @@ } } + for (std::map<float, std::vector<TrackObject*> >::iterator it = m_particles_to_trigger.begin(); + it != m_particles_to_trigger.end(); ) + { + if (m_time >= it->first) + { + std::vector<TrackObject*> objects = it->second; + for (unsigned int i = 0; i < objects.size(); i++) + { + objects[i]->triggerParticles(); + } + m_particles_to_trigger.erase(it++); + } + else + { + it++; + } + } + for (std::map<float, std::vector<TrackObject*> >::iterator it = m_sounds_to_stop.begin(); it != m_sounds_to_stop.end(); ) - { + { if (m_time >= it->first) { std::vector<TrackObject*> objects = it->second; @@ -248,7 +295,7 @@ { it++; } - } + } } // update //----------------------------------------------------------------------------- Modified: main/trunk/src/modes/cutscene_world.hpp =================================================================== --- main/trunk/src/modes/cutscene_world.hpp 2012-08-23 01:52:32 UTC (rev 11515) +++ main/trunk/src/modes/cutscene_world.hpp 2012-08-23 01:52:55 UTC (rev 11516) @@ -40,6 +40,7 @@ std::map<float, std::vector<TrackObject*> > m_sounds_to_trigger; std::map<float, std::vector<TrackObject*> > m_sounds_to_stop; + std::map<float, std::vector<TrackObject*> > m_particles_to_trigger; float m_duration; bool m_aborted; Modified: main/trunk/src/tracks/track_object.cpp =================================================================== --- main/trunk/src/tracks/track_object.cpp 2012-08-23 01:52:32 UTC (rev 11515) +++ main/trunk/src/tracks/track_object.cpp 2012-08-23 01:52:55 UTC (rev 11516) @@ -81,6 +81,7 @@ if (xml_node.getName() == "particle-emitter") { + m_type = "particle-emitter"; std::string path; irr::core::vector3df emitter_origin; xml_node.get("kind", &path); @@ -89,6 +90,8 @@ int clip_distance = -1; xml_node.get("clip_distance", &clip_distance); + xml_node.get("conditions", &m_trigger_condition); + try { ParticleKind* kind = ParticleKindManager::get()->getParticles( path.c_str() ); @@ -114,6 +117,11 @@ m_node = emitter->getNode(); // FIXME: this leaks m_emitter = emitter; } + + if (m_trigger_condition.size() > 0) + { + m_emitter->setCreationRateAbsolute(0.0f); + } } catch (std::runtime_error& e) { @@ -423,7 +431,6 @@ // ---------------------------------------------------------------------------- void TrackObject::update(float dt) { - if (m_sound != NULL) { // muting when too far is implemented manually since not supported by OpenAL @@ -431,6 +438,11 @@ // moved m_sound->position(m_init_xyz); } + + if (m_emitter != NULL) + { + m_emitter->update(dt); + } } // update // ---------------------------------------------------------------------------- @@ -477,3 +489,14 @@ // ---------------------------------------------------------------------------- +void TrackObject::triggerParticles() +{ + if (m_emitter != NULL) + { + m_emitter->setCreationRateAbsolute(1.0f); + m_emitter->setParticleType(m_emitter->getParticlesInfo()); + } +} + +// ---------------------------------------------------------------------------- + Modified: main/trunk/src/tracks/track_object.hpp =================================================================== --- main/trunk/src/tracks/track_object.hpp 2012-08-23 01:52:32 UTC (rev 11515) +++ main/trunk/src/tracks/track_object.hpp 2012-08-23 01:52:55 UTC (rev 11516) @@ -156,6 +156,7 @@ void triggerSound(bool loop=false); void stopSound(); + void triggerParticles(); virtual void onTriggerItemApproached(Item* who); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |