Rigs of Rods 2023.09
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Data Fields | Static Public Attributes | Private Member Functions | Private Attributes
RoR::ActorManager Class Reference

Builds and manages softbody actors (physics on background thread, networking) More...

#include <ActorManager.h>

Public Types

typedef std::vector< FreeForceFreeForceVec_t
 

Public Member Functions

 ActorManager ()
 
 ~ActorManager ()
 
void UpdateActors (ActorPtr player_actor)
 
void SyncWithSimThread ()
 
void UpdatePhysicsSimulation ()
 
void WakeUpAllActors ()
 
void SendAllActorsSleeping ()
 
void SetTrucksForcedAwake (bool forced)
 
bool AreTrucksForcedAwake () const
 
void SetSimulationSpeed (float speed)
 
float GetSimulationSpeed () const
 
bool IsSimulationPaused () const
 
void SetSimulationPaused (bool v)
 
float GetTotalTime () const
 
RoR::CmdKeyInertiaConfigGetInertiaConfig ()
 
void CleanUpSimulation ()
 Call this after simulation loop finishes.
 
void RepairActor (Collisions *collisions, const Ogre::String &inst, const Ogre::String &box, bool keepPosition=false)
 
void UpdateSleepingState (ActorPtr player_actor, float dt)
 
void UpdateInputEvents (float dt)
 
RigDef::DocumentPtr FetchActorDef (RoR::ActorSpawnRequest &rq)
 
void ExportActorDef (RigDef::DocumentPtr def, std::string filename, std::string rg_name)
 
bool LoadScene (Ogre::String filename)
 
bool SaveScene (Ogre::String filename)
 
void RestoreSavedState (ActorPtr actor, rapidjson::Value const &j_entry)
 
ActorPtrVecGetActors ()
 
std::vector< ActorPtrGetLocalActors ()
 
std::pair< ActorPtr, float > GetNearestActor (Ogre::Vector3 position)
 
bool AreActorsDirectlyLinked (const ActorPtr &a1, const ActorPtr &a2)
 
Actor lifetime
ActorPtr CreateNewActor (ActorSpawnRequest rq, RigDef::DocumentPtr def)
 
void DeleteActorInternal (ActorPtr actor)
 Do not call directly; use GameContext::DeleteActor()
 
Actor lookup
const ActorPtrGetActorById (ActorInstanceID_t actor_id)
 
const ActorPtrGetActorByNetworkLinks (int source_id, int stream_id)
 
ActorPtr FindActorInsideBox (Collisions *collisions, const Ogre::String &inst, const Ogre::String &box)
 
const ActorPtrFetchNextVehicleOnList (ActorPtr player, ActorPtr prev_player)
 
const ActorPtrFetchPreviousVehicleOnList (ActorPtr player, ActorPtr prev_player)
 
const ActorPtrFetchRescueVehicle ()
 
ActorInstanceID_t GetActorNextInstanceId ()
 Script proxy: game.getActorNextInstanceId()
 
Free forces
void AddFreeForce (FreeForceRequest *rq)
 
void ModifyFreeForce (FreeForceRequest *rq)
 
void RemoveFreeForce (FreeForceID_t id)
 
bool FindFreeForce (FreeForceID_t id, FreeForceVec_t::iterator &out_itor)
 
FreeForceID_t GetFreeForceNextId ()
 Script proxy: game.getFreeForceNextId()
 
FreeForceVec_tGetFreeForces ()
 
Networking
void HandleActorStreamData (std::vector< RoR::NetRecvPacket > packet)
 
unsigned long GetNetTime ()
 
int GetNetTimeOffset (int sourceid)
 
void UpdateNetTimeOffset (int sourceid, int offset)
 
void AddStreamMismatch (RoRnet::ActorStreamRegister *reg)
 
void RetryFailedStreamRegistrations (ScriptEventArgs *args)
 
void RequestSpawnRemoteActor (RoRnet::ActorStreamRegister *reg, const CacheEntryPtr &cache_entry, const RoRnet::UserInfo &userinfo, BitMask_t peeropts)
 
RoRnet::UiStreamsHealth CheckNetworkStreamsOk (int sourceid)
 
RoRnet::UiStreamsHealth CheckNetRemoteStreamsOk (int sourceid)
 

Data Fields

std::map< beam_t *, std::pair< ActorPtr, ActorPtr > > inter_actor_links
 

Static Public Attributes

static const ActorPtr ACTORPTR_NULL
 

Private Member Functions

