Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
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.
2026-06-24 21:28:16 -05:00

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;
};
}