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

185 lines
5.3 KiB
C++

#pragma once
#include "MW4.hpp"
#include "helicopter.hpp"
namespace Adept
{
class Effect;
}
namespace MechWarrior4
{
class Dropship;
class Subsystem;
//##########################################################################
//############### Dropship::ExecutionStateEngine #####################
//##########################################################################
class Dropship__ExecutionStateEngine:
public Helicopter__ExecutionStateEngine
{
public:
static void InitializeClass();
static void TerminateClass();
typedef Helicopter__ExecutionStateEngine BaseClass;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Run-time Construction and Destruction Support
//
public:
typedef Dropship__ExecutionStateEngine*
(*Factory)(
Dropship *entity,
FactoryRequest *request
);
static Dropship__ExecutionStateEngine* Make(Dropship *mover,FactoryRequest *request);
protected:
Dropship__ExecutionStateEngine(ClassData *class_data,Dropship *mover,FactoryRequest *request);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class Data support
//
public:
static ClassData *DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// State stuff
//
public:
enum {
DoorOpenMotionState = Helicopter::ExecutionStateEngine::StateCount,
DoorCloseMotionState,
StateCount
};
int
RequestState(int new_state,void* data = NULL);
protected:
static const StateEntry StateEntries[];
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Test Support
//
public:
void TestInstance() const;
};
//##########################################################################
//############################ Helicopter #############################
//##########################################################################
//-------------------------------------------------------------------------
// The following helper classes must always be typedef'd or overriden by an
// inheritor
//
typedef Helicopter__ClassData Dropship__ClassData;
typedef Helicopter__Message Dropship__Message;
typedef Helicopter__CreateMessage Dropship__CreateMessage;
typedef Helicopter__GameModel Dropship__GameModel;
//----------------------- End of inheritance stuff ------------------------
class Dropship : public Helicopter
{
friend class MovementClass;
public:
static void InitializeClass();
static void TerminateClass();
typedef Helicopter BaseClass;
//##########################################################################
// Inheritance support
//
public:
typedef Dropship__ClassData ClassData;
typedef Dropship__GameModel GameModel;
typedef Dropship__Message Message;
typedef Dropship__ExecutionStateEngine ExecutionStateEngine;
typedef Dropship__CreateMessage CreateMessage;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Run-time Construction and Destruction Support
//
public:
static Dropship* Make(CreateMessage *message,ReplicatorID *base_id);
protected:
Dropship(ClassData *class_data,CreateMessage *message,ReplicatorID *base_id,ElementRenderer::Element *element);
~Dropship();
void Reuse(const CreateMessage *message,ReplicatorID *base_id);
void Respawn(Adept::Entity::CreateMessage *message);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class Data support
//
public:
static ClassData *DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Execution Support
//
public:
Stuff::Point3D landTargetPosition;
int m_NumEngines;
Stuff::Time m_TakeOffStart; // when to start moving up
void TakeOff(Stuff::Scalar runway_distance);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
protected:
Stuff::Scalar m_DoorAmount;
MWMover *m_DoorAR,*m_DoorFR,*m_DoorAL,*m_DoorFL;
bool m_FirstFrame,m_HasDoors;
Stuff::Scalar m_BaseYDoorAR,m_BaseYDoorFR,m_BaseYDoorAL,m_BaseYDoorFL;
Stuff::Time m_DeathStart;
bool m_CanDie; // 2 seconds if on ground to play secondary
public:
void Land(void);
void LandingMovementSimulation(Stuff::Time till);
void TakeOffThrusterSimulation(Stuff::Time till,const Stuff::Vector3D& new_velocity,const Stuff::Vector3D& instantanious_angular_velocity,bool canswitch);
virtual void EngineDead (void);
void PreCollisionExecute(Time till);
void DoorOpenAnim (Stuff::Time slice);
void DoorCloseAnim (Stuff::Time slice);
bool orderDoorOpen (void);
bool orderDoorClose (void);
void ReactToDestruction(int damage_mode, int damage_type);
void InitializeArmorArray();
// MSL 5.04 Dropship
//should this dropship be scored?
bool m_scoreThisDropship;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Test Support
//
public:
void TestInstance() const;
};
inline Dropship__ExecutionStateEngine::Dropship__ExecutionStateEngine(
ClassData *class_data,
Dropship *mover,
FactoryRequest *request
):
BaseClass(class_data, mover, request)
{}
}