bool CheckActorCollAabbIntersect (int a, int b)
 Returns whether or not the bounding boxes of truck a and truck b intersect. Based on the truck collision bounding boxes.
 
bool PredictActorCollAabbIntersect (int a, int b)
 Returns whether or not the bounding boxes of truck a and truck b might intersect during the next framestep. Based on the truck collision bounding boxes.
 
void RemoveStreamSource (int sourceid)
 
void RemoveStream (int sourceid, int streamid)
 
void RecursiveActivation (int j, std::vector< bool > &visited)
 
void ForwardCommands (ActorPtr source_actor)
 Fowards things to trailers.
 
void UpdateTruckFeatures (ActorPtr vehicle, float dt)
 
void CalcFreeForces ()
 Apply FreeForces - intentionally as a separate pass over all actors.
 

Private Attributes

std::map< int, std::set< int > > m_stream_mismatches
 Networking: A set of streams without a corresponding actor in the actor-array for each stream source.
 
std::vector< RoRnet::ActorStreamRegisterm_stream_mismatched_regs
 Networking: Remember mismatched stream regs to re-process after downloading the missing mods.
 
std::map< int, int > m_stream_time_offsets
 Networking: A network time offset for each stream source.
 
Ogre::Timer m_net_timer
 
ActorPtrVec m_actors
 Use MSG_SIM_{SPAWN/DELETE}_ACTOR_REQUESTED
 
ActorInstanceID_t m_actor_next_instance_id = 1
 Unique sequential ID for each Actor.
 
bool m_forced_awake = false
 disables sleep counters
 
int m_physics_steps = 0
 
float m_dt_remainder = 0.f
 Keeps track of the rounding error in the time step calculation.
 
float m_simulation_speed = 1.f
 slow motion < 1.0 < fast motion
 
float m_last_simulation_speed = 0.1f
 previously used time ratio between real time (evt.timeSinceLastFrame) and physics time ('dt' used in calcPhysics)
 
float m_simulation_time = 0.f
 Amount of time the physics simulation is going to be advanced.
 
bool m_simulation_paused = false
 
float m_total_sim_time = 0.f
 
FreeForceVec_t m_free_forces
 Global forces added ad-hoc by scripts.
 
FreeForceID_t m_free_force_next_id = 0
 Unique ID for each FreeForce.
 
std::unique_ptr< ThreadPoolm_sim_thread_pool
 
std::shared_ptr< Taskm_sim_task
 
RoR::CmdKeyInertiaConfig m_inertia_config
 

Detailed Description

Builds and manages softbody actors (physics on background thread, networking)

Definition at line 44 of file ActorManager.h.

Member Typedef Documentation

◆ FreeForceVec_t

Definition at line 48 of file ActorManager.h.

Constructor & Destructor Documentation

◆ ActorManager()

ActorManager::ActorManager ( )

Definition at line 68 of file ActorManager.cpp.

◆ ~ActorManager()

ActorManager::~ActorManager ( )

Definition at line 78 of file ActorManager.cpp.

Member Function Documentation

◆ AddFreeForce()

void ActorManager::AddFreeForce ( FreeForceRequest rq)

Definition at line 1856 of file ActorManager.cpp.

◆ AddStreamMismatch()

void ActorManager::AddStreamMismatch ( RoRnet::ActorStreamRegister reg)

Definition at line 593 of file ActorManager.cpp.

◆ AreActorsDirectlyLinked()

bool ActorManager::AreActorsDirectlyLinked ( const ActorPtr a1,
const ActorPtr a2 
)

Definition at line 822 of file ActorManager.cpp.

◆ AreTrucksForcedAwake()

bool RoR::ActorManager::AreTrucksForcedAwake ( ) const
inline

Definition at line 86 of file ActorManager.h.

◆ CalcFreeForces()

void ActorManager::CalcFreeForces ( )
private

Apply FreeForces - intentionally as a separate pass over all actors.

Definition at line 1611 of file ActorManager.cpp.

◆ CheckActorCollAabbIntersect()

bool ActorManager::CheckActorCollAabbIntersect ( int  a,
int  b 
)
private

Returns whether or not the bounding boxes of truck a and truck b intersect. Based on the truck collision bounding boxes.

Definition at line 668 of file ActorManager.cpp.

◆ CheckNetRemoteStreamsOk()

RoRnet::UiStreamsHealth ActorManager::CheckNetRemoteStreamsOk ( int  sourceid)

Definition at line 636 of file ActorManager.cpp.

◆ CheckNetworkStreamsOk()

