1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-11 06:40:34 +00:00

Don't clip out the group name from the textkeys

This commit is contained in:
Chris Robinson 2013-04-21 22:13:49 -07:00
parent 6c85d6763a
commit 7d59340ed6
2 changed files with 26 additions and 25 deletions

View File

@ -243,14 +243,16 @@ void Animation::calcAnimVelocity()
if(track && track->getNumKeyFrames() > 1) if(track && track->getNumKeyFrames() > 1)
{ {
const std::string loopstart = mCurrentGroup+": loop start";
const std::string loopstop = mCurrentGroup+": loop stop";
float loopstarttime = 0.0f; float loopstarttime = 0.0f;
float loopstoptime = mCurrentAnim->getLength(); float loopstoptime = mCurrentAnim->getLength();
NifOgre::TextKeyMap::const_iterator keyiter = mCurrentKeys->begin(); NifOgre::TextKeyMap::const_iterator keyiter = mCurrentKeys->begin();
while(keyiter != mCurrentKeys->end()) while(keyiter != mCurrentKeys->end())
{ {
if(keyiter->second == "loop start") if(keyiter->second == loopstart)
loopstarttime = keyiter->first; loopstarttime = keyiter->first;
else if(keyiter->second == "loop stop") else if(keyiter->second == loopstop)
{ {
loopstoptime = keyiter->first; loopstoptime = keyiter->first;
break; break;
@ -383,12 +385,6 @@ void Animation::reset(const std::string &start, const std::string &stop)
bool Animation::handleEvent(float time, const std::string &evt) 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) if(evt.compare(0, 7, "sound: ") == 0)
{ {
MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager(); MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager();
@ -402,21 +398,36 @@ bool Animation::handleEvent(float time, const std::string &evt)
return true; return true;
} }
if(evt == "loop stop") if(evt.compare(0, mCurrentGroup.size(), mCurrentGroup) != 0 ||
evt.compare(mCurrentGroup.size(), 2, ": ") != 0)
{
// Not ours
return true;
}
size_t off = mCurrentGroup.size()+2;
size_t len = evt.size() - off;
if(evt.compare(off, len, "start") == 0 || evt.compare(off, len, "loop start") == 0)
{
/* Do nothing */
return true;
}
if(evt.compare(off, len, "loop stop") == 0)
{ {
if(mLooping) if(mLooping)
{ {
reset("loop start"); reset(mCurrentGroup+": loop start");
if(mCurrentTime >= time) if(mCurrentTime >= time)
return false; return false;
return true; return true;
} }
} }
else if(evt == "stop") else if(evt.compare(off, len, "stop") == 0)
{ {
if(mLooping) if(mLooping)
{ {
reset("loop start"); reset(mCurrentGroup+": loop start");
if(mCurrentTime >= time) if(mCurrentTime >= time)
return false; return false;
return true; return true;
@ -424,7 +435,7 @@ bool Animation::handleEvent(float time, const std::string &evt)
// fall-through // fall-through
} }
if(mController) if(mController)
mController->markerEvent(time, evt); mController->markerEvent(time, evt.substr(off));
return true; return true;
} }
@ -455,7 +466,7 @@ void Animation::play(const std::string &groupname, const std::string &start, con
if(!found) if(!found)
throw std::runtime_error("Failed to find animation "+groupname); throw std::runtime_error("Failed to find animation "+groupname);
reset(start, stop); reset(mCurrentGroup+": "+start, mCurrentGroup+": "+stop);
setLooping(loop); setLooping(loop);
mPlaying = true; mPlaying = true;
} }

View File

@ -282,17 +282,7 @@ void NIFSkeletonLoader::loadResource(Ogre::Resource *resource)
buildAnimation(skel, currentgroup, ctrls, targets, keyiter->first, lastkeyiter->first); buildAnimation(skel, currentgroup, ctrls, targets, keyiter->first, lastkeyiter->first);
TextKeyMap::const_iterator insiter(keyiter); TextKeyMap groupkeys(keyiter, ++lastkeyiter);
TextKeyMap groupkeys;
do {
sep = insiter->second.find(':');
if(sep == currentgroup.length() && insiter->second.compare(0, sep, currentgroup) == 0)
groupkeys.insert(std::make_pair(insiter->first, insiter->second.substr(sep+2)));
else if((sep == sizeof("soundgen")-1 && insiter->second.compare(0, sep, "soundgen") == 0) ||
(sep == sizeof("sound")-1 && insiter->second.compare(0, sep, "sound") == 0))
groupkeys.insert(std::make_pair(insiter->first, insiter->second));
} while(insiter++ != lastkeyiter);
bindings.setUserAny(std::string(sTextKeyExtraDataID)+"@"+currentgroup, Ogre::Any(groupkeys)); bindings.setUserAny(std::string(sTextKeyExtraDataID)+"@"+currentgroup, Ogre::Any(groupkeys));
} }
} }