1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-12-19 09:23:18 +00:00

FEAT: Add a binding for passing time in world

This commit is contained in:
Dave Corley 2025-10-07 11:24:13 -05:00 committed by Alexei Kotov
parent ebfe91a108
commit 209b7fd5c6
8 changed files with 30 additions and 1 deletions

View file

@ -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;
};
}

View file

@ -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.

View file

@ -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) {

View file

@ -2071,4 +2071,9 @@ namespace MWMechanics
{
return mActors.isTurningToPlayer(ptr);
}
void MechanicsManager::fastForwardAi() const
{
mActors.fastForwardAi();
}
}

View file

@ -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);

View file

@ -919,6 +919,11 @@ namespace MWWorld
}
}
void World::fastForwardAi() const
{
MWBase::Environment::get().getMechanicsManager()->fastForwardAi();
}
TimeStamp World::getTimeStamp() const
{
return mTimeManager->getTimeStamp();

View file

@ -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.

View file

@ -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