RoRnet::UiStreamsHealth ActorManager::CheckNetworkStreamsOk ( int  sourceid)

Definition at line 617 of file ActorManager.cpp.

◆ CleanUpSimulation()

void ActorManager::CleanUpSimulation ( )

Call this after simulation loop finishes.

Definition at line 954 of file ActorManager.cpp.

◆ CreateNewActor()

ActorPtr ActorManager::CreateNewActor ( ActorSpawnRequest  rq,
RigDef::DocumentPtr  def 
)

Definition at line 83 of file ActorManager.cpp.

◆ DeleteActorInternal()

void ActorManager::DeleteActorInternal ( ActorPtr  actor)

Do not call directly; use GameContext::DeleteActor()

Definition at line 967 of file ActorManager.cpp.

◆ ExportActorDef()

void ActorManager::ExportActorDef ( RigDef::DocumentPtr  def,
std::string  filename,
std::string  rg_name 
)

Definition at line 1418 of file ActorManager.cpp.

◆ FetchActorDef()

RigDef::DocumentPtr ActorManager::FetchActorDef ( RoR::ActorSpawnRequest rq)

Definition at line 1339 of file ActorManager.cpp.

◆ FetchNextVehicleOnList()

const ActorPtr & ActorManager::FetchNextVehicleOnList ( ActorPtr  player,
ActorPtr  prev_player 
)

Definition at line 1048 of file ActorManager.cpp.

◆ FetchPreviousVehicleOnList()

const ActorPtr & ActorManager::FetchPreviousVehicleOnList ( ActorPtr  player,
ActorPtr  prev_player 
)

Definition at line 1073 of file ActorManager.cpp.

◆ FetchRescueVehicle()

const ActorPtr & ActorManager::FetchRescueVehicle ( )

Definition at line 1100 of file ActorManager.cpp.

◆ FindActorInsideBox()

ActorPtr ActorManager::FindActorInsideBox ( Collisions collisions,
const Ogre::String &  inst,
const Ogre::String &  box 
)

Definition at line 905 of file ActorManager.cpp.

◆ FindFreeForce()

bool ActorManager::FindFreeForce ( FreeForceID_t  id,
FreeForceVec_t::iterator &  out_itor 
)

Definition at line 1850 of file ActorManager.cpp.

◆ ForwardCommands()

void ActorManager::ForwardCommands ( ActorPtr  source_actor)
private

Fowards things to trailers.

Definition at line 751 of file ActorManager.cpp.

◆ GetActorById()

const ActorPtr & ActorManager::GetActorById ( ActorInstanceID_t  actor_id)

Definition at line 1228 of file ActorManager.cpp.

◆ GetActorByNetworkLinks()

const ActorPtr & ActorManager::GetActorByNetworkLinks ( int  source_id,
int  stream_id 
)

Definition at line 655 of file ActorManager.cpp.

◆ GetActorNextInstanceId()

ActorInstanceID_t RoR::ActorManager::GetActorNextInstanceId ( )
inline

Script proxy: game.getActorNextInstanceId()

Definition at line 67 of file ActorManager.h.

◆ GetActors()

ActorPtrVec & RoR::ActorManager::GetActors ( )
inline

Definition at line 127 of file ActorManager.h.

◆ GetFreeForceNextId()

FreeForceID_t RoR::ActorManager::GetFreeForceNextId ( )
inline

Script proxy: game.getFreeForceNextId()

Definition at line 76 of file ActorManager.h.

◆ GetFreeForces()

FreeForceVec_t & RoR::ActorManager::GetFreeForces ( )
inline

Definition at line 77 of file ActorManager.h.

◆ GetInertiaConfig()

RoR::CmdKeyInertiaConfig & RoR::ActorManager::GetInertiaConfig ( )
inline

Definition at line 92 of file ActorManager.h.

◆ GetLocalActors()

std::vector< ActorPtr > ActorManager::GetLocalActors ( )

Definition at line 1449 of file ActorManager.cpp.

◆ GetNearestActor()

std::pair< ActorPtr, float > ActorManager::GetNearestActor ( Ogre::Vector3  position)

Definition at line 938 of file ActorManager.cpp.

◆ GetNetTime()

unsigned long RoR::ActorManager::GetNetTime ( )
inline

Definition at line 111 of file ActorManager.h.

◆ GetNetTimeOffset()

int ActorManager::GetNetTimeOffset ( int  sourceid)

Definition at line 599 of file ActorManager.cpp.

◆ GetSimulationSpeed()

