Files
firestorm/Gameleap/code/mw4/Code/MW4/VehicleInterface.hpp
T
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

1986 lines
52 KiB
C++

//===========================================================================//
// File: VehicleInterface.hpp
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 09/09/98 JSE Inital base class based off of Shadowrun/Adept //
//---------------------------------------------------------------------------//
// Copyright (C) 1998, Fasa Interactive //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#pragma once
#include "MW4.hpp"
#include <Adept\Interface.hpp>
#include "MWEntityManager.hpp"
#include "Vehicle.hpp"
#include "mwguimanager.hpp"
#include "Blanderizer.hpp"
#pragma warning (push)
#include <stlport\string>
#pragma warning (pop)
namespace Adept
{
class Effect;
class GUITextObject;
class AudioCommand;
}
namespace ElementRenderer
{
class CameraElement;
}
namespace MechWarrior4
{
class MWMover;
class CollisionGroup;
class Weapon;
class VehicleInterface;
class MWPlayer;
class PlayerAI;
class VehicleCommand;
class LongTomWeaponSubsystem;
class NavPoint;
void VehicleInterfaceSecurityCheckStart();
void VehicleInterfaceSecurityCheckStop();
//##########################################################################
//############### VehicleInterface::ExecutionStateEngine ############
//##########################################################################
class VehicleInterface__ExecutionStateEngine:
public Adept::Entity__ExecutionStateEngine
{
public:
static void
InitializeClass();
static void
TerminateClass();
typedef Adept::Entity__ExecutionStateEngine BaseClass;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Run-time Construction and Destruction Support
//
public:
typedef VehicleInterface__ExecutionStateEngine*
(*Factory)(
VehicleInterface *vehicle_interface,
FactoryRequest *request
);
static VehicleInterface__ExecutionStateEngine*
Make(
VehicleInterface *vehicle_interface,
FactoryRequest *request
);
protected:
VehicleInterface__ExecutionStateEngine(
ClassData *class_data,
VehicleInterface *vehicle_interface,
FactoryRequest *request
);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class Data support
//
public:
static ClassData
*DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// State stuff
//
public:
enum {
FollowingState = Adept::Interface__ExecutionStateEngine::StateCount,
WatchingDeathState,
AIRunningState,
FieldBaseState,
// AutoPilotState,
ObservationState,
StateCount
};
int RequestState(int new_state,void* data);
protected:
static const StateEntry
StateEntries[];
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Test Support
//
public:
void
TestInstance() const;
};
//##########################################################################
//################## VehicleInterface::CreateMessage #################
//##########################################################################
class VehicleInterface__CreateMessage:
public Adept::Interface__CreateMessage
{
public:
typedef Adept::Interface__CreateMessage BaseClass;
Adept::ResourceID
guiStreamResourceID;
VehicleInterface__CreateMessage(
size_t length,
int priority,
int message_flags,
Stuff::RegisteredClass::ClassID class_id,
int replicator_flags,
const ResourceID& data_list_id,
const Stuff::LinearMatrix4D &local_to_parent,
Stuff::Scalar age,
int execution_state,
int name_id,
int entity_alignment,
Adept::ResourceID gui_id
):
Interface__CreateMessage(
length,
priority,
message_flags,
class_id,
replicator_flags,
data_list_id,
local_to_parent,
age,
execution_state,
name_id,
entity_alignment
),
guiStreamResourceID(gui_id)
{}
static void
ConstructCreateMessage(Script *script);
};
//##########################################################################
//################## CharacterInterface__GameModel ##################
//##########################################################################
class VehicleInterface__GameModel:
public Adept::Interface__GameModel
{
public:
typedef Adept::Interface__GameModel BaseClass;
int
brbMode;
Stuff::Point3D
cameraStartOffset;
Stuff::Point3D
cameraExternalTargetStartOffset1;
Stuff::Point3D
cameraExternalTargetStartOffset2;
Stuff::Point3D
cameraExternalTargetStartOffset3;
Stuff::UnitQuaternion
cameraStartAngle;
Stuff::Scalar
maxTargetDistance;
Stuff::Scalar
turnSpeedZoomModifierTorso;
Stuff::Scalar
turnSpeedZoomModifierYaw;
Stuff::Scalar
turnSpeedZoomModifierPitch;
Stuff::Radian
rotationPerSecond;
Stuff::Point3D
translationPerSecond;
Stuff::Scalar
deathTimer;
static void
GetFogTableEntry(int entry, Stuff::Scalar * pfogNearClip, Stuff::Scalar * pfogFarClip, Stuff::Scalar * pfogDensity);
Adept::ResourceID playerAIResource;
Stuff::Scalar
delayTorsoCenter,
maxSpeedAboveMinTransToTorsoCenterKPH;
enum {
BRBModeAttributeID = Interface__GameModel::NextAttributeID,
CameraStartOffsetAttributeID,
CameraExternalTargetStartOffset1AttributeID,
CameraExternalTargetStartOffset2AttributeID,
CameraExternalTargetStartOffset3AttributeID,
CameraStartAngleAttributeID,
MaxTargetDistanceAttributeID,
TurnSpeedZoomModifierTorsoAttributeID,
TurnSpeedZoomModifierYawAttributeID,
TurnSpeedZoomModifierPitchAttributeID,
RotationPerSecondAttributeID,
TranslationPerSecondAttributeID,
DeathTimerAttributeID,
PlayerAIResourceAttributeID,
DelayTorsoCenterAttributeID,
MaxSpeedAboveMinTransToTorsoCenterKPHAttributeID,
NextAttributeID
};
static bool
ReadAndVerify(
VehicleInterface__GameModel *model,
ModelAttributeEntry *attribute_entry,
const char *data,
char **error,
int error_buffer = 128
);
static void
ConstructGameModel(Script *script);
};
//##########################################################################
//######################## AnalogControlSave
//##########################################################################
struct AnalogControlSave
{
public:
Stuff::Scalar vehicleSpeedDemand;
Stuff::Scalar vehicleYawDemand;
Stuff::Scalar torsoPitchDemand;
Stuff::Scalar torsoYawDemand;
enum {
LookForward = 0,
LookLeft,
LookRight,
LookBack, // new angle to take out copters.
LookDown // new DFA look, with ability to clear clutter from legs as well.
};
int lookCommand;
int commandReady;
int command;
AnalogControlSave()
{
commandReady = false;
vehicleSpeedDemand = 0.0f;
vehicleYawDemand = 0.0f;
torsoPitchDemand = 0.0f;
torsoYawDemand = 0.0f;
lookCommand = LookForward;
}
};
//##########################################################################
//######################## VehicleInterface #########################
//##########################################################################
class VehicleInterface:
public Adept::Interface
{
friend class Vehicle;
friend bool __stdcall Check_MouseControl(void);
friend void __stdcall Activate_MouseControl(void);
public:
static void
InitializeClass();
static void
TerminateClass();
typedef Adept::Interface BaseClass;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Inheritance support
//
public:
typedef VehicleInterface__CreateMessage CreateMessage;
typedef VehicleInterface__GameModel GameModel;
typedef VehicleInterface__ExecutionStateEngine ExecutionStateEngine;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Run-time Construction and Destruction Support
//
public:
static VehicleInterface*
Make(
CreateMessage *message,
ReplicatorID *base_id
);
Adept::Replicator::CreateMessage*
SaveMakeMessage(MemoryStream *stream, Adept::ResourceFile *res_file);
void
Respawn(Adept::Entity::CreateMessage *message);
void
CommonCreation(CreateMessage *message);
void LoadControlStream (const ResourceID& control_stream);
protected:
VehicleInterface(
ClassData *class_data,
CreateMessage *message,
ReplicatorID *base_id,
ElementRenderer::Element *element
);
~VehicleInterface();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Test Support
//
public:
void
TestInstance() const;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// AI support
//
protected:
PlayerAI *m_PlayerAI;
public:
void ConnectPlayerAI (PlayerAI *p1);
PlayerAI *getPlayerAI (void)
{ return m_PlayerAI; }
void PlayerAIRun (bool value);
void PlayerAIFieldBase (bool value);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class Data & Game Model Support
//
public:
typedef VehicleInterface__GameModel
GameModel;
const GameModel*
GetGameModel()
{return Cast_Pointer(const GameModel*, gameModelResource.GetPointer());}
static ClassData
*DefaultData;
static VehicleInterface*
GetInstance()
{
return reinterpret_cast<VehicleInterface *>( GlobalPointers::GetGlobalPointer(VehicleInterfaceGlobalPointerIndex));
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Interface support
//
public:
//DAVE HUD
// GUIInterface *
// guiInterface;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Execution Support
//
public:
void
PreCollisionExecute(Stuff::Time till);
void
PostCollisionExecute(Stuff::Time till);
void
BRBModeSimulation(Time till);
void
CameraSimulation(Time till);
void ReadJoystick (Time till);
void ReadMouse (Time till);
void HandleKeyboard (Time till);
void ReadControls(Time till);
void ModifyControls(Time till); // this is where we do things like tone down control when in zoom
void ApplyControls(Time till);
// void CheckEndAutoPilot(Time till);
void CheckEndFieldBase(Time till);
AnalogControlSave
controlPacket;
ChainOf<VehicleCommand*> quedCommands;
int commandCount;
void QueCommand(int command);
Stuff::Scalar
longTomAngle;
Stuff::Scalar
longTomDistance;
LongTomWeaponSubsystem
*longTom;
BlanderizerOf<Stuff::Point3D>
jumpHeightAdjustment;
// MSL 5.05 Advance Mode
int
m_AdvanceMode;
int
m_HeatMode;
int
m_AmmoMode;
Stuff::Scalar FlushTimer;
void
UpdateTargetReticuleCameraPosition(void);
void
UpdateViews(void);
void
UpdateBRBView(void);
void
UpdateTargetReticule(Time till);
void
ConnectVehicleToInterface(Vehicle *connecting_vehicle,MWPlayer *player=NULL);
void
ResetInterface(int execution_mode);
inline void
ShowHUDIfOn(bool fShowHUDIfShould);
inline void
ShowStatic(bool fShowBW);
inline void
ShowZoomIfOn(bool fShowZoomIfShould);
Adept::Entity*
CastCollisionLine();
void
SetCameraMode(int camera_mode, const Stuff::Point3D* point = 0);
void
SetCameraMode(int camera_mode, const VehicleInterface__GameModel& model);
void
SetDeathMode();
void SetEjectMode();
void
CreateWeatherEffect();
void
CreateWeatherEffect(const Adept::ResourceID& resource_id);
Stuff::SlotOf<Adept::Effect *>
weatherEffect;
enum {
NormalFogType = 0,
UnderwaterFogType,
SmokeFogType,
TransitionToSmokeFogType,
TransitionToNormalFogType
};
void SetLightAmpFlareOut(Stuff::Scalar modifier);
Stuff::Scalar m_CurrentLightAmpMod;
int
m_eFogType; // for setting below water fog
Stuff::Scalar
m_fltFogTransitionEndTime;
bool
fNeedSmoke;
bool
m_fHudCurrentlyShowing; // used to allow us to continually and cheaply call hide for all views
bool
m_fZoomCurrentlyShowing; // used to allow us to continually and cheaply call hide for all views
bool
m_fStaticView;
bool
m_fHudShouldShow; // current state of the hud
Stuff::Scalar
m_maxSpeedTorsoCenterKPH;
bool
cameraDirty;
bool
isAttachedVehicleAMech; // in order to operate external camera better during jump animation
int
vehiclerootJointIndex; // Store this for height info when jumping
Adept::GUITextObject
*guiTargetInfo;
Stuff::Scalar
addedLengthToTarget; // this is valid when we are using external target reticule
Stuff::Scalar
percentage_of_zoom_screen_on_left;
Stuff::Scalar
percentage_of_zoom_screen_on_right;
Stuff::Scalar
percentage_of_zoom_screen_on_top;
Stuff::Scalar
percentage_of_zoom_screen_on_bottom;
int
m_currentTargetReticuleCameraPosition;
void RestorePreferredCameraPosition();
static void SetPreferredCameraPosition(int newCameraReticuleCameraPosition);
Stuff::Scalar spinTorsoPitchTimer;
Stuff::Scalar spinTorsoYawTimer;
Stuff::Scalar spinMechYawTimer;
Stuff::Scalar spinTorsoPitchMagnitude;
Stuff::Scalar spinTorsoYawMagnitude;
Stuff::Scalar spinMechYawMagnitude;
void SpinTorsoPitch(Stuff::Scalar magnitude)
{
Check_Object(this);
if (magnitude > 0.0f)
spinTorsoPitchMagnitude = 1.0f;
else
spinTorsoPitchMagnitude = -1.0f;
spinTorsoPitchTimer+=Abs(magnitude);
Max_Clamp(spinTorsoPitchTimer, 0.5f);
};
void SpinTorsoYaw(Stuff::Scalar magnitude)
{
Check_Object(this);
if (magnitude > 0.0f)
spinTorsoYawMagnitude = 1.0f;
else
spinTorsoYawMagnitude = -1.0f;
// MSL 5.02 Torso Spin
// spinTorsoYawMagnitude = 1.0f;
spinTorsoYawTimer+=Abs(magnitude);
Max_Clamp(spinTorsoYawTimer, 1.5f);
};
void SpinMechYaw(Stuff::Scalar magnitude)
{
Check_Object(this);
if (magnitude > 0.0f)
spinMechYawMagnitude = 1.0f;
else
spinMechYawMagnitude = -1.0f;
// MSL 5.02 Mech Spin
// spinMechYawMagnitude = 1.0f;
spinMechYawTimer+=Abs(magnitude);
Max_Clamp(spinMechYawTimer, 1.5f);
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Message Support
//
public:
enum {
ChangeViewMessageID = Adept::Interface::NextMessageID,
JoyStickButton1MessageID,
GetUpCommandMessageID,
ShutDownCommandMessageID,
CrouchCommandMessageID,
JumpCommandMessageID,
AnimDiagTest1MessageID, // anim diag test 1
AnimDiagTest2MessageID,
AnimDiagTest3MessageID,
AnimDiagTest4MessageID,
AnimDiagTest5MessageID,
AnimDiagTest6MessageID,
AnimDiagTest7MessageID,
AnimDiagTest8MessageID,
DebugTextMessageID,
Lancemate1MessageID,
Lancemate2MessageID,
Lancemate3MessageID,
LancemateAllMessageID,
LancemateAttackMyTargetMessageID,
LancemateDefendMyTargetMessageID,
LancemateFormOnMeMessageID,
LancemateHoldFireMessageID,
LancemateGoToMyNavPointMessageID,
LancemateStopMessageID,
LancemateShutdownMessageID,
LancemateAttackNearestThreatMessageID,
LancemateRepairAtNearestRepairBayMessageID,
LancemateCapturePlayersFlagMessageID,
ChangeWeaponModeMessageID,
WeaponGroup1MessageID,
WeaponGroup2MessageID,
WeaponGroup3MessageID,
WeaponGroup4MessageID,
WeaponGroup5MessageID,
WeaponGroup6MessageID,
NextWeaponGroupMessageID,
PreviousWeaponGroupMessageID,
NextWeaponMessageID,
TopDownViewMessageID,
ToggleInvulnerableMessageID,
KillCurrentTargetMessageID,
NextVehicleMessageID,
ToggleSearchLightMessageID,
SelfDestructMessageID,
CoolantMessageID,
SendChatMessage1MessageID,
SendChatMessage2MessageID,
SendChatMessage3MessageID,
SendChatMessage4MessageID,
ToggleLightAmpMessageID,
ToggleHUDMessageID,
ToggleMultiplayerScoringMessageID,
NextNavPointMessageID,
PreviousNavPointMessageID,
NextEnemyMessageID,
PreviousEnemyMessageID,
NearestEnemyMessageID,
TargetReticuleEnemyMessageID,
ToggleRadarRangeMessageID,
ForwardMessageID,
BackwardMessageID,
RotateLeftMessageID,
RotateRightMessageID,
OriginMessageID,
TorsoTwistLeftMessageID,
TorsoTwistRightMessageID,
PitchUpMessageID,
PitchDownMessageID,
ReverseMessageID,
FireWeaponMessageID,
LookLeftMessageID,
LookRightMessageID,
LookBackMessageID,
LookDownMessageID,
CameraDetachMessageID,
CameraResetMessageID,
CameraTerrainMessageID,
CameraTargetReticuleMessageID,
CameraPitchUpMessageID,
CameraPitchDownMessageID,
CameraRollRightMessageID,
CameraRollLeftMessageID,
CameraYawLeftMessageID,
CameraYawRightMessageID,
CameraPanUpMessageID,
CameraPanDownMessageID,
CameraPanLeftMessageID,
CameraPanRightMessageID,
CameraZoomInMessageID,
CameraZoomOutMessageID,
MFDComm1MessageID,
MFDComm2MessageID,
MFDComm3MessageID,
MFDComm4MessageID,
MFDComm5MessageID,
MFDComm6MessageID,
MFDComm7MessageID,
MFDComm8MessageID,
Throttle0MessageID,
Throttle10MessageID,
Throttle20MessageID,
Throttle30MessageID,
Throttle40MessageID,
Throttle50MessageID,
Throttle60MessageID,
Throttle70MessageID,
Throttle80MessageID,
Throttle90MessageID,
Throttle100MessageID,
CenterTorsoToLegsMessageID,
CenterLegsToTorsoMessageID,
NextFriendlyMessageID,
PreviousFriendlyMessageID,
NearestFriendlyMessageID,
ToggleZoomReticuleMessageID,
ShowObjectivesMessageID,
// MSL 5.05 Objective Switch
MuteMessageID,
MouseTorsoToggleMessageID,
MouseDeltaToggleMessageID,
// AutoPilotMessageID,
EjectMessageID,
OverrideAutoCenterToTorsoMessageID,
ToggleRadarPassiveMessageID,
ShowMapMessageID,
StartChatMessageID,
StartTeamChatMessageID,
OverrideShutdownMessageID,
LeftMFDMessageID,
RightMFDMessageID,
ToggleMouseControlMessageID,
ToggleLargeChatMessageID,
ShutDownOnlyCommandMessageID,
StartUpOnlyCommandMessageID,
TakeSnapShotMessageID,
ToggleGroup1MessageID,
ToggleGroup2MessageID,
ToggleGroup3MessageID,
ToggleGroup4MessageID,
ToggleGroup5MessageID,
ToggleGroup6MessageID,
ToggleGroupWeaponModeMessageID
//
// Section for keys we don't want in the release build
//
,
DebugFastMessageID,
FreezeGameLogicMessageID,
ImmediateWeaponLockModeMessageID,
SucceedMissionMessageID,
FailMissionMessageID,
ToggleDebugHudMessageID,
NextMessageID
};
void StartChatMessageHandler (Adept::ReceiverDataMessageOf<int> *message);
void StartTeamChatMessageHandler (Adept::ReceiverDataMessageOf<int> *message);
void LeftMFDMessageHandler (Adept::ReceiverDataMessageOf<int> *message);
void RightMFDMessageHandler (Adept::ReceiverDataMessageOf<int> *message);
void ToggleRadarPassiveMessageHandler (Adept::ReceiverDataMessageOf<int> *message);
void
ChangeViewMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
JoyStickButton1MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
GetUpCommandMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ShutDownCommandMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ShutDownOnlyCommandMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
StartUpOnlyCommandMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CrouchCommandMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
JumpCommandMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
AnimDiagTest1MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
AnimDiagTest2MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
AnimDiagTest3MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
AnimDiagTest4MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
AnimDiagTest5MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
AnimDiagTest6MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
AnimDiagTest7MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
AnimDiagTest8MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
DebugTextMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Lancemate1MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Lancemate2MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Lancemate3MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateAllMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateAttackMyTargetMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateDefendMyTargetMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateFormOnMeMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateHoldFireMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateGoToMyNavPointMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateStopMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateShutdownMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateAttackNearestThreatMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateRepairAtNearestRepairBayMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LancemateCapturePlayersFlagMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ChangeWeaponModeMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
WeaponGroup1MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
WeaponGroup2MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
WeaponGroup3MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
WeaponGroup4MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
WeaponGroup5MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
WeaponGroup6MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleGroup1MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleGroup2MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleGroup3MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleGroup4MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleGroup5MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleGroup6MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
NextWeaponGroupMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
PreviousWeaponGroupMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
NextWeaponMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
TopDownViewMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleInvulnerableMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
KillCurrentTargetMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
NextVehicleMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleSearchLightMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
SelfDestructMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CoolantMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
SendChatMessage1MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
SendChatMessage2MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
SendChatMessage3MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
SendChatMessage4MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleLightAmpMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleHUDMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleMultiplayerScoringMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
NextNavPointMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
PreviousNavPointMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
NextEnemyMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
PreviousEnemyMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
NearestEnemyMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
TargetReticuleEnemyMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleRadarRangeMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ForwardMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
BackwardMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
RotateLeftMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
RotateRightMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
OriginMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
TorsoTwistLeftMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
TorsoTwistRightMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
PitchUpMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
PitchDownMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ReverseMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
FireWeaponMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LookLeftMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LookRightMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LookBackMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
LookDownMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraDetachMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraResetMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraTerrainMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraTargetReticuleMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
VehicleInterface::CalculatePresetsForExternalTargetReticule(); // helper function for above function
void
CameraPitchUpMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraPitchDownMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraRollRightMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraRollLeftMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraYawLeftMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraYawRightMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraPanUpMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraPanDownMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraPanLeftMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraPanRightMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraZoomInMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CameraZoomOutMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
MFDComm1MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
MFDComm2MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
MFDComm3MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
MFDComm4MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
MFDComm5MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
MFDComm6MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
MFDComm7MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
MFDComm8MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle0MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle10MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle20MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle30MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle40MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle50MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle60MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle70MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle80MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle90MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
Throttle100MessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CenterTorsoToLegsMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
CenterLegsToTorsoMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
NextFriendlyMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
PreviousFriendlyMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
NearestFriendlyMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void
ToggleZoomReticuleMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
// MSL 5.05 Objective Switch
void ShowObjectivesMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void MuteMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void MouseTorsoToggleMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void MouseDeltaToggleMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
// void AutoPilotMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void EjectMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void OverrideAutoCenterToTorsoMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void ShowMapMessageHandler (Adept::ReceiverDataMessageOf<int> *message);
void OverrideShutdownMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void ToggleMouseControlMessageHandler(Adept::ReceiverDataMessageOf <int> *message);
void ToggleLargeChatMessageHandler(Adept::ReceiverDataMessageOf <int> *message);
void ToggleGroupWeaponModeMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
//
// Section for keys we don't want in the release build
//
void DebugFastMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void FreezeGameLogicMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void ImmediateWeaponLockModeMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void TakeSnapShotMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void SucceedMissionMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void FailMissionMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
void ToggleDebugHudMessageHandler(Adept::ReceiverDataMessageOf<int> *message);
protected:
static const MessageEntry
MessageEntries[];
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Attribute Support
//
public:
enum {
JoyStickXAxisAttributeID = Interface::NextAttributeID,
JoyStickYAxisAttributeID,
JoyStickRudderAttributeID,
JoyStickThrottleAttributeID,
JoyStickHatAttributeID,
MouseWheelAttributeID,
MousePosXAttributeID,
MousePosYAttributeID,
MouseDeltaXAttributeID,
MouseDeltaYAttributeID
};
enum {
LeftFootForce,
RightFootForce,
FireMissleForce,
FireProjectileForce,
HitBackForce,
HitFrontForce,
HitLeftForce,
HitRightForce,
WaterMoveForce,
FallDownForce,
maxForces
};
public:
//
// Attributes
//
Vehicle
*vehicle;
bool
animDiagnosticFlag;
Stuff::Scalar
joystickXAxis,
joystickYAxis,
joystickRudder,
joystickThrottle,
joystickHat,
lastJoystickHat,
lastJoystickTrottle;
int
throttle0Percent,
throttle10Percent,
throttle20Percent,
throttle30Percent,
throttle40Percent,
throttle50Percent,
throttle60Percent,
throttle70Percent,
throttle80Percent,
throttle90Percent,
throttle100Percent;
int
rotateLeftCommand,
rotateRightCommand,
forwardCommand,
backwardCommand,
originCommand,
pageUp,
insert,
lControl,
rControl,
cameraDetachCommand,
cameraResetCommand,
cameraTerrainCommand,
cameraTargetReticuleCommand,
lookLeft,
lookRight,
lookBack,
lookDown;
Stuff::Time m_LastForwardCommand,m_LastBackwardCommand;
bool
reverseToggle;
#ifdef LAB_ONLY
bool
m_fImmediateWeaponLockMode;
#endif
// int reverseCommand;
int
cameraPitchUp,
cameraPitchDown,
cameraRollRight,
cameraRollLeft,
cameraYawLeft,
cameraYawRight,
cameraPanUp,
cameraPanDown,
cameraPanLeft,
cameraPanRight,
cameraZoomIn,
cameraZoomOut;
int
torsoTwistRight,
torsoTwistLeft,
pitchUp,
pitchDown;
int
fireRequest;
int
group1FireRequest,
group2FireRequest,
group3FireRequest,
group4FireRequest,
group5FireRequest,
group6FireRequest;
int
isCooling;
bool
needFireRequestReset;
int netBandwidth;
int mouseWheel;
Stuff::Scalar mousePosX,mousePosY;
Stuff::Scalar mouseDeltaX,mouseDeltaY;
bool mouseTorsoToggle;
bool mouseDeltaToggle;
int m_FrameCount;
bool preventFireThisFrame; // allows preventing shooting when changing directions of view.
bool m_MouseEnable;
int m_TorsoSpaceBarDown;
static bool m_MouseYEnable;
static Scalar m_MouseMinChange;
static Scalar m_MouseMaxChange;
virtual void ForceFeedBack (bool value);
virtual void MouseAllowed (bool value)
{
m_MouseEnable = value;
Interface::MouseAllowed (value);
}
static void LoadMouseYFlag (NotationFile *startup_ini);
static void LoadMouseMinMax (NotationFile *startup_ini);
HGOSFORCEEFFECT m_Forces[maxForces];
HGOSFORCEEFFECT m_HitForce;
gosJoystick_ForceEffect m_HitForceDetails;
void PlayForce (int id);
void StopForce (int id);
void PlayHitForce (Stuff::Point3D dir,Stuff::Scalar amplitude);
Stuff::Point3D
cameraOffset;
Stuff::YawPitchRoll
cameraRotation;
Stuff::Scalar
externalCameraOffsetStartMinZ;
Stuff::Point3D
vehiclePosition;
int leftFootFlag;
int rightFootFlag;
//Stuff::Scalar joystick_throttle_center;
//Stuff::Scalar joystick_throttle_dead_low;
//Stuff::Scalar joystick_throttle_dead_high;
Scalar UseJoystickThrottle (Scalar value);
bool ThrottleMoved (Scalar newvalue);
Scalar curMouseX,curMouseY;
bool m_ChangeMouseTorsoThisFrame;
// HACK JSE
Stuff::Scalar
testAcceleration;
// HACK JSE
Stuff::Scalar
lastSpeedDemand;
int
brbMode;
Stuff::Scalar
currentDistance;
enum{
InMechCameraView = 0,
ExternalCameraAttachedView,
ExternalCameraDetachedView,
ExternalCameraTerrainFollowView,
ExternalCameraTargetReticule,
TopDownCameraView,
NextCameraView,
EditorCameraView
};
int
cameraView;
int
rememberCameraView;
Stuff::Point3D
rememberCameraOffset;
Stuff::YawPitchRoll
rememberCameraRotation;
bool reticuleZoomShowing;
bool userRequestForreticuleZoomChange;
bool requestedZoomChange;
void ShowZoom (void);
void HideZoom (void);
bool
cinemaPlaying;
void SetCinemaPlaying(bool value);
//This is for the targeting system of the attached vehicle
MWMover*
GetEyeSite(Stuff::MString site_name);
MWMover*
eyeSitePointer;
// sound tests
Stuff::Scalar
twistRightTime,
twistLeftTime,
pitchUpTime,
pitchDownTime,
rotateRightTime,
rotateLeftTime;
Stuff::Scalar
deathTimer;
public:
virtual void EnterChatMode (bool team);
virtual void LeaveChatMode (void);
bool
observerMode;
SlotOf<Adept::Entity*>
observingEntity;
void
SetObservationMode();
void
FindNextMechToFollow();
// [MSR SPECTATOR STUFF] ===================================================
//##########################################################################
//############### VehicleInterface::Spectator components ############
//##########################################################################
public:
// public data
enum // exposed state constants
{
STATE_FRONT_SHOT,
STATE_OVERSHOULDER_SHOT,
STATE_FIXED_TRACKING_SHOT,
STATE_SIDE_SHOT,
STATE_STD_OBSERVERMODE,
STATE_DEATH_SEQUENCE_START,
STATE_DEATH_SEQUENCE_TRANS,
STATE_DEATH_SEQUENCE_SHOT,
};
enum
{
NO_RANGE = -1,
CLOSESHOT = 0,
MEDIUMSHOT = 1,
LONGSHOT = 2,
};
// constants
enum
{
FROM_NOWHERE,
MW4_STD_OBSERVER,
MSR_SPECTATOR,
};
// camera methods
void DampedOverShoulderShot
(
LinearMatrix4D parent_local_to_world,
Point3D heroPos,
Point3D enemyPos,
int shotType
);
void OverShoulderShot
(
LinearMatrix4D parentLocalToWorld,
LinearMatrix4D targetLocalToWorld,
int shotType
);
void SideShot
(
LinearMatrix4D parentLocalToWorld,
LinearMatrix4D targetLocalToWorld
);
void FrontShot
(
LinearMatrix4D parentLocalToWorld,
LinearMatrix4D targetLocalToWorld,
int shotType
);
void FixedTracking
(
LinearMatrix4D targetLocalToWorld,
int shotRangeTypeID
);
void HeroDeathToEnemyStart(LinearMatrix4D dyingLocalToWorld);
void HeroDeathToEnemyTrans(LinearMatrix4D dyingLocalToWorld, float fPer, const LinearMatrix4D& newHeroLocalToWorld = *(const LinearMatrix4D*)NULL);
void StdObserverMode(Point3D cameraPntLTW);
void GetObserverPosition(Entity* parent, bool bUseTORSO, bool bUseInterpolation, Stuff::Point3D camOffset, Stuff::YawPitchRoll camRotation, Point3D& ptWorldPos, LinearMatrix4D& camToParent = *(LinearMatrix4D*)NULL); // jcem
void ClearFixedPoint();
private:
int m_curView; // temporary variable used for debugging cameras
int m_curRange; // range of current camera used
Mech* m_pEnemy;
Mech* m_pMechDying;
Stuff::Time m_fTimeStateEnd; // start of time of current camera state
Point3D m_fixedPoint; // fixed camera location for FixedTrack camera
Point3D m_dyingHeroPoint; // point where our dying hero is lying
LinearMatrix4D m_dyingLocalToWorld;
bool m_fDyingSequenceInited; // true when enter death sequence
bool m_fDeathTransDone; // true when death transition camera sequence is completed
bool m_fDeathTransInited; // true when death trans anim delay is done
Point3D m_heroPos;
Point3D m_oldHeroPos;
Point3D m_enemyPos;
Point3D m_oldEnemyPos;
Point3D m_tempEnemyPos; // most immediate last enemy pos for transitioning in overshoulder shots
bool m_fDampingInited;
bool m_fDampTransDone;
Entity* m_pLastParent; // GetObserverPosition to avoid Torso Twitching
Stuff::Scalar m_fLastTorsoYAW; // GetObserverPosition to avoid Torso Twitching
Stuff::Time m_fLastTorsoTime;
public: // restoring scope for existing declarations in file
// END [MSR SPECTATOR STUFF]===============================================
private:
void
IssueLancemateCommand(Adept::ReceiverDataMessageOf<int> *message, int command);
bool m_Temporary_AddedLancemate;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Debug Speed Display
public:
Stuff::Scalar
currentSpeedMPS,
currentSpeedKPH,
speedDemandMPS,
speedDemandKPH,
minForwardKPH,
minReverseKPH,
minForwardNormal,
minReverseNormal,
maxForwardKPH,
maxReverseKPH;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Target Support
//
public:
void
SetTargetInfo();
void
CalculateInterfaceTargetPosition();
void
ExecuteNavSystem();
void
UpdateTargetWindow();
// void UpdateReticuleWindow();
void
SetNavPoint(MechWarrior4::NavPoint *nav_point);
MechWarrior4::NavPoint*
GetNavPoint();
Stuff::Time
targetStartTime;
Stuff::Time
targetLossTime;
Adept::Entity*
TraceToParent(Adept::Entity *entity);
SlotOf<Adept::Entity*>
targetQueryEntity;
SlotOf<Adept::Entity*>
lockedTargetEntity;
SlotOf<Adept::Entity*>
lockedTargetEntityPart;
Stuff::Point3D
pointLockedEntityPartOffset;
SlotOf<Adept::Entity*>
targetEntity;
SlotOf<Adept::Entity*>
targetLastVehicleEntity;
SlotOf<Adept::Entity*>
targetEntityPart;
// Adept::GUITextObject* m_LockTimeObject;
Stuff::Scalar
targetLockTime;
Stuff::Scalar
timeEntityHasBeenLocked;
Stuff::SlotOf<Entity*>
m_interfaceTarget; //This is the targeted entity according to the HUD
Stuff::SlotOf<NavPoint*>
m_selectedNavPoint;
ElementRenderer::CameraElement
*m_targetCamera,
*m_reticuleCamera;
bool ShowTargetCamera (void);
void
SetGUITarget(Entity* target);
Entity*
GetGUITarget();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// HUD damage support
static bool hudDamageMode;
static bool hudTargetDamageMode;
// MSL 5.02 headshot
bool hudZoomDestroyed;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Torso return support
enum {
LeaveTorsoAlone,
CenterTorsoToLegs,
CenterLegsToTorso,
};
static int perminateTorsoMode;
int temporaryTorsoMode;
Stuff::Scalar torsoAtRestTimer;
void
SetPerminateTorsoMode(int mode)
{Check_Object(this); perminateTorsoMode = mode;};
int
GetPerminateTorsoMode()
{Check_Object(this); return perminateTorsoMode;};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Game Reaction Support
//
public:
// NOTE: the constants here must EXACTLY match those in ABLScripts\MWCONST.ABI!
enum SOUND_TRIGGER { // not really, they are events but I don't want to change the name back
CRITICAL_HIT_WEAPON = 0,
CRITICAL_HIT_GIMP,
DAMAGE_CRITICAL,
NO_HEAT, // must be in order of heat so sounds don't play on the way down.
LOW_HEAT,
MED_HEAT,
HIGH_HEAT,
MELTDOWN,
AUTO_SHUTDOWN_OVERRIDE,
SHUTDOWN,
POWER_UP,
MISSILE_LOCKED,
MISSILE_LOCKLOST,
MISSILE_LOCKED_ON_ME,
RADAR_RANGE_CHANGE,
RADAR_ON,
RADAR_OFF,
ZOOM_RETICAL_ENGAGED,
AMS_ENGAGED,
LAMS_ENGAGED,
NARC_SIGNAL_START,
NARC_HIT,
NEW_VEHICLE_RADAR_POWER_UP,
TORSO_TWIST,
TORSO_TWIST_MAX_REACHED,
RADAR_JAMMED,
COOLANT_FLUSH_START,
COOLANT_FLUSH_STOP,
OUT_OF_AMMO,
OBJECT_SCANNED,
INTERNAL_PPC_WASH,
HILL_TOO_STEEP,
TARGET_DESTROYED,
TERRAIN_BAD,
NARC_SIGNAL_STOP,
RECHARGE_BEAM,
RECHARGE_MISSILE,
RECHARGE_PROJECTILE,
RECHARGE_PPC,
STEP_WATER_START,
STEP_WATER_STOP,
ENGINE_WALK,
ENGINE_RUN,
ENGINE_STOP,
ENGINE_REVERSE,
NAVPOINT_REACHED,
KILLAWARDED,
FRIENDLYFIREPENALTY,
YOUHAVEFLAG,
YOUINLEAD,
TEAMMATEDESTROYED,
FLAGTAKEN,
FLAGCAPTURED,
FLAGCAPTUREDHORN,
FLAGRETURNED,
HILLCONTESTED,
HILLCAPTURED,
REPAIR_START,
REPAIR_STOP,
DEFENDEDDESTROYED,
MECH_DESTROYED,
ENEMY_DEAD,
ALLY_DEAD,
LANCE_DEAD,
COMM_OFF,
INIT_REPAIR,
REPAIR_COMP,
ENEMY_CAPTURED,
NAV_ALPHA,
NAV_BETA,
NAV_GAMMA,
NAV_DELTA,
NAV_EPSL,
EXTRACT_POINT,
TEAM_DEAD,
YOU_WIN,
YOU_LOSE,
VICTORY_BABY,
ALL_HILLS,
BASE_CAPTURED,
COLISEUM_AHH,
COLISEUM_AWW,
COLISEUM_BOO1,
COLISEUM_BOO2,
COLISEUM_BOO3,
COLISEUM_CHANT1,
COLISEUM_CHANT3,
COLISEUM_CHEER1,
COLISEUM_CHEER2,
COLISEUM_CHEER3,
COLISEUM_CHEER4,
COLISEUM_CHEER5,
COLISEUM_CHEER8,
COLISEUM_CHEER9,
COLISEUM_CROWD1,
COLISEUM_CROWD2,
COLISEUM_ENERGYZAP,
COLISEUM_HORN,
COLISEUM_JEERS,
COLISEUM_ROAR,
COLISEUM_STADAMB,
COLISEUM_FACTORYHORN,
COLISEUM_FACTORYBANG,
COLISEUM_FACTORYBUZZ,
COLISEUM_FACTORYCLANG,
COLISEUM_FACTORYDRILL,
COLISEUM_FACTORYSTEAM,
COLISEUMAMB,
COLISEUM_JUNGLEBIRD1,
COLISEUM_JUNGLEBIRD2,
COLISEUM_JUNGLEBIRD3,
COLISEUM_JUNGLEBIRD4,
COLISEUM_JUNGLEMONKEY1,
COLISEUM_JUNGLEMONKEY2,
TARGETATTACKED,
TARGETDESTROYED,
COMPONENT_DESTROYED,
COMPDESTROYED,
ZOOM_FAIL,
MECH_AMMOBAY_FIRE,
RETICULE_WASH,
WEAPON_DESTROYED,
AMMO_DUMPED,
NO_WEAPON,
FLAGCAPTUREDBUZZER,
ALARM1,
ALARM2
};
void ReactToEvent (SOUND_TRIGGER event, DWORD dwParam = 0);
void StartEngineIdle (void);
void EndEngineIdle (void);
protected:
Stuff::SlotOf<Adept::AudioCommand *> m_EngineIdleSound;
Stuff::SlotOf<Adept::AudioCommand *> m_WaterStepSound;
Stuff::Time m_LastTorsoTwistSoundTime;
Stuff::Time m_LastStepWaterSoundTime;
Stuff::Time m_LastHeatSoundTime;
Stuff::Time m_NewRadarSoundTime;
Stuff::Time m_LastEngineSoundTime;
Stuff::Time m_LastAmmoDepletedSoundTime;
int m_LastHeatLevel; // equal to the last heat event
bool m_PlayedDamageCritical;
Stuff::SlotOf<Adept::AudioCommand*>
m_narcSound,
m_torsoSound,
m_missileLockSound,
m_coolantSound,
m_damageCriticalSound,
m_heatCriticalSound;
void ReactToStepWater(bool start);
void ReactToCriticalWeaponHit();
void ReactToGimp();
void ReactToMechShutDownOverride();
void ReactToMechShutDown();
void ReactToMechPowerUp();
void ReactToIncommingMissile();
void ReactToTargetDestruction();
// MSL 5.03 Ammo Dump
void ReactToAmmoDump();
void ReactToOutOfAmmo();
//SFX Betty Support
void ReactToHeatMeltdown();
void ReactToMissileLock(bool lock);
void ReactToZoom();
void ReactToAMS();
void ReactToLAMS();
void ReactToCoolantFlush(bool start);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Network weapon support
//
public:
bool weaponCommandReady;
bool lockedWeaponCommandReady;
WeaponUpdate
weaponCommand;
WeaponUpdate
lockedWeaponCommand;
void SaveTarget();
void MarkWeapon(int weapon)
{
weaponCommandReady = true;
weaponCommand.weaponFired |= (0x1 << weapon);
}
void MarkLockedWeapon(int weapon)
{
lockedWeaponCommandReady = true;
lockedWeaponCommand.weaponFired |= (0x1 << weapon);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Weapon Support
//
protected:
Stuff::Time m_LastShootTime;
public:
Stuff::Time LastTimeShot (void)
{
return m_LastShootTime;
}
void FireGroup(Stuff::Time till, int group);
void GroupFireGroup (Stuff::Time till,Stuff::ChainOf<Weapon *>& group);
void ChainFireGroup (Stuff::Time till,ChainIteratorOf<Weapon *> *groupWeaponIterator, int nGroupID = 1);
public:
void
FireWeapon(Stuff::Time till);
void
FireGroup1(Stuff::Time till);
void
FireGroup2(Stuff::Time till);
void
FireGroup3(Stuff::Time till);
void
FireGroup4(Stuff::Time till);
void
FireGroup5(Stuff::Time till);
void
FireGroup6(Stuff::Time till);
bool
RequestingToFire();
void
InitializeWeapons();
Scalar
GetLockTimeMultiplier(Vehicle * vehicle, Entity * target);
Stuff::Scalar
GetWeaponLockTime();
Scalar
GetWeaponLockTime(Weapon *weapon);
// MSL 5.04 Weapon Lock
float
GetLockModifier(Vehicle * vehicle, Entity * target);
bool
GetLockModifierSTK(Vehicle * vehicle, Entity * target);
bool
GetWeaponLock();
bool
GetWeaponLockLRM();
bool
GetWeaponLockMRM();
bool
GetWeaponLockSRM();
bool
GetWeaponLockSSRM();
bool
GetWeaponLock(Weapon *weapon);
void
SetWeaponMode(int weapon_mode);
void
ToggleGroupWeaponMode(int group);
// MSL 5.03 Dump Ammo
void DumpAmmoRound();
void DumpAmmoMagazine();
bool SetCameraViewLevel(int level);
int
GetCameraViewLevel() const;
bool IsZoomReticuleAllowed();
int
weaponMode;
int
selectedWeaponGroup;
int
groupWeaponMode[6];
bool
fireBlocked;
Stuff::Scalar
weaponFireTime;
Stuff::ChainOf<Weapon *>
weaponGroup[6];
enum{
ChainFireMode = 0,
GroupFireMode,
SingleFireMode
};
void
SetBoundsWarningsEnabled(bool enabled);
bool
GetBoundsWarningsEnabled() const;
Stuff::Scalar
GetLastTimeFiredWeaponGroup(int weapon_group) const;
bool
m_AIControlledHUD;
protected:
Stuff::ChainIteratorOf<Weapon *>
*weaponIterator;
Stuff::ChainIteratorOf<Weapon *>
*groupWeaponIterator[6];
bool
m_BoundsWarningsEnabled;
Stuff::Scalar
m_LastTimeFiredWeaponGroup[6];
public:
#if 0
class LancemateCommandDisplay
{
public:
LancemateCommandDisplay();
~LancemateCommandDisplay();
void SetText(const std::string& text, Stuff::Scalar duration);
void Update();
private:
Stuff::Time m_WhenToStopDisplayingText;
Adept::GUITextObject* m_Object;
};
LancemateCommandDisplay m_LancemateCommandDisplay;
#endif
public:
// jcem
bool SetNewRequestedTarget(Entity* target_entity);
int IsObserving(bool bIncObserverMode = false) const;
int GetShutdownState() const;
int GetJumpJetState() const;
int GetGUIRadarStates(int state[/*12*/]) const;
int GetEjectableState() const;
};
inline
VehicleInterface__ExecutionStateEngine::VehicleInterface__ExecutionStateEngine(
ClassData *class_data,
VehicleInterface *vehicle_interface,
FactoryRequest *request
):
Adept::Entity__ExecutionStateEngine(class_data, vehicle_interface, request)
{
}
class CamerashipParams
{
public:
bool m_bAllowChatDisplay;
bool m_bAllowBOTs;
bool m_bDisplayCameraStates;
Stuff::Scalar m_fDistGroundLevel;
Stuff::Scalar m_fDistGroundLevelShift;
Stuff::Scalar m_fTimeScoringInterval;
Stuff::Scalar m_fTimeScoringDuration;
Stuff::Scalar m_fTimeIdleChange;
Stuff::Scalar m_fTimeStandard;
Stuff::Scalar m_fDistStandard;
Stuff::Scalar m_fHeightStandard;
Stuff::Scalar m_fHeightStandardLookAt;
Stuff::Scalar m_fTimeDeathWatching;
Stuff::Scalar m_fOffsDeathWatchingX;
Stuff::Scalar m_fOffsDeathWatchingY;
Stuff::Scalar m_fOffsDeathWatchingZ;
Stuff::Scalar m_fTimeDeathTransition;
Stuff::Scalar m_fTimeFixedTracking;
Stuff::Scalar m_fOffsFixedTrackingX;
Stuff::Scalar m_fOffsFixedTrackingY;
Stuff::Scalar m_fOffsFixedTrackingZ;
Stuff::Scalar m_fTimeSideShot;
Stuff::Scalar m_fDistSideShot;
Stuff::Scalar m_fOffsSideShotX;
Stuff::Scalar m_fOffsSideShotY;
Stuff::Scalar m_fOffsSideShotHeadY;
Stuff::Scalar m_fTimeFrontShot;
Stuff::Scalar m_fOffsFrontShotHeadY;
Stuff::Scalar m_fOffsFrontShotCameraY;
Stuff::Scalar m_fDistFrontShot;
Stuff::Scalar m_fTimeOverShoulder;
Stuff::Scalar m_fOffsOverShoulderHeroX;
Stuff::Scalar m_fOffsOverShoulderHeroY;
Stuff::Scalar m_fOffsOverShoulderHeroZ;
Stuff::Scalar m_fOffsOverShoulderEnemyY;
public:
CamerashipParams();
void LoadOptions(NotationFile& startup_ini);
};
extern BOOL g_baChainFireMode[3];
int GetFiringMode();
}