mirror of
https://github.com/OpenMW/openmw.git
synced 2025-12-19 11:23:07 +00:00
FEAT: Add a binding for passing time in world
This commit is contained in:
parent
ebfe91a108
commit
209b7fd5c6
8 changed files with 30 additions and 1 deletions
|
|
@ -309,6 +309,7 @@ namespace MWBase
|
|||
virtual float getAngleToPlayer(const MWWorld::Ptr& ptr) const = 0;
|
||||
virtual MWMechanics::GreetingState getGreetingState(const MWWorld::Ptr& ptr) const = 0;
|
||||
virtual bool isTurningToPlayer(const MWWorld::Ptr& ptr) const = 0;
|
||||
virtual void fastForwardAi() const = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -210,6 +210,8 @@ namespace MWBase
|
|||
virtual void advanceTime(double hours, bool incremental = false) = 0;
|
||||
///< Advance in-game time.
|
||||
|
||||
virtual void fastForwardAi() const = 0;
|
||||
|
||||
virtual MWWorld::TimeStamp getTimeStamp() const = 0;
|
||||
///< Return current in-game time and number of day since new game start.
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,16 @@ namespace MWLua
|
|||
{
|
||||
using Misc::FiniteFloat;
|
||||
|
||||
MWWorld::DateTimeManager* timeManager = MWBase::Environment::get().getWorld()->getTimeManager();
|
||||
Misc::NotNullPtr<MWBase::World> world = MWBase::Environment::get().getWorld();
|
||||
MWWorld::DateTimeManager* timeManager = world->getTimeManager();
|
||||
|
||||
api["advanceTime"] = [context, world](const FiniteFloat hours) {
|
||||
if (hours <= 0.0f)
|
||||
throw std::runtime_error("Time may only be advanced forward");
|
||||
|
||||
world->advanceTime(hours);
|
||||
world->fastForwardAi();
|
||||
};
|
||||
|
||||
api["setGameTimeScale"] = [timeManager](const FiniteFloat scale) { timeManager->setGameTimeScale(scale); };
|
||||
api["setSimulationTimeScale"] = [context, timeManager](const FiniteFloat scale) {
|
||||
|
|
|
|||
|
|
@ -2071,4 +2071,9 @@ namespace MWMechanics
|
|||
{
|
||||
return mActors.isTurningToPlayer(ptr);
|
||||
}
|
||||
|
||||
void MechanicsManager::fastForwardAi() const
|
||||
{
|
||||
mActors.fastForwardAi();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -242,6 +242,7 @@ namespace MWMechanics
|
|||
float getAngleToPlayer(const MWWorld::Ptr& ptr) const override;
|
||||
GreetingState getGreetingState(const MWWorld::Ptr& ptr) const override;
|
||||
bool isTurningToPlayer(const MWWorld::Ptr& ptr) const override;
|
||||
void fastForwardAi() const override;
|
||||
|
||||
private:
|
||||
bool canCommitCrimeAgainst(const MWWorld::Ptr& victim, const MWWorld::Ptr& attacker);
|
||||
|
|
|
|||
|
|
@ -919,6 +919,11 @@ namespace MWWorld
|
|||
}
|
||||
}
|
||||
|
||||
void World::fastForwardAi() const
|
||||
{
|
||||
MWBase::Environment::get().getMechanicsManager()->fastForwardAi();
|
||||
}
|
||||
|
||||
TimeStamp World::getTimeStamp() const
|
||||
{
|
||||
return mTimeManager->getTimeStamp();
|
||||
|
|
|
|||
|
|
@ -309,6 +309,8 @@ namespace MWWorld
|
|||
void advanceTime(double hours, bool incremental = false) override;
|
||||
///< Advance in-game time.
|
||||
|
||||
void fastForwardAi() const override;
|
||||
|
||||
TimeStamp getTimeStamp() const override;
|
||||
///< Return current in-game time and number of day since new game start.
|
||||
|
||||
|
|
|
|||
|
|
@ -205,4 +205,8 @@
|
|||
-- core.sendGlobalEvent('SpawnVfx', {model = model, position = pos})
|
||||
--
|
||||
|
||||
---
|
||||
-- Advance the world time by a certain number of hours. This advances time, weather, and AI, but does not perform other functions associated with the passage of time, eg regeneration.
|
||||
-- @function [parent=#world] advanceTime
|
||||
|
||||
return nil
|
||||
|
|
|
|||
Loading…
Reference in a new issue