WSF
WsfFuel.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
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 WSFFUEL_HPP
16#define WSFFUEL_HPP
17
18#include "wsf_export.h"
19
20class UtScript;
21#include "WsfPlatformPart.hpp"
22class WsfRoute;
25
30{
31public:
33 {
37 };
38
39 WsfFuel(WsfScenario& aScenario);
40 ~WsfFuel() override;
41
42 WsfFuel* Clone() const override;
43
45
46 WsfComponent* CloneComponent() const override { return Clone(); }
47 const int* GetComponentRoles() const override;
48 void* QueryInterface(int aRole) override;
51
53
54 const char* GetScriptClassName() const override;
56
58
59 bool Initialize(double aSimTime) override;
60 bool Initialize2(double aSimTime) override;
61 bool ProcessInput(UtInput& aInput) override;
62 void Update(double aSimTime) override;
63 // NOTE: Fuel does not utilize TurnOn/TurnOff. It is updated when the mover is updated.
64 // If the mover is off then the fuel is considered to be off, and vice versa.
66
68
69 void OnPlatformUpdated(double aSimTime, WsfPlatform* aPlatformPtr) override;
71
73
74 virtual double GetConsumptionRate() { return mConsumeRate; }
75 virtual double GetConsumptionRate(const double aAltitude, const double aSpeed);
76 void SetConsumptionRate(double aRate) { mConsumeRate = aRate; }
77
78 virtual double GetSupplyRate() const { return 0.0; }
79 virtual double GetReceiveRate() const { return 0.0; }
80
81 virtual double GetNetDepletionRate();
82 virtual double GetNetDepletionRate(const double aAltitude, const double aSpeed);
83
84 virtual double GetMaximumQuantity() const { return mMaximumQuantity; }
85 virtual void SetMaximumQuantity(double aQuantity) { mMaximumQuantity = aQuantity; }
86
87 virtual double GetInitialQuantity() const { return mInitialQuantity; }
88 virtual void SetInitialQuantity(double aQuantity) { mInitialQuantity = aQuantity; }
89
90 virtual double GetReserveQuantity() const { return mReserveQuantity; }
91 virtual void SetReserveQuantity(double aQuantity);
92
93 double GetBingoQuantity() const { return mBingoQuantity; }
94 void SetBingoQuantity(double aQuantity);
95
96 virtual double GetQuantityRemaining() const { return mCurrentQuantity; }
97 virtual void SetQuantityRemaining(double aQuantity);
98
99 virtual double GetQuantityRequired(const WsfRoute& aRoute);
100 virtual double GetQuantityRequired(const double aDistance);
101 virtual double GetQuantityRequired(const double aDistance, const double aAltitude, const double aSpeed);
103
105
106
107 double FuelSecondsRemaining(const WsfRoute& aRoute);
108 double FuelSeconds(const double aPounds);
109 double FuelSeconds(const double aPounds, const double aSpeed, const double aAltitude);
110
112 double TimeAt(FuelState aFuelState);
114 double TimeAt(FuelState aFuelState, const double aSpeed, const double aAltitude);
115
117 double TimeTo(FuelState aFuelState);
119 double TimeTo(FuelState aFuelState, const double aAltitude, const double aSpeed);
120
122 double DistanceAt(FuelState aFuelState);
124 double DistanceAt(FuelState aFuelState, const double aAltitude, const double aSpeed);
125
127 double DistanceTo(FuelState aFuelState);
129 double DistanceTo(FuelState aFuelState, const double aAltitude, const double aSpeed);
130
132
133 bool IsBingo() const { return mBingoEventTriggered; }
134 bool IsOnReserve() const { return mReserveEventTriggered; }
135 bool IsEmpty() const { return mEmptyEventTriggered; }
136
138 virtual bool Refuel(double aSimTime);
139 virtual bool Refuel(double aSimTime, double aQuantity);
140
141 virtual WsfStringId GetModeId() const { return mMode; }
142 virtual std::string GetMode() const;
143
144 virtual void SetMode(WsfStringId aMode);
145 void SetMode(const std::string& aMode);
146
147 void SetPlatform(WsfPlatform* aPlatformPtr) override;
148
149protected:
150 // WsfFuel by default has no update interval
151 // Override these methods to get regular Update() calls
152 void SetUpdateInterval(double aInterval) override {}
153 double GetUpdateInterval() const override { return 0.0; }
154
155 double GetLastUpdateTime() const { return mLastUpdate; }
156
157 virtual double CalcConsumptionRate();
158
159 // Derived classes should use lookup tables for the consumption rate at different altitudes and speeds
160 virtual double CalcConsumptionRateAltitudeSpeed(const double aAltitude, const double aSpeed);
161
162 // Make internal scripts available to derived classes:
163 void ExecuteEmptyScript(double aSimTime);
164 void ExecuteReserveScript(double aSimTime);
165 void ExecuteBingoScript(double aSimTime);
166 void ExecuteRefuelScript(double aSimTime);
167
169 WsfFuel(const WsfFuel& aSrc);
170
172 WsfFuel& operator=(const WsfFuel& aSrc) = delete;
173
175 virtual double CalculateDeltaQuantity(double aSimTime);
176
177 void IncrementQuantity(double aDelta);
178 void DecrementQuantity(double aDelta);
179
182 void CheckEvents(double aSimTime);
183
184 void ResetFlags();
185
189
190private:
192 WsfScriptContext* mContextPtr;
193 UtScript* mOnEmptyScriptPtr;
194 UtScript* mOnReserveScriptPtr;
195 UtScript* mOnBingoScriptPtr;
196 UtScript* mOnRefuelScriptPtr;
197
198 double mConsumeRate; // Positive = Decreasing Quantity, Negative = Increasing Quantity
199
200 double mMaximumQuantity;
201 double mInitialQuantity;
202 double mCurrentQuantity;
203
204 bool mBingoEventTriggered;
205 bool mReserveEventTriggered;
206 bool mEmptyEventTriggered;
207 bool mFirstDeltaUpdate;
208
209 WsfStringId mMode; // Implementation-defined named mode that <may> impact fuel consumption.
210};
211
213
214#endif
@ cWSF_INITIALIZE_ORDER_FUEL
Definition WsfComponentRoles.hpp:173
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
@ cWSF_COMPONENT_FUEL
A 'fuel' component (WsfFuel).
Definition WsfComponentRoles.hpp:101
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfComponent.hpp:39
Definition WsfFuel.hpp:30
bool IsOnReserve() const
Definition WsfFuel.hpp:134
virtual WsfStringId GetModeId() const
Definition WsfFuel.hpp:141
virtual double GetReceiveRate() const
Definition WsfFuel.hpp:79
void ResetFlags()
Definition WsfFuel.cpp:185
virtual double GetMaximumQuantity() const
Definition WsfFuel.hpp:84
virtual double GetReserveQuantity() const
Definition WsfFuel.hpp:90
bool IsBingo() const
Definition WsfFuel.hpp:133
double GetUpdateInterval() const override
Definition WsfFuel.hpp:153
double mBingoQuantity
Reserve fuel (defaults to 0).
Definition WsfFuel.hpp:188
int GetComponentInitializationOrder() const override
Definition WsfFuel.hpp:49
WsfFuel(WsfScenario &aScenario)
Definition WsfFuel.cpp:30
virtual double GetConsumptionRate()
Definition WsfFuel.hpp:74
virtual double GetQuantityRemaining() const
Definition WsfFuel.hpp:96
double mReserveQuantity
Definition WsfFuel.hpp:187
void DecrementQuantity(double aDelta)
Definition WsfFuel.cpp:711
FuelState
Definition WsfFuel.hpp:33
@ ON_EMPTY
Definition WsfFuel.hpp:36
@ ON_BINGO
Definition WsfFuel.hpp:34
@ ON_RESERVE
Definition WsfFuel.hpp:35
void IncrementQuantity(double aDelta)
Definition WsfFuel.cpp:706
double GetBingoQuantity() const
Definition WsfFuel.hpp:93
virtual double GetInitialQuantity() const
Definition WsfFuel.hpp:87
bool IsEmpty() const
Definition WsfFuel.hpp:135
WsfFuel & operator=(const WsfFuel &aSrc)=delete
Assignment constructor.
double mLastUpdate
Definition WsfFuel.hpp:186
void SetUpdateInterval(double aInterval) override
Definition WsfFuel.hpp:152
void CheckEvents(double aSimTime)
Definition WsfFuel.cpp:720
virtual double GetSupplyRate() const
Definition WsfFuel.hpp:78
double GetLastUpdateTime() const
Definition WsfFuel.hpp:155
virtual void SetMaximumQuantity(double aQuantity)
Definition WsfFuel.hpp:85
WsfComponent * CloneComponent() const override
Definition WsfFuel.hpp:46
void SetConsumptionRate(double aRate)
Definition WsfFuel.hpp:76
virtual double CalculateDeltaQuantity(double aSimTime)
Calculates a delta fuel quantity.
Definition WsfFuel.cpp:687
virtual void SetInitialQuantity(double aQuantity)
Definition WsfFuel.hpp:88
virtual WsfObject * Clone() const =0
virtual void Update(double aSimTime)
Definition WsfPlatformPart.cpp:322
bool Initialize2(double aSimTime) override
Definition WsfPlatformPart.cpp:291
const char * GetScriptClassName() const override
Definition WsfPlatformPart.cpp:683
void * QueryInterface(int aRole) override
Definition WsfPlatformPart.cpp:143
WsfPlatformPart(const WsfScenario &aScenario, int aPartType)
Definition WsfPlatformPart.cpp:62
bool Initialize(double aSimTime) override
Definition WsfPlatformPart.cpp:276
const int * GetComponentRoles() const override
Definition WsfPlatformPart.cpp:137
virtual void SetPlatform(WsfPlatform *aPlatformPtr)
Definition WsfPlatformPart.hpp:113
bool ProcessInput(UtInput &aInput) override
Definition WsfPlatformPart.cpp:347
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
A collection of WsfWaypoint objects that represent a path to be followed.
Definition WsfRoute.hpp:40
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfScriptContext.hpp:71
Definition WsfSinglePlatformObserver.hpp:30
virtual void OnPlatformUpdated(double aSimTime, WsfPlatform *aPlatformPtr)
Called after each mover update.
Definition WsfSinglePlatformObserver.hpp:41
Copyrights Multiple, All Rights Reserved