1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
#ifndef TAAIRMOVETYPE_H
#define TAAIRMOVETYPE_H
#include "AAirMoveType.h"
class CTAAirMoveType : public AAirMoveType
{
CR_DECLARE(CTAAirMoveType);
public:
enum FlyState {
FLY_CRUISING,
FLY_CIRCLING,
FLY_ATTACKING,
FLY_LANDING
} flyState;
/**
* needed to get transport close enough to what is going to be transported.
* better way ?
*/
bool dontCheckCol;
bool bankingAllowed;
/// to reset altitude back
float orgWantedHeight;
float3 circlingPos;
/// Used when circling something
float goalDistance;
/// need to pause between circling steps
int waitCounter;
/// Set to true on StopMove, to be able to not stop if a new order comes directly after
bool wantToStop;
/// TODO: Seems odd to use heading in unit, since we have toggled useHeading to false..
short wantedHeading;
float3 wantedSpeed;
/// Used to determine banking (since it is the current acceleration)
float3 deltaSpeed;
float currentBank;
float currentPitch;
// Provided by the unitloader
float turnRate;
float accRate;
float decRate;
float altitudeRate;
/// Distance needed to come to a full stop when going at max speed
float brakeDistance;
/// Set to true when transporting stuff
bool dontLand;
/// Scripts expect moverate functions to be called
int lastMoveRate;
/// force the aircraft to turn toward specific heading (for transports)
bool forceHeading;
short forceHeadingTo;
float maxDrift;
/// buffets the plane when idling
float3 randomWind;
CTAAirMoveType(CUnit* owner);
~CTAAirMoveType(void);
// MoveType interface
virtual void Update();
virtual void SlowUpdate();
virtual void StartMoving(float3 pos, float goalRadius);
virtual void StartMoving(float3 pos, float goalRadius, float speed);
virtual void KeepPointingTo(float3 pos, float distance, bool aggressive);
virtual void StopMoving();
virtual void Idle();
// Main state handlers
void UpdateLanded();
void UpdateTakeoff();
void UpdateLanding();
void UpdateFlying();
void UpdateCircling();
void UpdateHovering();
// Helpers for (multiple) state handlers
void UpdateHeading();
void UpdateBanking(bool noBanking);
void UpdateAirPhysics();
void UpdateMoveRate();
void SetGoal(float3 newPos, float distance);
void SetState(AircraftState newState);
bool CanLandAt(float3 pos);
void ExecuteStop();
void ForceHeading(short h);
void SetWantedAltitude(float altitude);
void SetDefaultAltitude(float altitude);
void CheckForCollision(void);
void DependentDied(CObject* o);
void Takeoff();
bool IsFighter();
};
#endif // TAAIRMOVETYPE_H
|