Files
RP412/MUNGA/VDATA.h
T
CydandClaude Opus 4.8 4abbf8879f Initial import of Red Planet v4.10 Win32 source
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>
2026-06-30 07:59:51 -05:00

303 lines
6.6 KiB
C++

#pragma once
#include "memstrm.h"
class CString;
class ObjectStream;
class NameList;
typedef unsigned long ObjectID;
const ObjectID NullObjectID = 0;
typedef unsigned long RegisteredClassMemoryAddress;
class RegisteredClass SIGNATURED
{
public:
enum ClassID
{
//
//--------------
// Munga classes
//--------------
//
NullClassID = -1,
TrivialClassID = 0,
TrivialPlugClassID,
TrivialNodeClassID,
TrivialComponentClassID,
AttributeWatcherOfClassID,
ReceiverAttributeWatcherOfClassID,
MessageTapClassID,
DerivationClassID,
TrivialReceiverClassID,
EventClassID,
NetworkEventClassID,
GeneralEventQueueClassID,
EventQueueClassID,
DeferredEventQueueClassID,
TrivialModelClassID,
TrivialSubsystemClassID,
TrivialEntityClassID,
NetworkManagerClassID,
EntityManagerClassID,
EntityAttributeHandlerReferenceClassID,
PersistentReferenceClassID,
InterestManagerClassID,
HostManagerClassID,
ControlsInstanceClassID,
ControlsMappingGroupClassID,
ControlsOwnerClassID,
ControlsManagerClassID,
TrivialMoverClassID,
AudioStateTriggerClassID,
AudioMotionScaleClassID,
AudioRendererClassID,
AudioLocationClassID,
ApplicationClassID,
EntityGroupClassID,
GaugeConnectionClassID,
GaugeClassID,
GaugeRendererClassID,
CollisionAssistantClassID,
RendererManagerClassID,
AudioMotionTriggerClassID,
AudioMotionRandomTriggerClassID,
TerrainClassID,
UnscalableTerrainClassID,
AudioControlMixerClassID,
AudioHingeScaleClassID,
AudioControlSmootherClassID,
AudioControlMultiplierClassID,
AudioResourceSelectorClassID,
DropZoneClassID,
ExplosionClassID,
PlayerClassID,
JointSubsystemClassID,
AudioResourceIndexClassID,
AudioScalarScaleClassID,
AudioControlSendClassID,
GaugeEntityListClassID,
DirectControlsInstanceClassID,
EventControlsInstanceClassID,
AudioSampleAndHoldClassID,
AudioScalarTriggerClassID,
AudioEnumerationTriggerClassID,
AudioIntegerTriggerClassID,
AudioLogicalTriggerClassID,
EyeCandyClassID,
WarehouseObjectClassID,
WarehouseBinClassID,
AudioControlsButtonTriggerClassID,
IcomClassID,
IcomManagerClassID,
CameraShipClassID,
CameraDirectorClassID,
ExplosionResourceTableClassID,
ApplicationTaskClassID,
AudioIdleWatcherClassID,
AudioControlEventClassID,
AudioControlSequenceClassID,
AudioControlSplitterClassID,
ApplicationManagerClassID,
DamageZoneClassID,
AudioLFOClassID,
AudioEnumerationDeltaTriggerClassID,
AudioScalarDeltaTriggerClassID,
ControlsStringClassID,
ControlsStringManagerClassID,
AudioEntityClassID,
AudioLevelOfDetailClassID,
LandmarkClassID,
ScenarioRoleClassID,
TeamClassID,
AudioMessageWatcherClassID,
AudioControlsButtonMessageWatcherClassID,
GaugeAlarmManagerClassID,
GaugeAlarmClassID,
LightClassID,
CulturalIconClassID,
DoorFrameClassID,
DoorClassID,
//
//---------------------------------
// Class ID's for Munga LBE classes
//---------------------------------
//
L4AudioLocationClassID = 1000,
DirectPatchSourceClassID,
Dynamic3DPatchSourceClassID,
L4ApplicationClassID,
PatchResourceClassID,
Static3DPatchSourceClassID,
L4AudioCollisionTriggerClassID,
L4GaugeImageManagerClassID,
L4ControlsManagerClassID,
L4IcomClassID,
L4IcomManagerClassID,
PatchLevelOfDetailClassID,
//
//----------------------
// Class ID's for RP
//----------------------
//
RPL4ApplicationClassID = 2000,
VTVClassID,
RivetClassID,
DemolitionPackClassID,
BoosterClassID,
RivetGunClassID,
LaserDrillClassID,
DemolitionPackDropperClassID,
ChuteClassID,
ScoreZoneClassID,
VTVPowerClassID,
ThrusterClassID,
ControlsMapperClassID,
CrusherClassID,
BlockerClassID,
RunnerClassID,
RPDirectorClassID,
RPTeamClassID,
RPPlayerClassID,
//
//------------------
// Class ID's for BT
//------------------
//
BTL4ApplicationClassID = 3000,
MechClassID,
MissileClassID,
MechSubsystemClassID,
HeatableSubsystemClassID,
CondenserClassID,
HeatSinkClassID,
HeatWatcherClassID,
ReservoirClassID,
GeneratorClassID,
PoweredSubsystemClassID,
SensorClassID,
GyroscopeClassID,
TorsoClassID,
MyomersClassID,
CapacitorClassID,
EmitterClassID,
LaserClassID,
ParticleCannonClassID,
AmmoBinClassID,
AmmoFeederClassID,
ProjectileWeaponClassID,
GaussRifleClassID,
BallisticWeaponClassID,
MissileLauncherClassID,
ProjectileClassID,
SeekerClassID,
SubsystemMessageManagerClassID,
PPCClassID,
PowerWatcherClassID,
HUDClassID,
RadarClassID,
SearchlightClassID,
ThermalSightClassID,
BTTeamClassID,
BTPlayerClassID,
BTDirectorClassID,
MechTechClassID,
TurretClassID,
//
//------------------
// Class ID's for ND
//------------------
//
NDL4ApplicationClassID = 4000,
AirplaneClassID,
BulletClassID,
MachineGunClassID,
NDDirectorClassID,
NDTeamClassID,
NDPlayerClassID,
//
//----------------------
// Class ID's for Tools
//----------------------
//
ShapeClassID = 60000,
ShapeGroupListClassID,
ShapeGroupClassID,
ShapePlaneClassID,
ShapePolygonClassID,
ShapeLineClassID,
ShapePointClassID,
VertexReferenceClassID,
VertexClassID,
MaterialLibraryClassID,
MaterialReferenceClassID,
MaterialClassID,
TargaImageClassID,
ShapeListClassID,
SkeletonClassID,
SkeletonJointClassID,
SkeletonSiteClassID,
SkeletonSegmentClassID,
ModelClassID,
//
//---------------------------------
// Class ID's for Munga W4 classes
//---------------------------------
//
W4ApplicationClassID = 70000,
W4ControlsManagerClassID,
//
//-------------
// end of list
//-------------
//
MaxClassID
};
public:
RegisteredClass(ClassID class_id = TrivialClassID);
RegisteredClass(ObjectStream *stream);
virtual ~RegisteredClass();
Logical TestInstance() const;
public:
ClassID GetClassID();
static ClassID GetClassID(const CString &class_name_string);
RegisteredClassMemoryAddress GetMemoryAddress();
public:
static void BuildFromPage(ObjectStream *stream, NameList *name_list, ClassID class_ID, ObjectID object_ID);
private:
ClassID classID;
};
inline RegisteredClass::ClassID RegisteredClass::GetClassID()
{
Check(this);
return classID;
}
inline RegisteredClassMemoryAddress RegisteredClass::GetMemoryAddress()
{
Check(this);
return (RegisteredClassMemoryAddress)this;
}
inline MemoryStream& MemoryStream_Read(MemoryStream* stream, RegisteredClass::ClassID *output)
{ return stream->ReadBytes(output, sizeof(*output)); }
inline MemoryStream& MemoryStream_Write(MemoryStream* stream, const RegisteredClass::ClassID *input)
{ return stream->WriteBytes(input, sizeof(*input)); }