WSF
WsfBrawlerProcessor.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI//REL TO USA ONLY
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11//****************************************************************************
12// Updated by Infoscitex, a DCS Company
13//****************************************************************************
14
15#ifndef WSFBRAWLERPROCESSOR_HPP
16#define WSFBRAWLERPROCESSOR_HPP
17
18#include "wsf_brawler_export.h"
19
20#include "BrawlerPlatform.hpp"
21#include "UtInput.hpp"
22#include "UtTable.hpp"
23#include "UtVec3.hpp"
25class WsfDraw;
26class WsfLocalTrack;
28class WsfPlatform;
30class WsfScenario;
32#include "WsfStringId.hpp"
34class WsfTrack;
35
36// A component that adds brawler related capability to the platform.
37// This component should only be added to a platform if the platform has brawler attributes
38class WSF_BRAWLER_EXPORT WsfBrawlerProcessor : public WsfQuantumTaskerProcessor, public BrawlerPlatform
39// public WsfSimplePlatformComponent
40{
41public:
42 // static void RegisterComponentFactory(WsfScenario& aScenario);
43 static WsfBrawlerProcessor* Find(const WsfPlatform& aPlatform);
44
48 ~WsfBrawlerProcessor() override;
49
50 const char* GetScriptClassName() const override { return "WsfBrawlerProcessor"; }
51
53
54 WsfComponent* CloneComponent() const override { return Clone(); }
55 const int* GetComponentRoles() const override;
56 void* QueryInterface(int aRole) override;
57 // virtual void ComponentParentChanged(WsfPlatform* aPlatformPtr) { mPlatformPtr = aPlatformPtr; }
59
60 bool Initialize(double aSimTime) override;
61 bool ProcessInput(UtInput& aInput) override;
62 WsfProcessor* Clone() const override;
63
64 // virtual void Update(double aSimTime);
65
67
68
69 double GetTime() override;
70
73 void UpdateMissileMode() override;
74
76 bool HaveWeapons() override;
77
81 virtual void SetLocationWCS(const double aLocationWCS[3]);
82 virtual void SetLocationECI(const double aLocationWCS[3]);
83 virtual void SetLocationLLA(double aLat, double aLon, double aAlt);
85
86 using BrawlerPlatform::GetSpeed; // ft/s
87
91 double MindUpdate(double aSimTime) override;
92
94 WsfPerceptionProcessor* GetPerceptionProcessor() const { return mPerceptionProcessorPtr; }
96 WsfThreatProcessor* GetThreatProcessor() const { return mThreatProcessorPtr; }
97
103 double GetConsciousnessEventTime() override;
104
109 void SetNextConsciousnessEventTime(double aSimTime)
110 {
111 mLastConsciousnessEventTime = mNextConsciousnessEventTime;
112 mNextConsciousnessEventTime = aSimTime;
113 }
114 double GetNextConsciousnessEventTime() { return mNextConsciousnessEventTime; }
116
121 void AddSelfCalledConsciousnessEvent(double aEventTime);
122
126
127 // brawler aero command type 1
128 double EvaluateRates(UtVec3d& aAngularRates, // Radians/sec
129 UtVec3d& aLongitudinalAccel) override; // Meters/sec^2
130
131 // brawler aero command type 2
132 double EvaluateHeadingSpeedAltitude(const double& aHeading, // degrees
133 const double& aSpeed, // meters/sec
134 const double& aAltitude, // meters
135 const double& aMaxGees, // Gs
136 const double& aMaxClimb) override; // meters/sec
137 // brawler aero command type 3
138 double EvaluateTurnInPlaneWithSpeed(UtVec3d& aPlane, // World coordinates, meters
139 const double& aGees, // Gs
140 const double& aSpeed) override; // meters/sec
141 double EvaluateTurnInPlaneWithThrottle(UtVec3d& aPlane, // World coordinates, meters
142 const double& aGees, // Gs
143 const double& aThrottle) override; //[0-3]
144 // brawler aero command type 4
145 double EvaluateVectorWithSpeed(UtVec3d& aVelocityVector, // Directional unit vector
146 const double& aMaxGees, // Gs
147 const double& aSpeed) override; // meters/sec
148 double EvaluateVectorWithThrottle(UtVec3d& aVelocityVector, // Directional unit vector
149 const double& aMaxGees, // Gs
150 const double& aThrottle) override; //[0-3]
151
152 virtual double EvaluateAlternative(UtEntity& projectedState);
154
157
158 double SensorGimbalElevationLimit() override;
159 double SensorGimbalAzimuthLimit() override;
161
163
170
171 // Forward Acceleration Functions
172 double MaxForwardAcceleration_fps2() override;
173 double MinForwardAcceleration_fps2() override;
176 // Maximum Performance Turn Functions
177 double MaxInstantaneousGLoad_g() override;
178 double MinInstantaneousTurnRadius_ft() override;
179 double MaxInstantaneousTurnRate_rps() override;
180 double MaxSustainedGLoad_g() override;
181 double MinSustainedTurnRadius_ft() override;
182 double MaxSustainedTurnRate_rps() override;
183 // Comfortable Turn Functions
184 double MaxTacticalGLoad_g() override;
185 double MinTacticalTurnRadius_ft() override;
186 double MaxTacticalTurnRate_rps() override;
187 // Misc Performance Calculations
188 double CorneringVelocity_fps() override;
189 double SpecificEnergyRate_fps() override;
190 double CalcTurnRate_rps(const double& aClMax,
191 const double& aSpeed_fps,
192 const double& aDynamicPressure_psf,
193 const double& aWingArea_ft2) override;
194 // Weights
195 double CurrentWeight_lbs() override;
196 double EmptyWeight_lbs() override;
197 double CurrentFuelWeight_lbs() override;
198 double DesignWeightForMaxG_lbs() override;
199 // Structural Limits
200 double CurrentStructuralGLimit_g() override;
201 double StructuralGLimitAtDesignWeight_g() override;
202 double StructuralGLimitAboveDesignWeight_g() override;
203 // Data Functions
204 double DynamicPressure_psf() override;
205 double Mach() override;
206 double GetMaxCL() override;
207 double GetMaxCL(const double& aMach) override;
208 double GetMaxCL(const double& aAlt_ft, const double& aMach) override;
209 double GetAlphaAtMaxCL_deg() override;
210 double GetAlphaAtMaxCL_deg(const double& aMach) override;
211 double GetAlphaAtMaxCL_deg(const double& aAlt_ft, const double& aMach) override;
212 double MaxAngularRate_rps() override;
213
214 virtual double Lift(const double& alpha, // degrees (angle of attack)
215 const double& speed, // meters/sec
216 const double& altitude); // meters
217
218 virtual double Drag(const double& alpha, // degrees (angle of attack)
219 const double& speed, // meters/sec
220 const double& altitude); // meters
221
222 virtual double Thrust(const double& throttle, // setting [1-3]
223 const double& speed, // meters/sec
224 const double& altitude); // meters
225
226 virtual double Throttle(); // setting [1-3]
227
228 // virtual double Weight(); //use: CurrentWeight_lbs()
229 // virtual double DynamicPressure(); //use: virtual double DynamicPressure_psf()
230 virtual double Area(); // reference area or surface area (sq feet)
231 virtual double Alpha(); // angle of attack, degrees
232 virtual double AlphaCL0(); // alpha at zero lift (aircraft flying flat)
234
235protected:
240
241 WsfLocalTrack* GetTargetTrack();
242 UtEntity* GetTarget() override; // over-write
243 double FirstObservedTime(UtEntity* aTgtPtr) override; // over-write
244 UtEntity* GetThreat() override; // over-write
245 int GetNumberThreats() override; // over-write
247
248private:
249 // WsfPlatform* mPlatformPtr;
250
252 WsfPerceptionProcessor* mPerceptionProcessorPtr;
253
255 WsfThreatProcessor* mThreatProcessorPtr;
256
258 bool mFirstCE;
259
262 double mNextConsciousnessEventTime;
263
267 double mLastConsciousnessEventTime;
268
271 double mUserConsciousnessEventDT;
272
274 double LastConsciousnessEventTime() override { return mLastConsciousnessEventTime; } // replaces use of "tlstce"
275
276 UtTable::Curve* mCLMaxVsMachTablePtr;
277 UtTable::Curve* mAlphaAtCLMaxVsMachTablePtr;
278
279 double mStructuralGLimitAboveDesignWeight_g;
280
281 bool mDebug;
282 bool mDebugDrawAlternatives;
283 bool mDebugDrawNominalStates;
284 WsfDraw* mDrawPtr;
285
286 double mAlternativeMinScore;
287 double mAlternativeMaxScore;
288
291 UtVec3d GetEvaluationColor(double aScore);
292
295 void PopulateEntityFromTrack(UtEntity& aEntity, WsfTrack* aTrackPtr);
296 UtEntity mTargetEntity;
297 UtEntity mThreatEntity;
298};
299
301
302#endif
@ cWSF_COMPONENT_BRAWLER_PROCESSOR
Definition WsfBrawlerComponents.hpp:18
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
pointPtr SetLocationWCS(finalPos.GetData())
virtual void UpdateMissileMode()=0
double GetSpeed()
Definition BrawlerPlatform.cpp:550
virtual double SpecificEnergyRate_fps()=0
virtual double MinSustainedTurnRadius_ft()=0
virtual double MaxInstantaneousGLoad_g()=0
virtual double CurrentStructuralGLimit_g()=0
virtual double EvaluateRates(UtVec3d &aAngularRates, UtVec3d &aLongitudinalAccel)=0
BrawlerPlatform()
Definition BrawlerPlatform.cpp:29
virtual double CurrentWeight_lbs()=0
virtual double Mach()=0
virtual double CalcTurnRate_rps(const double &aClMax, const double &aSpeed_fps, const double &aDynamicPressure_psf, const double &aWingArea_ft2)=0
virtual double MaxForwardAcceleration_fps2()=0
virtual double MaxAngularRate_rps()=0
virtual double StructuralGLimitAtDesignWeight_g()=0
virtual double MaxSustainedGLoad_g()=0
virtual double SensorGimbalElevationLimit()=0
virtual UtEntity * GetThreat()=0
virtual double MaxTacticalGLoad_g()=0
virtual double EmptyWeight_lbs()=0
virtual double CurrentFuelWeight_lbs()=0
virtual double GetTime()=0
virtual double GetAlphaAtMaxCL_deg()=0
virtual double DesignWeightForMaxG_lbs()=0
virtual double GetMaxCL()=0
virtual double EvaluateVectorWithSpeed(UtVec3d &aVelocityVector, const double &aMaxGees, const double &aSpeed)=0
virtual double DynamicPressure_psf()=0
virtual double CorneringVelocity_fps()=0
virtual double EvaluateVectorWithThrottle(UtVec3d &aVelocityVector, const double &aMaxGees, const double &aThrottle)=0
virtual double MaxSustainedTurnRate_rps()=0
virtual double EvaluateTurnInPlaneWithThrottle(UtVec3d &aPlane, const double &aGees, const double &aThrottle)=0
virtual double FirstObservedTime(UtEntity *aTgt)
Definition BrawlerPlatform.hpp:120
virtual double MinForwardAccelerationWithGravity_fps2()=0
virtual bool HaveWeapons()
Definition BrawlerPlatform.cpp:2211
virtual double MinInstantaneousTurnRadius_ft()=0
virtual double EvaluateTurnInPlaneWithSpeed(UtVec3d &aPlane, const double &aGees, const double &aSpeed)=0
virtual double LastConsciousnessEventTime()
Definition BrawlerPlatform.hpp:142
virtual int GetNumberThreats()
Definition BrawlerPlatform.hpp:127
virtual double EvaluateHeadingSpeedAltitude(const double &aHeading, const double &aSpeed, const double &aAltitude, const double &aMaxGees, const double &aMaxClimb)=0
virtual double MaxForwardAccelerationWithGravity_fps2()=0
virtual double GetConsciousnessEventTime()
Definition BrawlerPlatform.hpp:141
virtual UtEntity * GetTarget()=0
virtual double SensorGimbalAzimuthLimit()=0
virtual double MaxInstantaneousTurnRate_rps()=0
virtual double MinForwardAcceleration_fps2()=0
virtual double MindUpdate(double aSimTime)
Definition BrawlerPlatform.cpp:173
virtual double MaxTacticalTurnRate_rps()=0
virtual double MinTacticalTurnRadius_ft()=0
virtual double StructuralGLimitAboveDesignWeight_g()=0
Definition WsfBrawlerProcessor.hpp:40
WsfBrawlerProcessor & operator=(const WsfBrawlerProcessor &)=delete
WsfComponent * CloneComponent() const override
Definition WsfBrawlerProcessor.hpp:54
void SetNextConsciousnessEventTime(double aSimTime)
Definition WsfBrawlerProcessor.hpp:109
WsfPerceptionProcessor * GetPerceptionProcessor() const
Accessor that returns the convenience pointer to the Perception Processor.
Definition WsfBrawlerProcessor.hpp:94
WsfBrawlerProcessor(WsfScenario &aScenario)
Definition WsfBrawlerProcessor.cpp:43
static WsfBrawlerProcessor * Find(const WsfPlatform &aPlatform)
Definition WsfBrawlerProcessor.cpp:310
double GetNextConsciousnessEventTime()
Definition WsfBrawlerProcessor.hpp:114
const char * GetScriptClassName() const override
Definition WsfBrawlerProcessor.hpp:50
WsfThreatProcessor * GetThreatProcessor() const
Accessor that returns the convenience pointer to the Threat Processor.
Definition WsfBrawlerProcessor.hpp:96
Definition WsfComponent.hpp:39
Provides the capability to draw shapes into the WSF replay file.
Definition WsfDraw.hpp:35
Definition WsfLocalTrack.hpp:32
Definition WsfPerceptionProcessor.hpp:38
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Definition WsfProcessor.hpp:39
WsfQuantumTaskerProcessor(WsfScenario &aScenario)
Definition WsfQuantumTaskerProcessor.cpp:40
bool ProcessInput(UtInput &aInput) override
Definition WsfQuantumTaskerProcessor.cpp:190
WsfProcessor * Clone() const override
Definition WsfQuantumTaskerProcessor.cpp:132
bool Initialize(double aSimTime) override
Definition WsfQuantumTaskerProcessor.cpp:146
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
const int * GetComponentRoles() const override
Definition WsfTaskManager.cpp:257
void * QueryInterface(int aRole) override
Definition WsfTaskManager.cpp:266
Definition WsfThreatProcessor.hpp:33
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Copyrights Multiple, All Rights Reserved