Files
CydandClaude Fable 5 fdd9ac9d97 Initial import: Tesla Release 4.10 (Tesla:BattleTech & Tesla:Red Planet)
Archival snapshot of the Virtual World Entertainment Tesla cockpit
software, 1994-1996: MUNGA engine and L4 pod layer source (Borland
C++ 5.0), BT/RP game code, and game content (models, audio, maps,
gauges, Division renderer data). Includes third-party libraries:
Division dVS/DPL graphics, HMI SOS audio, WATTCP networking.

Files are preserved byte-for-byte (.gitattributes disables all
line-ending conversion). README.md documents the layout, target
hardware, and toolchain.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 13:21:58 -05:00

285 lines
6.6 KiB
C++

//===========================================================================//
// File: camship.hh //
// Project: Munga //
// Contents: Camera Interface //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 08/08/95 JM Initial coding. //
// Classes: CameraShip //
//---------------------------------------------------------------------------//
// Copyright (C) 1995, Virtual World Entertainment, Inc. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#if !defined(CAMSHIP_HPP)
# define CAMSHIP_HPP
# if !defined (MOVER_HPP)
# include <mover.hpp>
# endif
# if !defined (CAMMGR_HPP)
# include <cammgr.hpp>
# endif
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 ClassDerivations;
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;
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();}
};
#endif