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:
parent
30ee3c5cf6
commit
2643214ca6
2 changed files with 31 additions and 19 deletions
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue