mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-26 09:35:28 +00:00
Use a separate method to handle animation events
This commit is contained in:
parent
d77d035d3a
commit
8e59ea4941
@ -346,6 +346,54 @@ void Animation::reset(const std::string &start, const std::string &stop)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Animation::handleEvent(float time, const std::string &evt)
|
||||||
|
{
|
||||||
|
if(evt == "start" || evt == "loop start")
|
||||||
|
{
|
||||||
|
/* Do nothing */
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(evt.compare(0, 7, "sound: ") == 0)
|
||||||
|
{
|
||||||
|
MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager();
|
||||||
|
sndMgr->playSound3D(mPtr, evt.substr(7), 1.0f, 1.0f);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(evt.compare(0, 10, "soundgen: ") == 0)
|
||||||
|
{
|
||||||
|
// FIXME: Lookup the SoundGen (SNDG) for the specified sound that corresponds
|
||||||
|
// to this actor type
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(evt == "loop stop")
|
||||||
|
{
|
||||||
|
if(mLooping)
|
||||||
|
{
|
||||||
|
reset("loop start", "");
|
||||||
|
if(mCurrentTime >= time)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(evt == "stop")
|
||||||
|
{
|
||||||
|
if(mLooping)
|
||||||
|
{
|
||||||
|
reset("loop start", "");
|
||||||
|
if(mCurrentTime >= time)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// fall-through
|
||||||
|
}
|
||||||
|
if(mController)
|
||||||
|
mController->markerEvent(time, evt);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Animation::play(const std::string &groupname, const std::string &start, const std::string &stop, bool loop)
|
void Animation::play(const std::string &groupname, const std::string &start, const std::string &stop, bool loop)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
@ -402,48 +450,8 @@ Ogre::Vector3 Animation::runAnimation(float timepassed)
|
|||||||
|
|
||||||
timepassed = targetTime - time;
|
timepassed = targetTime - time;
|
||||||
|
|
||||||
if(evt == "start" || evt == "loop start")
|
if(!handleEvent(time, evt))
|
||||||
{
|
break;
|
||||||
/* Do nothing */
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(evt.compare(0, 7, "sound: ") == 0)
|
|
||||||
{
|
|
||||||
MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager();
|
|
||||||
sndMgr->playSound3D(mPtr, evt.substr(7), 1.0f, 1.0f);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if(evt.compare(0, 10, "soundgen: ") == 0)
|
|
||||||
{
|
|
||||||
// FIXME: Lookup the SoundGen (SNDG) for the specified sound that corresponds
|
|
||||||
// to this actor type
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(evt == "loop stop")
|
|
||||||
{
|
|
||||||
if(mLooping)
|
|
||||||
{
|
|
||||||
reset("loop start", "");
|
|
||||||
if(mCurrentTime >= time)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if(evt == "stop")
|
|
||||||
{
|
|
||||||
if(mLooping)
|
|
||||||
{
|
|
||||||
reset("loop start", "");
|
|
||||||
if(mCurrentTime >= time)
|
|
||||||
break;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// fall-through
|
|
||||||
}
|
|
||||||
if(mController)
|
|
||||||
mController->markerEvent(time, evt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return movement;
|
return movement;
|
||||||
|
@ -59,6 +59,8 @@ protected:
|
|||||||
*/
|
*/
|
||||||
void reset(const std::string &start, const std::string &stop);
|
void reset(const std::string &start, const std::string &stop);
|
||||||
|
|
||||||
|
bool handleEvent(float time, const std::string &evt);
|
||||||
|
|
||||||
/* Specifies a list of skeleton names to use as animation sources. */
|
/* Specifies a list of skeleton names to use as animation sources. */
|
||||||
void setAnimationSources(const std::vector<std::string> &names);
|
void setAnimationSources(const std::vector<std::string> &names);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user