tge/engine/game/vehicles/hoverVehicle.h
2017-04-17 06:17:10 -06:00

197 lines
4.7 KiB
C++
Executable File

//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
#ifndef _HOVERVEHICLE_H_
#define _HOVERVEHICLE_H_
#ifndef _VEHICLE_H_
#include "game/vehicles/vehicle.h"
#endif
class ParticleEmitter;
class ParticleEmitterData;
// -------------------------------------------------------------------------
class HoverVehicleData : public VehicleData
{
typedef VehicleData Parent;
protected:
bool onAdd();
//-------------------------------------- Console set variables
public:
enum Sounds {
JetSound,
EngineSound,
FloatSound,
MaxSounds
};
AudioProfile* sound[MaxSounds];
enum Jets {
// These enums index into a static name list.
ForwardJetEmitter, // Thrust forward
BackwardJetEmitter, // Thrust backward
DownwardJetEmitter, // Thrust down
MaxJetEmitters,
};
ParticleEmitterData* jetEmitter[MaxJetEmitters];
enum JetNodes {
// These enums index into a static name list.
ForwardJetNode,
ForwardJetNode1,
BackwardJetNode,
BackwardJetNode1,
DownwardJetNode,
DownwardJetNode1,
//
MaxJetNodes,
MaxDirectionJets = 2,
ThrustJetStart = ForwardJetNode,
MaxTrails = 4,
};
static const char *sJetNode[MaxJetNodes];
S32 jetNode[MaxJetNodes];
F32 dragForce;
F32 vertFactor;
F32 floatingThrustFactor;
F32 mainThrustForce;
F32 reverseThrustForce;
F32 strafeThrustForce;
F32 turboFactor;
F32 stabLenMin;
F32 stabLenMax;
F32 stabSpringConstant;
F32 stabDampingConstant;
F32 gyroDrag;
F32 normalForce;
F32 restorativeForce;
F32 steeringForce;
F32 rollForce;
F32 pitchForce;
F32 floatingGravMag;
F32 brakingForce;
F32 brakingActivationSpeed;
ParticleEmitterData * dustTrailEmitter;
S32 dustTrailID;
Point3F dustTrailOffset;
F32 triggerTrailHeight;
F32 dustTrailFreqMod;
//-------------------------------------- load set variables
public:
F32 maxThrustSpeed;
public:
HoverVehicleData();
~HoverVehicleData();
void packData(BitStream*);
void unpackData(BitStream*);
bool preload(bool server, char errorBuffer[256]);
DECLARE_CONOBJECT(HoverVehicleData);
static void initPersistFields();
};
// -------------------------------------------------------------------------
class HoverVehicle : public Vehicle
{
typedef Vehicle Parent;
private:
HoverVehicleData* mDataBlock;
ParticleEmitter * mDustTrailEmitter;
protected:
bool onAdd();
void onRemove();
bool onNewDataBlock(GameBaseData *dptr);
void updateDustTrail( F32 dt );
// Vehicle overrides
protected:
void updateMove(const Move *move);
// Physics
protected:
void updateForces(F32);
F32 getBaseStabilizerLength() const;
bool mFloating;
F32 mThrustLevel;
F32 mForwardThrust;
F32 mReverseThrust;
F32 mLeftThrust;
F32 mRightThrust;
AUDIOHANDLE mJetSound;
AUDIOHANDLE mEngineSound;
AUDIOHANDLE mFloatSound;
enum ThrustDirection {
// Enums index into sJetActivationTable
ThrustForward,
ThrustBackward,
ThrustDown,
NumThrustDirections,
NumThrustBits = 3
};
ThrustDirection mThrustDirection;
// Jet Threads
enum Jets {
// These enums index into a static name list.
BackActivate,
BackMaintain,
JetAnimCount
};
static const char* sJetSequence[HoverVehicle::JetAnimCount];
TSThread* mJetThread[JetAnimCount];
S32 mJetSeq[JetAnimCount];
bool mBackMaintainOn;
// Jet Particles
struct JetActivation {
// Convert thrust direction into nodes & emitters
S32 node;
S32 emitter;
};
static JetActivation sJetActivation[NumThrustDirections];
SimObjectPtr<ParticleEmitter> mJetEmitter[HoverVehicleData::MaxJetNodes];
U32 getCollisionMask();
void updateJet(F32 dt);
void updateEmitter(bool active,F32 dt,ParticleEmitterData *emitter,S32 idx,S32 count);
public:
HoverVehicle();
~HoverVehicle();
// Time/Move Management
public:
void advanceTime(F32 dt);
DECLARE_CONOBJECT(HoverVehicle);
// static void initPersistFields();
U32 packUpdate (NetConnection *conn, U32 mask, BitStream *stream);
void unpackUpdate(NetConnection *conn, BitStream *stream);
};
#endif // _H_HOVERVEHICLE