Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
333 lines
7.2 KiB
C++
333 lines
7.2 KiB
C++
//===========================================================================//
|
|
// File: Torso.hpp
|
|
//---------------------------------------------------------------------------//
|
|
// Date Who Modification //
|
|
// -------- --- ---------------------------------------------------------- //
|
|
// 02/12/99 DPB Created File
|
|
//---------------------------------------------------------------------------//
|
|
// Copyright (C) 1998, Fasa Interactive //
|
|
// All Rights reserved worldwide //
|
|
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
|
|
//===========================================================================//
|
|
|
|
#pragma once
|
|
|
|
#include "MW4.hpp"
|
|
#include "Subsystem.hpp"
|
|
|
|
namespace MechWarrior4
|
|
{
|
|
class Vehicle;
|
|
class MWMover;
|
|
class Torso__GameModel;
|
|
|
|
//##########################################################################
|
|
//########################### Torso ###################################
|
|
//##########################################################################
|
|
|
|
typedef Subsystem__ClassData Torso__ClassData;
|
|
typedef Subsystem__Message Torso__Message;
|
|
typedef Subsystem__ExecutionStateEngine Torso__ExecutionStateEngine;
|
|
typedef Subsystem__CreateMessage Torso__CreateMessage;
|
|
|
|
|
|
class Torso__GameModel:
|
|
public Subsystem::GameModel
|
|
{
|
|
public:
|
|
|
|
char
|
|
twistJointName[MaxStringLength],
|
|
pitchJointName[MaxStringLength],
|
|
leftArmJointName[MaxStringLength],
|
|
rightArmJointName[MaxStringLength],
|
|
eyeJointName[MaxStringLength],
|
|
cageJointName[MaxStringLength];
|
|
|
|
Stuff::Scalar
|
|
twistSpeed;
|
|
Stuff::Scalar
|
|
pitchSpeed;
|
|
|
|
Stuff::Scalar
|
|
twistRadius;
|
|
Stuff::Scalar
|
|
pitchRadius;
|
|
|
|
Stuff::Scalar
|
|
armRatioAngle;
|
|
|
|
Stuff::Scalar
|
|
cageRatioAngle;
|
|
|
|
enum {
|
|
TwistSpeedAttributeID = Subsystem__GameModel::NextAttributeID,
|
|
PitchSpeedAttributeID,
|
|
TwistRadiusAttributeID,
|
|
PitchRadiusAttributeID,
|
|
TwistJointNameAttributeID,
|
|
PitchJointNameAttributeID,
|
|
LeftArmJointNameAttributeID,
|
|
RightArmJointNameAttributeID,
|
|
EyeJointNameAttributeID,
|
|
ArmRatioAngleAttributeID,
|
|
CageJointNameAttributeID,
|
|
CageRatioAngleAttributeID,
|
|
NextAttributeID
|
|
};
|
|
|
|
static bool
|
|
ReadAndVerify(
|
|
Torso__GameModel *model,
|
|
ModelAttributeEntry *attribute_entry,
|
|
const char *data,
|
|
char **error,
|
|
int error_buffer = 128
|
|
);
|
|
|
|
static void
|
|
ConstructGameModel(Script *script);
|
|
};
|
|
|
|
//##########################################################################
|
|
//######################## TorsoSubsystem ###########################
|
|
//##########################################################################
|
|
|
|
class Torso:
|
|
public Subsystem
|
|
{
|
|
public:
|
|
static void
|
|
InitializeClass();
|
|
static void
|
|
TerminateClass();
|
|
|
|
//##########################################################################
|
|
// Inheritance support
|
|
//
|
|
public:
|
|
typedef Torso__ClassData ClassData;
|
|
typedef Torso__GameModel GameModel;
|
|
typedef Torso__Message Message;
|
|
typedef Torso__ExecutionStateEngine ExecutionStateEngine;
|
|
typedef Torso__CreateMessage CreateMessage;
|
|
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Run-time Construction and Destruction Support
|
|
//
|
|
public:
|
|
static Torso*
|
|
Make(
|
|
CreateMessage *message,
|
|
ReplicatorID *base_id
|
|
);
|
|
|
|
void
|
|
Respawn(Adept::Entity::CreateMessage *message);
|
|
void
|
|
CommonCreation(CreateMessage *message);
|
|
|
|
protected:
|
|
Torso(
|
|
ClassData *class_data,
|
|
CreateMessage *message,
|
|
ReplicatorID *base_id,
|
|
ElementRenderer::Element *element
|
|
);
|
|
|
|
~Torso();
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Class Data & Game Model Support
|
|
//
|
|
public:
|
|
|
|
const GameModel*
|
|
GetGameModel()
|
|
{return Cast_Pointer(const GameModel*, gameModelResource.GetPointer());}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Shared Data support
|
|
//
|
|
public:
|
|
static ClassData
|
|
*DefaultData;
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Simulation Support
|
|
//
|
|
public:
|
|
void
|
|
PreCollisionExecute(Stuff::Time till);
|
|
|
|
void
|
|
SetTwistRotation();
|
|
void
|
|
SetPitchRotation();
|
|
void
|
|
SetPitchRotationSpecial();
|
|
void
|
|
SetRotation();
|
|
bool
|
|
ConnectSubsystem();
|
|
void
|
|
SetInternal(){internalTorso = true;};
|
|
void
|
|
SetExternal(){internalTorso = false;};
|
|
void
|
|
SetHeatMultiplier(Stuff::Scalar value);
|
|
|
|
const Stuff::LinearMatrix4D&
|
|
GetTwistJointMatrix();
|
|
const Stuff::LinearMatrix4D&
|
|
GetPitchJointMatrix();
|
|
Stuff::Scalar
|
|
GetTwistSpeed();
|
|
Stuff::Scalar
|
|
GetPitchSpeed();
|
|
int
|
|
GetLookDirection() {return lookDirection;}
|
|
|
|
MWMover
|
|
*twistJoint;
|
|
MWMover
|
|
*pitchJoint;
|
|
MWMover
|
|
*rotationJoint;
|
|
MWMover
|
|
*leftArmJoint;
|
|
MWMover
|
|
*rightArmJoint;
|
|
MWMover
|
|
*eyeJoint;
|
|
MWMover
|
|
*cageJoint;
|
|
|
|
|
|
Stuff::Scalar
|
|
yawValue;
|
|
Stuff::Scalar
|
|
pitchValue;
|
|
|
|
|
|
|
|
Stuff::Scalar
|
|
oldYawValue;
|
|
Stuff::Scalar
|
|
oldPitchValue;
|
|
Stuff::Scalar
|
|
yawValueCorrection;
|
|
Stuff::Scalar
|
|
pitchValueCorrection;
|
|
Stuff::Scalar
|
|
correctionTime;
|
|
Stuff::Scalar
|
|
correctionCurTime;
|
|
|
|
|
|
Stuff::Scalar
|
|
lookTypeVerticalAdjust;
|
|
Stuff::Scalar
|
|
eyeYaw;
|
|
Stuff::Scalar
|
|
eyePitch;
|
|
|
|
Stuff::Scalar
|
|
eyeTransitionEndTime;
|
|
|
|
Stuff::Scalar
|
|
yawDemand;
|
|
Stuff::Scalar
|
|
pitchDemand;
|
|
|
|
Stuff::Time
|
|
surrender_time;
|
|
|
|
Stuff::Scalar
|
|
heatMultiplier;
|
|
|
|
bool
|
|
internalTorso;
|
|
|
|
void
|
|
PitchToPoint(const Stuff::Point3D& point);
|
|
|
|
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Arm Twist to side
|
|
//
|
|
enum {
|
|
LookForwardDirection = 0,
|
|
LookLeftDirection,
|
|
LookRightDirection,
|
|
LookBackDirection,
|
|
LookDownDirection,
|
|
SurrenderDirection
|
|
};
|
|
|
|
int lookDirection;
|
|
|
|
|
|
enum {
|
|
ForwardTwistState,
|
|
SideTwistState,
|
|
RearTwistState,
|
|
ToRearTwistState,
|
|
ToSideTwistState,
|
|
ToForwardTwistState,
|
|
|
|
};
|
|
|
|
enum {
|
|
ForwardPitchState,
|
|
SurrenderPitchState,
|
|
ToSurrenderState,
|
|
ToForwardPitchState
|
|
};
|
|
|
|
|
|
|
|
int leftArmTwistState;
|
|
int rightArmTwistState;
|
|
int armPitchState;
|
|
|
|
|
|
Stuff::Scalar armTwistTime;
|
|
Stuff::Scalar armPitchTime;
|
|
Stuff::Scalar leftArmTwistTimer;
|
|
Stuff::Scalar rightArmTwistTimer;
|
|
Stuff::Scalar pitchArmTwistTimer;
|
|
|
|
Stuff::Scalar
|
|
leftArmYaw;
|
|
Stuff::Scalar
|
|
rightArmYaw;
|
|
Stuff::Scalar
|
|
armPitch;
|
|
|
|
|
|
void TurnArms(Stuff::Scalar time_slice);
|
|
|
|
void LookLeft();
|
|
void LookRight();
|
|
void LookBack();
|
|
void LookDown();
|
|
void LookForward();
|
|
void LookSurrender();
|
|
|
|
Stuff::Point3D torsoRequest; // for the torso movement
|
|
bool followTorsoRequest; // true if track torsoRequest point
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
// Test Support
|
|
//
|
|
public:
|
|
void
|
|
TestInstance() const;
|
|
};
|
|
}
|
|
|
|
|