mirror of
https://github.com/OpenMW/openmw.git
synced 2025-12-19 17: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 float getAngleToPlayer(const MWWorld::Ptr& ptr) const = 0;
|
||||||
virtual MWMechanics::GreetingState getGreetingState(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 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;
|
virtual void advanceTime(double hours, bool incremental = false) = 0;
|
||||||
///< Advance in-game time.
|
///< Advance in-game time.
|
||||||
|
|
||||||
|
virtual void fastForwardAi() const = 0;
|
||||||
|
|
||||||
virtual MWWorld::TimeStamp getTimeStamp() const = 0;
|
virtual MWWorld::TimeStamp getTimeStamp() const = 0;
|
||||||
///< Return current in-game time and number of day since new game start.
|
///< Return current in-game time and number of day since new game start.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,16 @@ namespace MWLua
|
||||||
{
|
{
|
||||||
using Misc::FiniteFloat;
|
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["setGameTimeScale"] = [timeManager](const FiniteFloat scale) { timeManager->setGameTimeScale(scale); };
|
||||||
api["setSimulationTimeScale"] = [context, timeManager](const FiniteFloat scale) {
|
api["setSimulationTimeScale"] = [context, timeManager](const FiniteFloat scale) {
|
||||||
|
|
|
||||||
|
|
@ -2071,4 +2071,9 @@ namespace MWMechanics
|
||||||
{
|
{
|
||||||
return mActors.isTurningToPlayer(ptr);
|
return mActors.isTurningToPlayer(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MechanicsManager::fastForwardAi() const
|
||||||
|
{
|
||||||
|
mActors.fastForwardAi();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -242,6 +242,7 @@ namespace MWMechanics
|
||||||
float getAngleToPlayer(const MWWorld::Ptr& ptr) const override;
|
float getAngleToPlayer(const MWWorld::Ptr& ptr) const override;
|
||||||
GreetingState getGreetingState(const MWWorld::Ptr& ptr) const override;
|
GreetingState getGreetingState(const MWWorld::Ptr& ptr) const override;
|
||||||
bool isTurningToPlayer(const MWWorld::Ptr& ptr) const override;
|
bool isTurningToPlayer(const MWWorld::Ptr& ptr) const override;
|
||||||
|
void fastForwardAi() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool canCommitCrimeAgainst(const MWWorld::Ptr& victim, const MWWorld::Ptr& attacker);
|
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
|
TimeStamp World::getTimeStamp() const
|
||||||
{
|
{
|
||||||
return mTimeManager->getTimeStamp();
|
return mTimeManager->getTimeStamp();
|
||||||
|
|
|
||||||
|
|
@ -309,6 +309,8 @@ namespace MWWorld
|
||||||
void advanceTime(double hours, bool incremental = false) override;
|
void advanceTime(double hours, bool incremental = false) override;
|
||||||
///< Advance in-game time.
|
///< Advance in-game time.
|
||||||
|
|
||||||
|
void fastForwardAi() const override;
|
||||||
|
|
||||||
TimeStamp getTimeStamp() const override;
|
TimeStamp getTimeStamp() const override;
|
||||||
///< Return current in-game time and number of day since new game start.
|
///< Return current in-game time and number of day since new game start.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -205,4 +205,8 @@
|
||||||
-- core.sendGlobalEvent('SpawnVfx', {model = model, position = pos})
|
-- 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
|
return nil
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue