forked from mirror/openmw-tes3mp
Merge pull request #1258 from akortunov/drownfix
Fixed drowning widget initialization with non-default "fHoldBreathTime" GMST value
This commit is contained in:
commit
50f3794d12
3 changed files with 15 additions and 5 deletions
|
@ -803,6 +803,12 @@ namespace MWMechanics
|
|||
CharacterController* ctrl = it->second->getCharacterController();
|
||||
|
||||
NpcStats &stats = ptr.getClass().getNpcStats(ptr);
|
||||
|
||||
// When npc stats are just initialized, mTimeToStartDrowning == -1 and we should get value from GMST
|
||||
static const int fHoldBreathTime = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fHoldBreathTime")->getFloat();
|
||||
if (stats.getTimeToStartDrowning() == -1.f)
|
||||
stats.setTimeToStartDrowning(fHoldBreathTime);
|
||||
|
||||
MWBase::World *world = MWBase::Environment::get().getWorld();
|
||||
bool knockedOutUnderwater = (ctrl->isKnockedOut() && world->isUnderwater(ptr.getCell(), osg::Vec3f(ptr.getRefData().getPosition().asVec3())));
|
||||
if((world->isSubmerged(ptr) || knockedOutUnderwater)
|
||||
|
|
|
@ -328,12 +328,16 @@ namespace MWMechanics
|
|||
winMgr->setValue(fbar, stats.getFatigue());
|
||||
}
|
||||
|
||||
if(stats.getTimeToStartDrowning() != mWatchedTimeToStartDrowning)
|
||||
float timeToDrown = stats.getTimeToStartDrowning();
|
||||
|
||||
if(timeToDrown != mWatchedTimeToStartDrowning)
|
||||
{
|
||||
const float fHoldBreathTime = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>()
|
||||
static const float fHoldBreathTime = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>()
|
||||
.find("fHoldBreathTime")->getFloat();
|
||||
mWatchedTimeToStartDrowning = stats.getTimeToStartDrowning();
|
||||
if(stats.getTimeToStartDrowning() >= fHoldBreathTime)
|
||||
|
||||
mWatchedTimeToStartDrowning = timeToDrown;
|
||||
|
||||
if(timeToDrown >= fHoldBreathTime || timeToDrown == -1.0) // -1.0 is a special value during initialization
|
||||
winMgr->setDrowningBarVisibility(false);
|
||||
else
|
||||
{
|
||||
|
|
|
@ -30,7 +30,7 @@ MWMechanics::NpcStats::NpcStats()
|
|||
, mBounty(0)
|
||||
, mWerewolfKills (0)
|
||||
, mLevelProgress(0)
|
||||
, mTimeToStartDrowning(20.0)
|
||||
, mTimeToStartDrowning(-1.0) // set breath to special value, it will be replaced during actor update
|
||||
, mIsWerewolf(false)
|
||||
{
|
||||
mSkillIncreases.resize (ESM::Attribute::Length, 0);
|
||||
|
|
Loading…
Reference in a new issue