![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 1999-2000 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: fixWingAct.h,v $ $Revision: 1.44 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00013 00014 #ifndef fixWingAct_H_ 00015 #define fixWingAct_H_ 00016 00017 #include <vlpi/disEnums.h> 00018 #include "vrfobjcore/actCmpnt.h" 00019 #include <matrix/LibMatrix.h> 00020 00021 class DtString; 00022 class DtSimManager; 00023 class DtFixedWingEntityStateRepository; 00024 class DtFixedWingActuatorDescriptor; 00025 class DtFixedWingFlightPSR; 00026 00028 class DtInputPortGroup; 00029 class DtConstrainedAnalogInputPort; 00030 class DtConstrainedDualAxisAnalogInputPort; 00031 class DtBooleanInputPort; 00032 00043 #include "vrfmodel/vrfmodelDefines.h" 00044 class DT_DLL_vrfmodel DtFixedWingActuatorComponent : public DtActuatorComponent 00045 { 00046 00047 public: 00048 00051 DtFixedWingActuatorComponent(const DtString& name, 00052 DtVrfObject* owner, 00053 DtSimManager* simManager, 00054 DtComponentDescriptor* desc = 0, 00055 DtReaderWriterRegistry* parentRegistry = 0); 00056 00057 00061 virtual ~DtFixedWingActuatorComponent(); 00062 00065 virtual bool init(); 00066 00069 virtual DtString type() const; 00070 00073 virtual void tick(); 00074 00078 static DtSimComponent * creator(const DtString& name, 00079 DtVrfObject* owner, 00080 DtSimManager* simManager, 00081 DtComponentDescriptor* desc = 0, 00082 DtReaderWriterRegistry* parentRegistry = 0); 00083 00084 public: 00088 virtual void calculateBodyVelocity(const DtVector& oldRelativeVelocity, 00089 const DtDcm& newLocalOrientation, DtVector& newBodyVelocity); 00090 00094 virtual void calculateAirborneAcceleration(const DtVector oldLocalPosition, 00095 double oldSpeed, const DtDcm& newLocalOrientation, 00096 const DtVector& newBodyVelocity, double throttle, 00097 DtVector& newRelativeAcceleration); 00098 00099 protected: 00100 00102 virtual void doFlying(); 00103 00105 virtual void doTaxiing(); 00106 00109 virtual bool isTouchingDown(const DtVector& newLocalPosition, 00110 const DtVector& newRelativeVelocity); 00111 00114 virtual bool isTakingOff(bool isOnGround, double speed); 00115 00116 virtual bool updateGroundInteractionPoints( 00117 DtGroundInteractionPt *left, 00118 DtGroundInteractionPt *right, 00119 DtGroundInteractionPt *nose, 00120 DtGroundInteractionPt *center, 00121 const DtDcm& localOrientation, 00122 const DtVector& localPosition, 00123 double halfHeightOfTerrainIntersectChord); 00124 00129 virtual double calculateYawRate(double pedal); 00130 00132 virtual double calculatePitchRate(double stickYValue); 00133 00135 virtual double calculateRollRate(double stickXValue); 00136 00137 virtual void calculateBodyRotationRates(double pedal, double stickXValue, 00138 double stickYValue, DtVector& newBodyRotationRates); 00139 00142 virtual void calculateOrientation(const DtDcm& 00143 oldLocalOrientation, const DtVector& newBodyRotationRates, 00144 DtDcm& newLocalOrientation); 00145 00147 virtual void calculateBodyGravity(const DtVector oldLocalPosition, 00148 const DtDcm& newLocalOrientation, DtVector& newBodyGravityAcceleration); 00149 00152 virtual void calculateThrustAcceleration(double throttle, 00153 DtVector& newBodyThrustAccleration); 00154 00159 virtual void calculateDragAcceleration(double oldSpeed, 00160 const DtVector& newBodyVelocity, bool flapsDeployed, 00161 DtVector& newBodyDragAccleration); 00162 00167 virtual void fallFromSky(const DtString& reason = DtString::nullString()); 00168 00169 //virtual bool collidesWithGround( 00172 00173 virtual bool collidesWithGround(const DtVector& oldLocalPosition, 00174 const DtVector& newLocalPosition, DtVector& localCenterGoundPosition); 00175 00177 void integrate(const DtVector& oldLocalPosition, 00178 const DtVector& oldRelativeVelocity, 00179 const DtVector& newRelativeAcceleration, DtVector& newLocalPosition, 00180 DtVector& newRelativeVelocity); 00181 00183 00186 virtual void useFuel(double fuelUsed); 00187 virtual double fuelLeft() const; 00188 00189 00193 virtual double calculateHeading(double oldHeading, 00194 double steering, double dT, double speed, double turningRadius); 00195 virtual void calculateScalarVelocityAndAcceleration( 00196 double oldPitch, double &scalarVelocity, double &scalarAcceleration); 00197 virtual double calculateMaxGroundSpeed(); 00198 virtual double calculateMaxGroundAcceleration(); 00199 virtual double calculateAcceleration(double pitch, double maxSpeed, 00200 double maxAccel); 00201 virtual double calculateAccelerationFromThrottle(); 00202 00203 virtual double calculateAccelerationFromSlope(double slope); 00204 00205 virtual double calculateAccelerationFromResistance(double maxSpeed, 00206 double maxAccel); 00207 virtual double calculateAccelerationFromBrake(double otherAccels); 00208 00209 virtual DtVector calculateProjectedLocation( 00210 const DtVector& oldLocalPosition, const DtVector& newBodyAcceleration, 00211 const DtVector& oldBodyVelocity, double newHeading); 00212 00213 virtual void calculateOrientationAndPositionOnGround( 00214 const DtVector& newLocalProjectedLocation, double newHeading, 00215 DtDcm& newLocalOrientation, DtVector& newLocalPosition); 00217 00218 virtual void updateRepository(const DtVector& newLocalPosition, 00219 const DtVector& newRelativeVelocity, 00220 const DtVector& newRelativeAcceleration, 00221 const DtDcm& newLocalOrientation, const DtVector& newBodyRotationRates, 00222 bool isOnGround, const DtAppearance& newAppearance); 00223 00224 virtual void updateDisplay() const; 00225 00228 virtual double maxThrustAcceleration() const; 00229 virtual double maxClimbRate() const; 00230 virtual double maxYawVelocity() const; 00231 virtual double maxPitchVelocity() const; 00232 virtual double maxRollVelocity() const; 00233 virtual double maxAltitude() const; 00234 00236 virtual bool createPortGroups(); 00237 00239 virtual bool createPorts(); 00240 00246 virtual bool createPSR(); 00247 00248 virtual void sendDetonation(const DtVector& geocentricPosition); 00249 00250 protected: 00251 00253 DtFixedWingActuatorComponent(); 00254 00256 DtFixedWingActuatorComponent(const DtFixedWingActuatorComponent & orig); 00257 00259 const DtFixedWingActuatorComponent & operator=(const 00260 DtFixedWingActuatorComponent & orig); 00261 00262 protected: 00263 00264 DtFixedWingEntityStateRepository * myFixedWingEntityState; 00265 DtFixedWingActuatorDescriptor * myFixedWingActuatorDescriptor; 00266 00269 00273 DtInputPortGroup* myFixedWingControlPortGroup; 00274 00280 DtConstrainedAnalogInputPort* myThrottlePort; 00281 00287 DtConstrainedDualAxisAnalogInputPort* myStickPort; 00288 00294 DtConstrainedAnalogInputPort* myPedalPort; 00295 00301 DtConstrainedAnalogInputPort* myBrakePort; 00302 00308 DtBooleanInputPort* myFlapsDeployedPort; 00309 00311 00314 DtFixedWingFlightPSR* myProcessState; 00315 00316 bool myFirstTick; 00318 bool mySentFallingMessage; 00319 }; 00320 00321 #endif