123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef _HOVERVEHICLE_H_
- #define _HOVERVEHICLE_H_
- #ifndef _VEHICLE_H_
- #include "T3D/vehicles/vehicle.h"
- #endif
- class ParticleEmitter;
- class ParticleEmitterData;
- // -------------------------------------------------------------------------
- class HoverVehicleData : public VehicleData
- {
- typedef VehicleData Parent;
- protected:
- bool onAdd() override;
- //-------------------------------------- Console set variables
- public:
- enum Sounds {
- JetSound,
- EngineSound,
- FloatSound,
- MaxSounds
- };
- DECLARE_SOUNDASSET_ARRAY(HoverVehicleData, HoverSounds, Sounds::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 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*) override;
- void unpackData(BitStream*) override;
- bool preload(bool server, String &errorStr) override;
- DECLARE_CONOBJECT(HoverVehicleData);
- static void initPersistFields();
- };
- // -------------------------------------------------------------------------
- class HoverVehicle : public Vehicle
- {
- typedef Vehicle Parent;
- private:
- HoverVehicleData* mDataBlock;
- SimObjectPtr<ParticleEmitter> mDustTrailEmitter;
- protected:
- bool onAdd() override;
- void onRemove() override;
- bool onNewDataBlock(GameBaseData *dptr,bool reload) override;
- void updateDustTrail( F32 dt );
- // Vehicle overrides
- protected:
- void updateMove(const Move *move) override;
- // Physics
- protected:
- void updateForces(F32) override;
- F32 getBaseStabilizerLength() const;
- bool mFloating;
- F32 mThrustLevel;
- F32 mForwardThrust;
- F32 mReverseThrust;
- F32 mLeftThrust;
- F32 mRightThrust;
- SFXSource* mJetSound;
- SFXSource* mEngineSound;
- SFXSource* 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() override;
- 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) override;
- DECLARE_CONOBJECT(HoverVehicle);
- DECLARE_CATEGORY("Actor \t Controllable");
- // static void initPersistFields();
- U32 packUpdate (NetConnection *conn, U32 mask, BitStream *stream) override;
- void unpackUpdate(NetConnection *conn, BitStream *stream) override;
- };
- #endif // _H_HOVERVEHICLE
|