Imports the current Win32 source for the pod-racing game 'Red Planet', built on the MUNGA engine and its L4 (Win32/DirectX) platform layer: - MUNGA / MUNGA_L4: cross-platform engine core and Win32 backend - RP / RP_L4: Red Planet game logic and Win32 application - DivLoader, Setup1: asset loader and installer project - lib, MUNGA_L4/openal, MUNGA_L4/sos: third-party audio dependencies Removed stale Subversion metadata and added .gitignore/.gitattributes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
765 lines
15 KiB
C++
765 lines
15 KiB
C++
#pragma once
|
|
|
|
#include "network.h"
|
|
#include "event.h"
|
|
#include "state.h"
|
|
#include "cstr.h"
|
|
|
|
#if defined(TRACE_FOREGROUND_PROCESSING)
|
|
extern BitTrace Foreground_Processing;
|
|
#define SET_FOREGROUND_PROCESSING() Foreground_Processing.Set()
|
|
#define CLEAR_FOREGROUND_PROCESSING() Foreground_Processing.Clear()
|
|
#else
|
|
#define SET_FOREGROUND_PROCESSING()
|
|
#define CLEAR_FOREGROUND_PROCESSING()
|
|
#endif
|
|
|
|
#if defined(TRACE_UPDATE_MANAGER)
|
|
extern BitTrace Update_Manager;
|
|
#define SET_UPDATE_MANAGER() Update_Manager.Set()
|
|
#define CLEAR_UPDATE_MANAGER() Update_Manager.Clear()
|
|
#else
|
|
#define SET_UPDATE_MANAGER()
|
|
#define CLEAR_UPDATE_MANAGER()
|
|
#endif
|
|
|
|
#if defined(TRACE_RENDERER_MANAGER)
|
|
extern BitTrace Renderer_Manager;
|
|
#define SET_RENDERER_MANAGER() Renderer_Manager.Set()
|
|
#define CLEAR_RENDERER_MANAGER() Renderer_Manager.Clear()
|
|
#else
|
|
#define SET_RENDERER_MANAGER()
|
|
#define CLEAR_RENDERER_MANAGER()
|
|
#endif
|
|
|
|
class Mission;
|
|
class Registry;
|
|
class InterestManager;
|
|
class HostManager;
|
|
class UpdateManager;
|
|
class RendererManager;
|
|
class ControlsManager;
|
|
class Entity;
|
|
class EntityManager;
|
|
class Renderer;
|
|
class BackgroundTasks;
|
|
class ApplicationManager;
|
|
class CameraShip;
|
|
class SpoolFile;
|
|
class AudioRenderer;
|
|
class VideoRenderer;
|
|
class GaugeRenderer;
|
|
class IcomManager;
|
|
class ModeManager;
|
|
class Player;
|
|
class GeneralEventQueue;
|
|
class Entity__MakeMessage;
|
|
class ResourceFile;
|
|
|
|
//##########################################################################
|
|
//######################### Application ##############################
|
|
//##########################################################################
|
|
|
|
class Application__StateQueryMessage;
|
|
class Application__CheckLoadMessage;
|
|
class Application__RunMissionMessage;
|
|
class Application__StopMissionMessage;
|
|
class Application__SuspendMissionMessage;
|
|
class Application__ResumeMissionMessage;
|
|
class Application__AbortMissionMessage;
|
|
|
|
enum EventPriorities
|
|
{
|
|
MinEventPriority = 0,
|
|
LowEventPriority,
|
|
DefaultEventPriority,
|
|
HighEventPriority,
|
|
MaxEventPriority
|
|
};
|
|
|
|
const EventPriorities ControlsEventPriority = HighEventPriority;
|
|
const EventPriorities CreationEventPriority = HighEventPriority;
|
|
const EventPriorities DestructionEventPriority = HighEventPriority;
|
|
const EventPriorities UpdateEventPriority = MaxEventPriority;
|
|
const EventPriorities HighInterestEventPriority = DefaultEventPriority;
|
|
const EventPriorities LowInterestEventPriority = LowEventPriority;
|
|
const EventPriorities EntityManagerEventPriority = DefaultEventPriority;
|
|
const EventPriorities EntityInvalidEventPriority = LowEventPriority;
|
|
|
|
enum ApplicationID
|
|
{
|
|
RPL4,
|
|
BTL4,
|
|
NDL4
|
|
};
|
|
|
|
#define EVENT_PRIORITIES_COUNT (5)
|
|
|
|
class Application:
|
|
public NetworkClient
|
|
{
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Construction, Destruction, and Testing
|
|
//
|
|
public:
|
|
Application(
|
|
ResourceFile *resource_file,
|
|
ApplicationID application_id,
|
|
ClassID class_ID=ApplicationClassID,
|
|
SharedData &shared_data=DefaultData
|
|
);
|
|
~Application();
|
|
|
|
Logical
|
|
TestInstance() const;
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Execution control
|
|
//
|
|
public:
|
|
virtual void Initialize();
|
|
virtual void
|
|
LoadBackgroundTasks();
|
|
|
|
virtual Logical
|
|
ExecuteForeground(
|
|
Time start_of_frame,
|
|
Scalar frame_duration
|
|
);
|
|
|
|
virtual void
|
|
ExecuteBackgroundTask();
|
|
|
|
void
|
|
Stop();
|
|
|
|
virtual Logical
|
|
Shutdown(int remainingApps);
|
|
|
|
virtual void
|
|
Terminate();
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Creation Callbacks
|
|
//
|
|
public:
|
|
void
|
|
CreateMission(NotationFile *egg_notation_file);
|
|
|
|
virtual Entity*
|
|
MakeAndLinkViewpointEntity(Entity__MakeMessage *message);
|
|
|
|
protected:
|
|
virtual Mission*
|
|
MakeMission(
|
|
NotationFile *notation_file,
|
|
ResourceFile *resources
|
|
);
|
|
|
|
virtual Entity*
|
|
MakeViewpointEntity(Entity__MakeMessage *message);
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Current mission
|
|
//
|
|
public:
|
|
Mission*
|
|
GetCurrentMission();
|
|
Player*
|
|
GetMissionPlayer()
|
|
{return missionPlayer;}
|
|
|
|
SpoolFile*
|
|
GetSpoolFile()
|
|
{return spoolFile;}
|
|
|
|
protected:
|
|
Player
|
|
*missionPlayer;
|
|
SpoolFile*
|
|
spoolFile;
|
|
Time
|
|
lastCreationMessage;
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Application State
|
|
//
|
|
public:
|
|
enum {
|
|
InitializingState = 0,
|
|
WaitingForEgg,
|
|
LoadingMission,
|
|
WaitingForLaunch,
|
|
LaunchingMission,
|
|
RunningMission,
|
|
EndingMission,
|
|
StoppingMission,
|
|
SuspendingMission,
|
|
ResumingMission,
|
|
AbortingMission,
|
|
CreatingMission,
|
|
ApplicationStateCount
|
|
};
|
|
|
|
Enumeration
|
|
GetApplicationState();
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// System level event processing
|
|
//
|
|
public:
|
|
void
|
|
Post(
|
|
int priority,
|
|
Receiver *target,
|
|
Receiver::Message *message,
|
|
const Time &when=Time::Null
|
|
);
|
|
|
|
void
|
|
SendEvent(
|
|
int priority,
|
|
HostID host_ID,
|
|
NetworkManager::ClientID client_ID,
|
|
Receiver::Message *message,
|
|
Time when=Time::Null
|
|
);
|
|
|
|
void
|
|
BroadcastEvent(
|
|
int priority,
|
|
NetworkManager::ClientID client_ID,
|
|
Receiver::Message *message,
|
|
Time when=Time::Null
|
|
);
|
|
|
|
void
|
|
ExclusiveBroadcastEvent(
|
|
int priority,
|
|
NetworkManager::ClientID client_ID,
|
|
Receiver::Message *message,
|
|
Time when=Time::Null
|
|
);
|
|
|
|
#if defined(TRACE_EVENT_COUNT)
|
|
size_t
|
|
GetEventCount();
|
|
#endif
|
|
|
|
void
|
|
DumpEventQueue();
|
|
|
|
#if 0
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Creation and Interest Event Posting
|
|
//
|
|
public:
|
|
void
|
|
PostCreationEvent(
|
|
Receiver::Message *message,
|
|
const Time &when=Time::Null
|
|
);
|
|
void
|
|
PostInterestEvent(
|
|
Entity *entity,
|
|
Renderer *renderer
|
|
);
|
|
void
|
|
PostUpdateEvent(
|
|
Entity *entity,
|
|
Receiver::Message *message
|
|
);
|
|
void
|
|
PostDestructionEvent(
|
|
Entity *entity,
|
|
Receiver::Message *message
|
|
);
|
|
#endif
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// System level message processing
|
|
//
|
|
public:
|
|
void
|
|
SendMessage(
|
|
HostID host_ID,
|
|
NetworkManager::ClientID client_ID,
|
|
Receiver::Message *message
|
|
);
|
|
|
|
void
|
|
BroadcastMessage(
|
|
NetworkManager::ClientID client_ID,
|
|
Receiver::Message *message
|
|
);
|
|
|
|
void
|
|
ExclusiveBroadcastMessage(
|
|
NetworkManager::ClientID client_ID,
|
|
Receiver::Message *message
|
|
);
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Event level event processing
|
|
//
|
|
public:
|
|
Logical
|
|
ProcessOneEvent(int min_priority=0);
|
|
|
|
void
|
|
ProcessAllEvents(int min_priority=0);
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Accessors
|
|
//
|
|
public:
|
|
Scalar
|
|
GetApplicationLoopFrameRate();
|
|
Scalar
|
|
GetSecondsRemainingInGame()
|
|
{return secondsRemainingInGame;}
|
|
ApplicationID
|
|
GetApplicationID()
|
|
{return applicationID;}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Module accessors
|
|
//
|
|
public:
|
|
//
|
|
// Managers
|
|
//
|
|
NetworkManager*
|
|
GetNetworkManager();
|
|
EntityManager*
|
|
GetEntityManager();
|
|
Registry*
|
|
GetRegistry();
|
|
HostManager*
|
|
GetHostManager();
|
|
InterestManager*
|
|
GetInterestManager();
|
|
UpdateManager*
|
|
GetUpdateManager();
|
|
RendererManager*
|
|
GetRendererManager();
|
|
ControlsManager*
|
|
GetControlsManager();
|
|
IcomManager*
|
|
GetIntercomManager();
|
|
AudioRenderer*
|
|
GetAudioRenderer();
|
|
VideoRenderer*
|
|
GetVideoRenderer();
|
|
GaugeRenderer*
|
|
GetGaugeRenderer();
|
|
ModeManager*
|
|
GetModeManager();
|
|
|
|
//
|
|
// StreamableResourceFile
|
|
//
|
|
ResourceFile*
|
|
GetResourceFile();
|
|
void
|
|
SetResourceFile(ResourceFile *resources);
|
|
ApplicationManager*
|
|
GetApplicationManager();
|
|
|
|
//
|
|
// Viewpoint entity
|
|
//
|
|
Entity*
|
|
GetViewpointEntity();
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Message Support
|
|
//
|
|
public:
|
|
enum {
|
|
StateQueryMessageID = NetworkClient::NextMessageID,
|
|
CheckLoadMessageID,
|
|
RunMissionMessageID,
|
|
StopMissionMessageID,
|
|
KeyCommandMessageID,
|
|
SuspendMissionMessageID,
|
|
ResumeMissionMessageID,
|
|
LoadMissionMessageID,
|
|
AbortMissionMessageID,
|
|
NextMessageID
|
|
};
|
|
|
|
typedef Application__StateQueryMessage StateQueryMessage;
|
|
typedef Application__CheckLoadMessage CheckLoadMessage;
|
|
typedef Application__RunMissionMessage RunMissionMessage;
|
|
typedef Application__StopMissionMessage StopMissionMessage;
|
|
typedef Application__SuspendMissionMessage SuspendMissionMessage;
|
|
typedef Application__ResumeMissionMessage ResumeMissionMessage;
|
|
typedef Application__AbortMissionMessage AbortMissionMessage;
|
|
|
|
static const HandlerEntry
|
|
MessageHandlerEntries[];
|
|
//static MessageHandlerSet MessageHandlers;
|
|
static MessageHandlerSet& GetMessageHandlers();
|
|
|
|
void
|
|
StateQueryMessageHandler(StateQueryMessage *message);
|
|
void
|
|
CheckLoadMessageHandler(CheckLoadMessage *message);
|
|
void
|
|
RunMissionMessageHandler(RunMissionMessage *message);
|
|
void
|
|
StopMissionMessageHandler(StopMissionMessage *message);
|
|
void
|
|
SuspendMissionMessageHandler(SuspendMissionMessage *message);
|
|
void
|
|
ResumeMissionMessageHandler(ResumeMissionMessage *message);
|
|
void
|
|
KeyCommandMessageHandler(ReceiverDataMessageOf<int> *message);
|
|
void
|
|
LoadMissionMessageHandler(Message *message);
|
|
void
|
|
AbortMissionMessageHandler(AbortMissionMessage *message);
|
|
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Shared Data Support
|
|
//
|
|
public:
|
|
static Derivation *GetClassDerivations();
|
|
static SharedData DefaultData;
|
|
|
|
static Logical DoSuppressGauges() { return suppressGauges; }
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Modules
|
|
//
|
|
protected:
|
|
//
|
|
// Managers
|
|
//
|
|
NetworkManager
|
|
*networkManager;
|
|
EntityManager
|
|
*entityManager;
|
|
Registry
|
|
*registry;
|
|
HostManager
|
|
*hostManager;
|
|
InterestManager
|
|
*interestManager;
|
|
UpdateManager
|
|
*updateManager;
|
|
RendererManager
|
|
*rendererManager;
|
|
ControlsManager
|
|
*controlsManager;
|
|
IcomManager
|
|
*intercomManager;
|
|
AudioRenderer
|
|
*audioRenderer;
|
|
VideoRenderer
|
|
*videoRenderer;
|
|
GaugeRenderer
|
|
*gaugeRenderer;
|
|
ModeManager
|
|
*modeManager;
|
|
|
|
static Logical suppressGauges;
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Module Creation
|
|
//
|
|
protected:
|
|
//
|
|
// Managers
|
|
//
|
|
virtual NetworkManager*
|
|
MakeNetworkManager();
|
|
|
|
virtual Registry*
|
|
MakeRegistry();
|
|
|
|
virtual ControlsManager*
|
|
MakeControlsManager();
|
|
|
|
virtual IcomManager*
|
|
MakeIntercomManager();
|
|
|
|
virtual InterestManager*
|
|
MakeInterestManager();
|
|
|
|
virtual AudioRenderer*
|
|
MakeAudioRenderer();
|
|
|
|
virtual VideoRenderer*
|
|
MakeVideoRenderer();
|
|
|
|
virtual GaugeRenderer*
|
|
MakeGaugeRenderer(int *secondaryIndex, int *aux1Index, int *aux2Index);
|
|
|
|
virtual ModeManager*
|
|
MakeModeManager();
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Private data
|
|
//
|
|
protected:
|
|
ApplicationID
|
|
applicationID;
|
|
Scalar
|
|
secondsRemainingInGame;
|
|
Time
|
|
gameStarted;
|
|
GeneralEventQueue
|
|
*eventQueue;
|
|
BackgroundTasks
|
|
*backgroundTasks;
|
|
ResourceFile
|
|
*resourceFile;
|
|
Entity
|
|
*viewpointEntity;
|
|
Logical
|
|
executeFrames;
|
|
StateIndicator
|
|
applicationState;
|
|
Mission
|
|
*currentMission;
|
|
Logical
|
|
routePacketFinished;
|
|
};
|
|
|
|
extern Application *application;
|
|
extern int Exit_Code;
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~ Application__CheckLoadMessage ~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
class Application__CheckLoadMessage:
|
|
public NetworkClient::Message
|
|
{
|
|
public:
|
|
Application__CheckLoadMessage();
|
|
};
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~ Application inlines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
inline Mission*
|
|
Application::GetCurrentMission()
|
|
{
|
|
Check(this);
|
|
return currentMission;
|
|
}
|
|
|
|
inline Enumeration
|
|
Application::GetApplicationState()
|
|
{
|
|
Check(this);
|
|
return applicationState.GetState();
|
|
}
|
|
|
|
inline void
|
|
Application::Post(
|
|
int priority,
|
|
Receiver *target,
|
|
Receiver::Message *message,
|
|
const Time &when
|
|
)
|
|
{
|
|
Check(this);
|
|
eventQueue->Post(priority,target,message,when);
|
|
}
|
|
|
|
inline void
|
|
Application::SendEvent(
|
|
int priority,
|
|
HostID host_ID,
|
|
NetworkClient::ClientID client_ID,
|
|
Receiver::Message *message,
|
|
Time when
|
|
)
|
|
{
|
|
Check(this);
|
|
eventQueue->SendEvent(priority,host_ID,client_ID,message,when);
|
|
}
|
|
|
|
inline void
|
|
Application::BroadcastEvent(
|
|
int priority,
|
|
NetworkClient::ClientID client_ID,
|
|
Receiver::Message *message,
|
|
Time when
|
|
)
|
|
{
|
|
Check(this);
|
|
eventQueue->BroadcastEvent(priority,client_ID,message,when);
|
|
}
|
|
|
|
inline void
|
|
Application::ExclusiveBroadcastEvent(
|
|
int priority,
|
|
NetworkClient::ClientID client_ID,
|
|
Receiver::Message *message,
|
|
Time when
|
|
)
|
|
{
|
|
Check(this);
|
|
eventQueue->ExclusiveBroadcastEvent(priority,client_ID,message,when);
|
|
}
|
|
|
|
#if defined(GET_EVENT_COUNT)
|
|
inline size_t
|
|
Application::GetEventCount()
|
|
{
|
|
return eventQueue->GetEventCount();
|
|
}
|
|
#endif
|
|
|
|
inline void
|
|
Application::DumpEventQueue()
|
|
{
|
|
eventQueue->DumpEventQueue();
|
|
}
|
|
|
|
|
|
inline void
|
|
Application::SendMessage(
|
|
HostID host_ID,
|
|
NetworkClient::ClientID client_ID,
|
|
Receiver::Message *message
|
|
)
|
|
{
|
|
Check(this);
|
|
networkManager->Send(message,client_ID,host_ID);
|
|
}
|
|
|
|
inline void
|
|
Application::BroadcastMessage(
|
|
NetworkManager::ClientID client_ID,
|
|
Receiver::Message *message
|
|
)
|
|
{
|
|
Check(this);
|
|
networkManager->Broadcast(message,client_ID);
|
|
}
|
|
|
|
inline void
|
|
Application::ExclusiveBroadcastMessage(
|
|
NetworkManager::ClientID client_ID,
|
|
Receiver::Message *message
|
|
)
|
|
{
|
|
Check(this);
|
|
networkManager->ExclusiveBroadcast(message,client_ID);
|
|
}
|
|
|
|
inline Logical
|
|
Application::ProcessOneEvent(int min_priority)
|
|
{
|
|
Check(this);
|
|
return eventQueue->ProcessOneEvent(min_priority);
|
|
}
|
|
|
|
inline void
|
|
Application::ProcessAllEvents(int min_priority)
|
|
{
|
|
Check(this);
|
|
eventQueue->ProcessAllEvents(min_priority);
|
|
}
|
|
|
|
inline NetworkManager*
|
|
Application::GetNetworkManager()
|
|
{
|
|
Check(networkManager);
|
|
return networkManager;
|
|
}
|
|
|
|
inline EntityManager*
|
|
Application::GetEntityManager()
|
|
{
|
|
return entityManager;
|
|
}
|
|
|
|
inline Registry*
|
|
Application::GetRegistry()
|
|
{
|
|
return registry;
|
|
}
|
|
|
|
inline HostManager*
|
|
Application::GetHostManager()
|
|
{
|
|
return hostManager;
|
|
}
|
|
|
|
inline InterestManager*
|
|
Application::GetInterestManager()
|
|
{
|
|
return interestManager;
|
|
}
|
|
|
|
inline UpdateManager*
|
|
Application::GetUpdateManager()
|
|
{
|
|
return updateManager;
|
|
}
|
|
|
|
inline RendererManager*
|
|
Application::GetRendererManager()
|
|
{
|
|
return rendererManager;
|
|
}
|
|
|
|
inline ControlsManager*
|
|
Application::GetControlsManager()
|
|
{
|
|
return controlsManager;
|
|
}
|
|
|
|
inline IcomManager*
|
|
Application::GetIntercomManager()
|
|
{
|
|
return intercomManager;
|
|
}
|
|
|
|
inline ResourceFile*
|
|
Application::GetResourceFile()
|
|
{
|
|
return resourceFile;
|
|
}
|
|
|
|
inline void
|
|
Application::SetResourceFile(ResourceFile *resources)
|
|
{
|
|
resourceFile = resources;
|
|
}
|
|
|
|
inline Entity*
|
|
Application::GetViewpointEntity()
|
|
{
|
|
return viewpointEntity;
|
|
}
|
|
|
|
inline AudioRenderer*
|
|
Application::GetAudioRenderer()
|
|
{
|
|
return audioRenderer;
|
|
}
|
|
|
|
inline VideoRenderer*
|
|
Application::GetVideoRenderer()
|
|
{
|
|
return videoRenderer;
|
|
}
|
|
|
|
inline GaugeRenderer*
|
|
Application::GetGaugeRenderer()
|
|
{
|
|
return gaugeRenderer;
|
|
}
|
|
|
|
inline ModeManager*
|
|
Application::GetModeManager()
|
|
{
|
|
return modeManager;
|
|
}
|