1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-07-03 08:11:35 +00:00

Lights extinguish underwater

This commit is contained in:
Alex "rainChu" Haddad 2013-10-15 20:56:42 -04:00
parent 30ee3c5cf6
commit 2643214ca6
2 changed files with 31 additions and 19 deletions

View file

@ -201,10 +201,8 @@ namespace MWClass
{ {
ensureCustomData(ptr); ensureCustomData(ptr);
float &timeCharge = dynamic_cast<CustomData&> (*ptr.getRefData().getCustomData()).mTime; float &timeRemaining = dynamic_cast<CustomData&> (*ptr.getRefData().getCustomData()).mTime;
timeRemaining = duration;
// TODO time it in vanilla, see if 1 second is really one unit.
timeCharge = duration;
} }
float Light::getRemainingUsageTime (const MWWorld::Ptr& ptr) const float Light::getRemainingUsageTime (const MWWorld::Ptr& ptr) const

View file

@ -44,10 +44,7 @@ namespace MWMechanics
if(!paused) if(!paused)
{ {
updateDrowning(ptr, duration); updateDrowning(ptr, duration);
updateEquippedLight(ptr, duration);
// Only update the light of the player.
if(ptr.getRefData().getHandle()=="player")
updateEquippedLight(ptr, duration);
} }
} }
@ -211,19 +208,36 @@ namespace MWMechanics
if(heldIter.getType() == MWWorld::ContainerStore::Type_Light) if(heldIter.getType() == MWWorld::ContainerStore::Type_Light)
{ {
// ... then use some "fuel" from the timer // Use time from the player's light
float timeRemaining = heldIter->getClass().getRemainingUsageTime(*heldIter); bool isPlayer = ptr.getRefData().getHandle()=="player";
if(isPlayer)
// If it's already -1, then it should be an infinite light.
// TODO see what happens for other negative values.
if(timeRemaining >= 0.0f)
{ {
timeRemaining -= duration; float timeRemaining = heldIter->getClass().getRemainingUsageTime(*heldIter);
if(timeRemaining > 0.0f) // -1 is infinite light source. Other negative values are treated as 0.
heldIter->getClass().setRemainingUsageTime(*heldIter, timeRemaining); if(timeRemaining != -1.0f)
else {
heldIter->getRefData().setCount(0); // remove it timeRemaining -= duration;
if(timeRemaining > 0.0f)
heldIter->getClass().setRemainingUsageTime(*heldIter, timeRemaining);
else
{
heldIter->getRefData().setCount(0); // remove it
return;
}
}
}
// Both NPC and player lights extinguish in water.
if(MWBase::Environment::get().getWorld()->isSwimming(ptr))
{
heldIter->getRefData().setCount(0); // remove it
// ...But, only the player makes a sound.
if(isPlayer)
MWBase::Environment::get().getSoundManager()->playSound("torch out",
1.0, 1.0, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_NoEnv);
} }
} }
} }