float RoR::ActorManager::GetSimulationSpeed ( ) const
inline

Definition at line 88 of file ActorManager.h.

◆ GetTotalTime()

float RoR::ActorManager::GetTotalTime ( ) const
inline

Definition at line 91 of file ActorManager.h.

◆ HandleActorStreamData()

void ActorManager::HandleActorStreamData ( std::vector< RoR::NetRecvPacket packet)

Definition at line 444 of file ActorManager.cpp.

◆ IsSimulationPaused()

bool RoR::ActorManager::IsSimulationPaused ( ) const
inline

Definition at line 89 of file ActorManager.h.

◆ LoadScene()

bool ActorManager::LoadScene ( Ogre::String  filename)

Definition at line 240 of file Savegame.cpp.

◆ ModifyFreeForce()

void ActorManager::ModifyFreeForce ( FreeForceRequest rq)

Definition at line 1875 of file ActorManager.cpp.

◆ PredictActorCollAabbIntersect()

bool ActorManager::PredictActorCollAabbIntersect ( int  a,
int  b 
)
private

Returns whether or not the bounding boxes of truck a and truck b might intersect during the next framestep. Based on the truck collision bounding boxes.

Definition at line 697 of file ActorManager.cpp.

◆ RecursiveActivation()

void ActorManager::RecursiveActivation ( int  j,
std::vector< bool > &  visited 
)
private

Definition at line 726 of file ActorManager.cpp.

◆ RemoveFreeForce()

void ActorManager::RemoveFreeForce ( FreeForceID_t  id)

Definition at line 1893 of file ActorManager.cpp.

◆ RemoveStream()

void ActorManager::RemoveStream ( int  sourceid,
int  streamid 
)
private

Definition at line 378 of file ActorManager.cpp.

◆ RemoveStreamSource()

void ActorManager::RemoveStreamSource ( int  sourceid)
private

Definition at line 357 of file ActorManager.cpp.

◆ RepairActor()

void ActorManager::RepairActor ( Collisions collisions,
const Ogre::String &  inst,
const Ogre::String &  box,
bool  keepPosition = false 
)

Definition at line 924 of file ActorManager.cpp.

◆ RequestSpawnRemoteActor()

void ActorManager::RequestSpawnRemoteActor ( RoRnet::ActorStreamRegister reg,
const CacheEntryPtr cache_entry,
const RoRnet::UserInfo userinfo,
BitMask_t  peeropts 
)

Definition at line 565 of file ActorManager.cpp.

◆ RestoreSavedState()

void ActorManager::RestoreSavedState ( ActorPtr  actor,
rapidjson::Value const &  j_entry 
)

Definition at line 787 of file Savegame.cpp.

◆ RetryFailedStreamRegistrations()

void ActorManager::RetryFailedStreamRegistrations ( ScriptEventArgs args)

Definition at line 400 of file ActorManager.cpp.

◆ SaveScene()

bool ActorManager::SaveScene ( Ogre::String  filename)

Definition at line 418 of file Savegame.cpp.

◆ SendAllActorsSleeping()

void ActorManager::SendAllActorsSleeping ( )

Definition at line 893 of file ActorManager.cpp.

◆ SetSimulationPaused()

void RoR::ActorManager::SetSimulationPaused ( bool  v)
inline

Definition at line 90 of file ActorManager.h.

◆ SetSimulationSpeed()

void RoR::ActorManager::SetSimulationSpeed ( float  speed)
inline

Definition at line 87 of file ActorManager.h.

◆ SetTrucksForcedAwake()

void RoR::ActorManager::SetTrucksForcedAwake ( bool  forced)
inline

Definition at line 85 of file ActorManager.h.

◆ SyncWithSimThread()

void ActorManager::SyncWithSimThread ( )

Definition at line 1320 of file ActorManager.cpp.

◆ UpdateActors()

void ActorManager::UpdateActors ( ActorPtr  player_actor)

Definition at line 1112 of file ActorManager.cpp.

◆ UpdateInputEvents()

void ActorManager::UpdateInputEvents ( float  dt)

Definition at line 1460 of file ActorManager.cpp.

◆ UpdateNetTimeOffset()

void ActorManager::UpdateNetTimeOffset ( int  sourceid,
int  offset 
)

Definition at line 609 of file ActorManager.cpp.

◆ UpdatePhysicsSimulation()

void ActorManager::UpdatePhysicsSimulation ( )

Definition at line 1240 of file ActorManager.cpp.

◆ UpdateSleepingState()

