1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-16 21:59:55 +00:00

Fix update of fatigue display

This commit is contained in:
Allofich 2016-06-27 21:17:06 +09:00
parent d2d201cf6d
commit 19a20a6871
2 changed files with 23 additions and 15 deletions

View file

@ -310,7 +310,7 @@ namespace MWMechanics
} }
MechanicsManager::MechanicsManager() MechanicsManager::MechanicsManager()
: mWatchedStatsEmpty (true), mUpdatePlayer (true), mClassSelected (false), : mWatchedTimeToStartDrowning(0), mWatchedStatsEmpty (true), mUpdatePlayer (true), mClassSelected (false),
mRaceSelected (false), mAI(true) mRaceSelected (false), mAI(true)
{ {
//buildPlayer no longer here, needs to be done explicitely after all subsystems are up and running //buildPlayer no longer here, needs to be done explicitely after all subsystems are up and running
@ -372,40 +372,40 @@ namespace MWMechanics
const MWMechanics::NpcStats &stats = mWatched.getClass().getNpcStats(mWatched); const MWMechanics::NpcStats &stats = mWatched.getClass().getNpcStats(mWatched);
for(int i = 0;i < ESM::Attribute::Length;++i) for(int i = 0;i < ESM::Attribute::Length;++i)
{ {
if(stats.getAttribute(i) != mWatchedStats.getAttribute(i) || mWatchedStatsEmpty) if(stats.getAttribute(i) != mWatchedAttributes[i] || mWatchedStatsEmpty)
{ {
std::stringstream attrname; std::stringstream attrname;
attrname << "AttribVal"<<(i+1); attrname << "AttribVal"<<(i+1);
mWatchedStats.setAttribute(i, stats.getAttribute(i)); mWatchedAttributes[i] = stats.getAttribute(i);
winMgr->setValue(attrname.str(), stats.getAttribute(i)); winMgr->setValue(attrname.str(), stats.getAttribute(i));
} }
} }
if(stats.getHealth() != mWatchedStats.getHealth() || mWatchedStatsEmpty) if(stats.getHealth() != mWatchedHealth || mWatchedStatsEmpty)
{ {
static const std::string hbar("HBar"); static const std::string hbar("HBar");
mWatchedStats.setHealth(stats.getHealth()); mWatchedHealth = stats.getHealth();
winMgr->setValue(hbar, stats.getHealth()); winMgr->setValue(hbar, stats.getHealth());
} }
if(stats.getMagicka() != mWatchedStats.getMagicka() || mWatchedStatsEmpty) if(stats.getMagicka() != mWatchedMagicka || mWatchedStatsEmpty)
{ {
static const std::string mbar("MBar"); static const std::string mbar("MBar");
mWatchedStats.setMagicka(stats.getMagicka()); mWatchedMagicka = stats.getMagicka();
winMgr->setValue(mbar, stats.getMagicka()); winMgr->setValue(mbar, stats.getMagicka());
} }
if(stats.getFatigue() != mWatchedStats.getFatigue() || mWatchedStatsEmpty) if(stats.getFatigue() != mWatchedFatigue || mWatchedStatsEmpty)
{ {
static const std::string fbar("FBar"); static const std::string fbar("FBar");
mWatchedStats.setFatigue(stats.getFatigue()); mWatchedFatigue = stats.getFatigue();
winMgr->setValue(fbar, stats.getFatigue()); winMgr->setValue(fbar, stats.getFatigue());
} }
if(stats.getTimeToStartDrowning() != mWatchedStats.getTimeToStartDrowning()) if(stats.getTimeToStartDrowning() != mWatchedTimeToStartDrowning)
{ {
const float fHoldBreathTime = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>() const float fHoldBreathTime = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>()
.find("fHoldBreathTime")->getFloat(); .find("fHoldBreathTime")->getFloat();
mWatchedStats.setTimeToStartDrowning(stats.getTimeToStartDrowning()); mWatchedTimeToStartDrowning = stats.getTimeToStartDrowning();
if(stats.getTimeToStartDrowning() >= fHoldBreathTime) if(stats.getTimeToStartDrowning() >= fHoldBreathTime)
winMgr->setDrowningBarVisibility(false); winMgr->setDrowningBarVisibility(false);
else else
@ -420,10 +420,10 @@ namespace MWMechanics
//Loop over ESM::Skill::SkillEnum //Loop over ESM::Skill::SkillEnum
for(int i = 0; i < ESM::Skill::Length; ++i) for(int i = 0; i < ESM::Skill::Length; ++i)
{ {
if(stats.getSkill(i) != mWatchedStats.getSkill(i) || mWatchedStatsEmpty) if(stats.getSkill(i) != mWatchedSkills[i] || mWatchedStatsEmpty)
{ {
update = true; update = true;
mWatchedStats.getSkill(i) = stats.getSkill(i); mWatchedSkills[i] = stats.getSkill(i);
winMgr->setValue((ESM::Skill::SkillEnum)i, stats.getSkill(i)); winMgr->setValue((ESM::Skill::SkillEnum)i, stats.getSkill(i));
} }
} }
@ -1576,7 +1576,6 @@ namespace MWMechanics
if (stats.isDead()) if (stats.isDead())
{ {
MWMechanics::DynamicStat<float> stat (stats.getHealth()); MWMechanics::DynamicStat<float> stat (stats.getHealth());
if (stat.getModified()<1) if (stat.getModified()<1)
{ {
stat.setModified(1, 0); stat.setModified(1, 0);

View file

@ -20,7 +20,16 @@ namespace MWMechanics
class MechanicsManager : public MWBase::MechanicsManager class MechanicsManager : public MWBase::MechanicsManager
{ {
MWWorld::Ptr mWatched; MWWorld::Ptr mWatched;
NpcStats mWatchedStats;
AttributeValue mWatchedAttributes[8];
SkillValue mWatchedSkills[27];
DynamicStat<float> mWatchedHealth;
DynamicStat<float> mWatchedMagicka;
DynamicStat<float> mWatchedFatigue;
float mWatchedTimeToStartDrowning;
bool mWatchedStatsEmpty; bool mWatchedStatsEmpty;
bool mUpdatePlayer; bool mUpdatePlayer;
bool mClassSelected; bool mClassSelected;