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>
This commit is contained in:
+202
@@ -0,0 +1,202 @@
|
||||
#pragma once
|
||||
|
||||
#include "mover.h"
|
||||
#include "cammgr.h"
|
||||
|
||||
class CameraControlsMapper;
|
||||
|
||||
//##########################################################################
|
||||
//############### CameraShip::DirectionMessage #################
|
||||
//##########################################################################
|
||||
|
||||
class CameraShip__DirectionMessage : public Mover::Message
|
||||
{
|
||||
public:
|
||||
EntityID goalEntity;
|
||||
Scalar timeOnCamera;
|
||||
Point3D focusOffset;
|
||||
|
||||
CameraShip__DirectionMessage(Receiver::MessageID message_ID, size_t length, const EntityID& goal_entity, Scalar time_on_camera, const Point3D& focus) : Entity::Message(message_ID, length), goalEntity(goal_entity), timeOnCamera(time_on_camera), focusOffset(focus) {}
|
||||
};
|
||||
|
||||
//##########################################################################
|
||||
//############################# CameraShip ################################
|
||||
//##########################################################################
|
||||
|
||||
class CameraShip : public Mover
|
||||
{
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Shared Data support
|
||||
//
|
||||
public:
|
||||
static Derivation *GetClassDerivations();
|
||||
static SharedData DefaultData;
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Messaging support
|
||||
//
|
||||
protected:
|
||||
static const HandlerEntry MessageHandlerEntries[];
|
||||
static MessageHandlerSet MessageHandlers;
|
||||
|
||||
public:
|
||||
enum
|
||||
{
|
||||
DirectionMessageID = Entity::NextMessageID,
|
||||
NextMessageID
|
||||
};
|
||||
|
||||
typedef CameraShip__DirectionMessage DirectionMessage;
|
||||
|
||||
void DirectionMessageHandler(DirectionMessage *message);
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Attribute Support
|
||||
//
|
||||
public:
|
||||
enum
|
||||
{
|
||||
MapRangeAttributeID = Mover::NextAttributeID,
|
||||
MapLinearPositionAttributeID,
|
||||
MapAngularPositionAttributeID,
|
||||
NextAttributeID
|
||||
};
|
||||
|
||||
private:
|
||||
static const IndexEntry AttributePointers[];
|
||||
|
||||
protected:
|
||||
//static AttributeIndexSet AttributeIndex
|
||||
static AttributeIndexSet& GetAttributeIndex();
|
||||
|
||||
public:
|
||||
Scalar mapRange;
|
||||
Point3D *mapLinearPosition; // pointer to linear position of object or NULL
|
||||
Quaternion *mapAngularPosition; // pointer to angular position of object or NULL
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Model support
|
||||
//
|
||||
public:
|
||||
enum
|
||||
{
|
||||
ControlsMapperSubsystem,
|
||||
BasicSubsystemCount
|
||||
};
|
||||
void SetMappingSubsystem(CameraControlsMapper *mapper);
|
||||
|
||||
//
|
||||
// Various States of the CameraShip
|
||||
//
|
||||
enum
|
||||
{
|
||||
ConfigureCamerasState = Mover::StateCount,
|
||||
StateCount
|
||||
};
|
||||
|
||||
typedef void (CameraShip::*Performance)(Scalar time_slice);
|
||||
|
||||
void SetPerformance(Performance performance)
|
||||
{
|
||||
Check(this);
|
||||
activePerformance = (Simulation::Performance)performance;
|
||||
}
|
||||
|
||||
void FollowGoal(Scalar time_slice);
|
||||
|
||||
void DriveCamera(Scalar time_slice);
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Flag Support
|
||||
//
|
||||
public:
|
||||
enum
|
||||
{
|
||||
DefaultFlags = Mover::DefaultFlags | NoCollisionVolumeFlag | NoCollisionTestFlag | InitialStasisFlag
|
||||
};
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Construction and Destruction
|
||||
//
|
||||
public:
|
||||
static CameraShip* Make(MakeMessage *creation_message);
|
||||
|
||||
CameraShip(MakeMessage *creation_message, SharedData &virtual_data = DefaultData);
|
||||
~CameraShip();
|
||||
|
||||
Logical TestInstance() const;
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Public Data and Member Access Functions
|
||||
//
|
||||
public:
|
||||
void SetGoalEntity(Entity *goal_entity)
|
||||
{
|
||||
Check(this);
|
||||
Check(goal_entity);
|
||||
goalEntity = goal_entity;
|
||||
}
|
||||
|
||||
Entity* GetGoalEntity()
|
||||
{
|
||||
Check(this);
|
||||
return goalEntity;
|
||||
}
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Local Member Data
|
||||
//
|
||||
public:
|
||||
void GoToClosestCamera(const Point3D &point_3D);
|
||||
CameraInstance* GetCurrentCamera()
|
||||
{
|
||||
Check(this);
|
||||
return currentCamera;
|
||||
}
|
||||
|
||||
Time lastSwitch;
|
||||
Scalar timeOnCamera;
|
||||
|
||||
protected:
|
||||
CameraInstanceManager cameraManager;
|
||||
Entity *goalEntity;
|
||||
CameraInstance *currentCamera;
|
||||
Point3D focusOffset;
|
||||
|
||||
void MoveCameraShip(CameraInstance *camera_instance);
|
||||
|
||||
void AimCameraAtPoint(const Point3D &point_3D);
|
||||
|
||||
void RotateCameraToPoint(Scalar time_slice, const Point3D &point_3D);
|
||||
|
||||
//
|
||||
// Camera Motion Support
|
||||
//
|
||||
public:
|
||||
void ResetMotionVariables()
|
||||
{
|
||||
Check(this);
|
||||
localVelocity = Motion::Identity;
|
||||
localAcceleration = Motion::Identity;
|
||||
worldLinearVelocity = Vector3D::Identity;
|
||||
worldLinearAcceleration = Vector3D::Identity;
|
||||
}
|
||||
|
||||
protected:
|
||||
void ApplyControlledPanAndTilt(CameraControlsMapper *controls, Scalar time_slice);
|
||||
void ApplyControlledCameraHeight(CameraControlsMapper *controls);
|
||||
|
||||
void ApplyControlledCameraMotion(CameraControlsMapper *controls, Scalar time_slice);
|
||||
|
||||
//
|
||||
// Camera Manager Support
|
||||
//
|
||||
public:
|
||||
void CreateCameraInstance();
|
||||
void DeleteCameraInstance();
|
||||
void IncrementCameraInstance();
|
||||
void DecrementCameraInstance();
|
||||
|
||||
public:
|
||||
void OutputCameraList() { cameraManager.WriteNotationFile(); }
|
||||
};
|
||||
Reference in New Issue
Block a user