void ActorManager::UpdateSleepingState ( ActorPtr  player_actor,
float  dt 
)

Definition at line 836 of file ActorManager.cpp.

◆ UpdateTruckFeatures()

void ActorManager::UpdateTruckFeatures ( ActorPtr  vehicle,
float  dt 
)
private

Definition at line 1550 of file ActorManager.cpp.

◆ WakeUpAllActors()

void ActorManager::WakeUpAllActors ( )

Definition at line 881 of file ActorManager.cpp.

Field Documentation

◆ ACTORPTR_NULL

const ActorPtr ActorManager::ACTORPTR_NULL
static

Definition at line 135 of file ActorManager.h.

◆ inter_actor_links

std::map<beam_t*, std::pair<ActorPtr, ActorPtr> > RoR::ActorManager::inter_actor_links

Definition at line 132 of file ActorManager.h.

◆ m_actor_next_instance_id

ActorInstanceID_t RoR::ActorManager::m_actor_next_instance_id = 1
private

Unique sequential ID for each Actor.

Definition at line 156 of file ActorManager.h.

◆ m_actors

ActorPtrVec RoR::ActorManager::m_actors
private

Use MSG_SIM_{SPAWN/DELETE}_ACTOR_REQUESTED

Definition at line 155 of file ActorManager.h.

◆ m_dt_remainder

float RoR::ActorManager::m_dt_remainder = 0.f
private

Keeps track of the rounding error in the time step calculation.

Definition at line 159 of file ActorManager.h.

◆ m_forced_awake

bool RoR::ActorManager::m_forced_awake = false
private

disables sleep counters

Definition at line 157 of file ActorManager.h.

◆ m_free_force_next_id

FreeForceID_t RoR::ActorManager::m_free_force_next_id = 0
private

Unique ID for each FreeForce.

Definition at line 166 of file ActorManager.h.

◆ m_free_forces

FreeForceVec_t RoR::ActorManager::m_free_forces
private

Global forces added ad-hoc by scripts.

Definition at line 165 of file ActorManager.h.

◆ m_inertia_config

RoR::CmdKeyInertiaConfig RoR::ActorManager::m_inertia_config
private

Definition at line 171 of file ActorManager.h.

◆ m_last_simulation_speed

float RoR::ActorManager::m_last_simulation_speed = 0.1f
private

previously used time ratio between real time (evt.timeSinceLastFrame) and physics time ('dt' used in calcPhysics)

Definition at line 161 of file ActorManager.h.

◆ m_net_timer

Ogre::Timer RoR::ActorManager::m_net_timer
private

Definition at line 152 of file ActorManager.h.

◆ m_physics_steps

int RoR::ActorManager::m_physics_steps = 0
private

Definition at line 158 of file ActorManager.h.

◆ m_sim_task

std::shared_ptr<Task> RoR::ActorManager::m_sim_task
private

Definition at line 170 of file ActorManager.h.

◆ m_sim_thread_pool

std::unique_ptr<ThreadPool> RoR::ActorManager::m_sim_thread_pool
private

Definition at line 169 of file ActorManager.h.

◆ m_simulation_paused

bool RoR::ActorManager::m_simulation_paused = false
private

Definition at line 163 of file ActorManager.h.

◆ m_simulation_speed

float RoR::ActorManager::m_simulation_speed = 1.f
private

slow motion < 1.0 < fast motion

Definition at line 160 of file ActorManager.h.

◆ m_simulation_time

float RoR::ActorManager::m_simulation_time = 0.f
private

Amount of time the physics simulation is going to be advanced.

Definition at line 162 of file ActorManager.h.

◆ m_stream_mismatched_regs

std::vector<RoRnet::ActorStreamRegister> RoR::ActorManager::m_stream_mismatched_regs
private

Networking: Remember mismatched stream regs to re-process after downloading the missing mods.

Definition at line 150 of file ActorManager.h.

◆ m_stream_mismatches

std::map<int, std::set<int> > RoR::ActorManager::m_stream_mismatches
private

Networking: A set of streams without a corresponding actor in the actor-array for each stream source.

Definition at line 149 of file ActorManager.h.

◆ m_stream_time_offsets

std::map<int, int> RoR::ActorManager::m_stream_time_offsets
private

Networking: A network time offset for each stream source.

Definition at line 151 of file ActorManager.h.

◆ m_total_sim_time

float RoR::ActorManager::m_total_sim_time = 0.f
private

Definition at line 164 of file ActorManager.h.


The documentation for this class was generated from the following files: