WSF
WsfSixDOF_Sequencer.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 2020 Infoscitex, a DCS 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#ifndef WSFSIXDOFSEQUENCER_HPP
13#define WSFSIXDOFSEQUENCER_HPP
14
15#include "wsf_six_dof_export.h"
16
17#include <cinttypes>
18#include <set>
19#include <string>
20#include <vector>
21
22#include "UtCloneablePtr.hpp"
23class UtInput;
24#include "UtVec3dX.hpp"
25#include "WsfSixDOF_Object.hpp"
26
27namespace wsf
28{
29namespace six_dof
30{
31class WSF_SIX_DOF_EXPORT Sequencer : public Object
32{
33public:
34 Sequencer() = default;
35
36 Sequencer& operator=(const Sequencer& other) = delete;
37
38 Sequencer* Clone() const;
39
40 void SetParentVehicle(Mover* aParentVehicle) override;
41
42 bool ProcessInput(UtInput& aInput);
43 bool Initialize(int64_t aSimTime_nanosec);
44
45 std::string GetName() const override { return mObjName; }
46 void SetName(const std::string& aName) override { mObjName = aName; }
47
48 // Update should be called every frame
49 void Update(int64_t aSimTime_nanosec);
50
51 // This adds the prefix to all object names to this
52 // sequencer and all of its subobjects
53 void AdjustNaming(const std::string& aNamePrefix);
54
55 // This should be called when a sequencer is first started
56 void StartUp(int64_t aSimTime_nanosec);
57
58 // This returns true if there are time-based actions pending.
59 // aTimeOfEvents_nanosec contains the sim time of the all pending time-based actions
60 bool PendingTimeEvents(int64_t aSimTime_nanosec, std::set<int64_t>& aTimeOfEvents_nanosec);
61
62 // This returns true if there if the sequencer was newly activated.
63 // It returns false if the sequencer was already activated.
64 bool ActivateExternally();
65
66protected:
67 Sequencer(const Sequencer& aSrc);
68
69 // Events (can be daisy-chained or triggered in parallel)
70 // Events include things such as elapsed flight time, reaching an
71 // altitude, dynamic pressure falling below a set level, reaching
72 // a downrange distance, sensing a g-level (such as decaying
73 // thrust), etc.
99
109
110 // Actions (can be daisy-chained or triggered in parallel)
111 // Actions include things like jettisoning a stage/object, firing
112 // retro thrusters on the separated stage during separation,
113 // firing the engine on the current stage, and changing to a new
114 // aero mode (typically by name) to represent the new aero mode
115 // without the previous stage.
133
142
143 // This is used by TestForActivation to set
144 // the various counts/flags used for working
145 // with the 'all events' setting
146 void SetAllEventCounts();
147
148 // This is used by TestForActivation to determine
149 // if activation should occur, based on the
150 // 'all events' setting
152
153 // This will test the sequencer and activate it
154 // and perform action(s) if appropriate. It returns
155 // the time (sim_time) of activation
156 int64_t TestForActivation(int64_t aSimTime_nanosec);
157
158 int64_t GetTimerTime() const;
159
162
163 std::vector<std::unique_ptr<SequencerEvent>> mEventList;
164 std::vector<std::unique_ptr<SequencerAction>> mActionList;
165 std::vector<UtCloneablePtr<Sequencer>> mSubSequencerList;
166
167 bool mActivated = false;
168 bool mAllEvents = false;
169
172
174};
175} // namespace six_dof
176} // namespace wsf
177
178#endif
aObjectPtr Update(simTime)
This is a base class for detailed air movers. This umbrella can cover RB6 or PM6 models.
Definition WsfSixDOF_Mover.hpp:58
std::string mObjName
Definition WsfSixDOF_Object.hpp:42
Definition WsfSixDOF_Sequencer.hpp:32
bool Initialize(int64_t aSimTime_nanosec)
Definition WsfSixDOF_Sequencer.cpp:1068
size_t mAllEventNeededCount
Definition WsfSixDOF_Sequencer.hpp:170
bool mActivated
Definition WsfSixDOF_Sequencer.hpp:167
int64_t TestForActivation(int64_t aSimTime_nanosec)
Definition WsfSixDOF_Sequencer.cpp:161
bool ProcessInput(UtInput &aInput)
Definition WsfSixDOF_Sequencer.cpp:583
int64_t GetTimerTime() const
Definition WsfSixDOF_Sequencer.cpp:1091
void SetAllEventCounts()
Definition WsfSixDOF_Sequencer.cpp:1124
int64_t mLastSimTime_nanosec
Definition WsfSixDOF_Sequencer.hpp:160
SequencerActionType
Definition WsfSixDOF_Sequencer.hpp:117
@ ActivateSubobjectSequencer
Definition WsfSixDOF_Sequencer.hpp:129
@ IgniteEngine
Definition WsfSixDOF_Sequencer.hpp:121
@ TerminateThrust
Definition WsfSixDOF_Sequencer.hpp:126
@ ShutdownSubObject
Definition WsfSixDOF_Sequencer.hpp:124
@ JettisonObject
Definition WsfSixDOF_Sequencer.hpp:119
@ ShutdownEngine
Definition WsfSixDOF_Sequencer.hpp:125
@ NoAction
Definition WsfSixDOF_Sequencer.hpp:118
@ IgniteSelfObject
Definition WsfSixDOF_Sequencer.hpp:123
@ JettisonSelf
Definition WsfSixDOF_Sequencer.hpp:120
@ DisableControls
Definition WsfSixDOF_Sequencer.hpp:131
@ EnableSizeFactor
Definition WsfSixDOF_Sequencer.hpp:128
@ IgniteSubObject
Definition WsfSixDOF_Sequencer.hpp:122
@ EnableControls
Definition WsfSixDOF_Sequencer.hpp:130
@ ChangeAeroMode
Definition WsfSixDOF_Sequencer.hpp:127
Sequencer & operator=(const Sequencer &other)=delete
void SetParentVehicle(Mover *aParentVehicle) override
Definition WsfSixDOF_Sequencer.cpp:573
size_t mAllEventCurrentCount
Definition WsfSixDOF_Sequencer.hpp:171
Sequencer * Clone() const
Definition WsfSixDOF_Sequencer.cpp:27
std::vector< std::unique_ptr< SequencerEvent > > mEventList
Definition WsfSixDOF_Sequencer.hpp:163
int64_t mElapsedTimer_nanosec
Definition WsfSixDOF_Sequencer.hpp:161
std::vector< std::unique_ptr< SequencerAction > > mActionList
Definition WsfSixDOF_Sequencer.hpp:164
std::string GetName() const override
Definition WsfSixDOF_Sequencer.hpp:45
void CheckForAllEventActivation()
Definition WsfSixDOF_Sequencer.cpp:1138
void SetName(const std::string &aName) override
Definition WsfSixDOF_Sequencer.hpp:46
std::vector< UtCloneablePtr< Sequencer > > mSubSequencerList
Definition WsfSixDOF_Sequencer.hpp:165
bool mExternalActivation
Definition WsfSixDOF_Sequencer.hpp:173
SequencerEventType
Definition WsfSixDOF_Sequencer.hpp:75
@ BooleanInput
Definition WsfSixDOF_Sequencer.hpp:96
@ DynamicPressureBelow_psf
Definition WsfSixDOF_Sequencer.hpp:81
@ NoEvent
Definition WsfSixDOF_Sequencer.hpp:97
@ ManualInputButtonReleased
Definition WsfSixDOF_Sequencer.hpp:95
@ ManualInputTrigger
Definition WsfSixDOF_Sequencer.hpp:93
@ ManualInputButton
Definition WsfSixDOF_Sequencer.hpp:94
@ FuelPercentBelow
Definition WsfSixDOF_Sequencer.hpp:84
@ StaticPressureAbove_psf
Definition WsfSixDOF_Sequencer.hpp:82
@ AboveAlt_ft
Definition WsfSixDOF_Sequencer.hpp:78
@ Timer
Definition WsfSixDOF_Sequencer.hpp:76
@ DynamicPressureAbove_psf
Definition WsfSixDOF_Sequencer.hpp:80
@ ReleasedFromParent
Definition WsfSixDOF_Sequencer.hpp:92
@ StaticPressureBelow_psf
Definition WsfSixDOF_Sequencer.hpp:83
@ BelowAlt_ft
Definition WsfSixDOF_Sequencer.hpp:79
@ NyBelow_g
Definition WsfSixDOF_Sequencer.hpp:89
@ NxBelow_g
Definition WsfSixDOF_Sequencer.hpp:87
@ NyAbove_g
Definition WsfSixDOF_Sequencer.hpp:88
@ NzAbove_g
Definition WsfSixDOF_Sequencer.hpp:90
@ LifeTime
Definition WsfSixDOF_Sequencer.hpp:77
@ NzBelow_g
Definition WsfSixDOF_Sequencer.hpp:91
@ NxAbove_g
Definition WsfSixDOF_Sequencer.hpp:86
@ GroundDistance_m
Definition WsfSixDOF_Sequencer.hpp:85
bool mAllEvents
Definition WsfSixDOF_Sequencer.hpp:168
Definition WsfSA_Processor.hpp:35
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Definition WsfSixDOF_Sequencer.hpp:135
SequencerActionType actionType
Definition WsfSixDOF_Sequencer.hpp:136
UtVec3dX argumentVector
Definition WsfSixDOF_Sequencer.hpp:140
std::string argumentSecondString
Definition WsfSixDOF_Sequencer.hpp:138
double argumentValue
Definition WsfSixDOF_Sequencer.hpp:139
std::string argumentString
Definition WsfSixDOF_Sequencer.hpp:137
Definition WsfSixDOF_Sequencer.hpp:101
std::string argumentString
Definition WsfSixDOF_Sequencer.hpp:103
SequencerEventType eventType
Definition WsfSixDOF_Sequencer.hpp:102
int argumentInteger
Definition WsfSixDOF_Sequencer.hpp:105
size_t argumentHandle
Definition WsfSixDOF_Sequencer.hpp:106
double argumentValue
Definition WsfSixDOF_Sequencer.hpp:104
int64_t argumentNanoTime
Definition WsfSixDOF_Sequencer.hpp:107
Copyrights Multiple, All Rights Reserved