WSF
WsfOrbitalMissionSequence.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 2016 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 WSFORBITALMISSIONEVENTSEQUENCE_HPP
13#define WSFORBITALMISSIONEVENTSEQUENCE_HPP
14
15#include "wsf_space_export.h"
16
17#include <list>
18#include <memory>
19
20#include "UtCloneablePtr.hpp"
21class UtOrbitalPropagatorBase;
22#include "WsfOrbitalEvent.hpp"
23class WsfScenario;
24#include "WsfStringId.hpp"
25
31class WSF_SPACE_EXPORT WsfOrbitalMissionSequence : public WsfOrbitalEvent
32{
33public:
34 explicit WsfOrbitalMissionSequence(const WsfScenario& aScenario); // Scenario object needed to get orbital event types factory,
35 // used to populate the sequence (see ProcessInput).
38 ~WsfOrbitalMissionSequence() override = default;
39
40 static WsfStringId GetTypeId();
41 WsfOrbitalMissionSequence* Clone() const override { return new WsfOrbitalMissionSequence(*this); }
42 bool ProcessInput(UtInput& aInput) override;
43 bool Initialize(const UtCalendar& aEpoch, const wsf::space::OrbitalMissionContext& aContext) override;
44 const WsfOrbitalEvent* GetCurrentMissionEvent() const override;
46 WsfOrbitalEvent* AdvanceMissionEvent(const UtCalendar& aEpoch, const wsf::space::OrbitalMissionContext& aContext) override;
47
48 UtCalendar ComputeContraintEpoch(const UtCalendar& aEpoch, const UtOrbitalPropagatorBase& aPropagator, bool& aSuccess) const;
49
50 using MissionEvents = std::list<ut::CloneablePtr<WsfOrbitalEvent>>;
51
53 const MissionEvents& GetSequence() const { return mMissionEvents; }
54
55 void AddMissionEvent(std::unique_ptr<WsfOrbitalEvent>&& aMissionEventPtr);
56
57 double GetRequiredDeltaV(const UtOrbitalPropagatorBase& aPropagator) const override;
58
59 double GetDeltaV() const override;
60
61 bool IsSequence() const override { return true; }
62 const char* GetScriptClassName() const override { return "WsfOrbitalMissionSequence"; }
63
65 MissionEvents& GetSequence() { return mMissionEvents; }
66
67 void Accept(WsfOrbitalEventVisitor* aVisitorPtr) override;
68
69 bool ProcessInputWithIgnore(UtInput& aInput, bool aIgnoreSomeExceptions);
70
80 template<typename Callable>
81 bool PreOrderTraversal(Callable aOperation)
82 {
83 bool retval = aOperation(this);
84 auto iter = mMissionEvents.begin();
85 while (retval && iter != mMissionEvents.end())
86 {
87 if ((*iter)->IsSequence())
88 {
89 auto sequencePtr = dynamic_cast<WsfOrbitalMissionSequence*>(iter->get());
90 if (sequencePtr)
91 {
92 retval = sequencePtr->PreOrderTraversal(aOperation);
93 }
94 }
95 else
96 {
97 retval = aOperation(*iter);
98 }
99 ++iter;
100 }
101 return retval;
102 }
103
104 bool IsEmpty() const;
105
106protected:
107 WsfOrbitalEvent* GetNextMissionEvent() const;
108
109 const WsfScenario& GetScenario() const { return mScenario; }
110
111private:
112 bool ExecuteEvent(const UtCalendar& aEpoch, wsf::space::OrbitalMissionContext& aContext) override;
113 bool EvaluateCompletion(const UtCalendar& aEpoch, const UtOrbitalPropagatorBase& aPropagator) override;
114
115 void InitializeOrBreakout(WsfOrbitalEvent*& aNextMissionEventPtr,
116 const UtCalendar& aEpoch,
117 const wsf::space::OrbitalMissionContext& aContext);
118
119 const WsfScenario& mScenario;
120 MissionEvents mMissionEvents;
121 MissionEvents::iterator mNextMissionEventIter;
122 MissionEvents::iterator mMissionEventIter;
123};
124
125#endif
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
WsfStringId GetTypeId() const
Get the string ID of the 'type' of the object.
Definition WsfObject.hpp:78
Definition WsfOrbitalEventVisitor.hpp:41
Definition WsfOrbitalEvent.hpp:50
virtual double GetDeltaV() const
Get the delta V expended to execute this event; the default is to return 0.0.
Definition WsfOrbitalEvent.hpp:167
virtual bool ExecuteEvent(const UtCalendar &aCurrentTime, wsf::space::OrbitalMissionContext &aContext)=0
virtual bool EvaluateCompletion(const UtCalendar &aEpoch, const UtOrbitalPropagatorBase &aPropagator)
Definition WsfOrbitalEvent.cpp:351
virtual void Accept(WsfOrbitalEventVisitor *aVisitorPtr)=0
bool ProcessInput(UtInput &aInput) override
Definition WsfOrbitalEvent.cpp:29
WsfOrbitalEvent(const WsfOrbitalEvent &aSrc)
Definition WsfOrbitalEvent.cpp:361
virtual const WsfOrbitalEvent * GetCurrentMissionEvent() const
Definition WsfOrbitalEvent.hpp:141
virtual bool Initialize(const UtCalendar &aEpoch, const wsf::space::OrbitalMissionContext &aContext)
Definition WsfOrbitalEvent.cpp:202
virtual double GetRequiredDeltaV(const UtOrbitalPropagatorBase &aPropagator) const
Return the minimum required delta-v needed to complete this event; the default is to return 0....
Definition WsfOrbitalEvent.hpp:164
virtual WsfOrbitalEvent * AdvanceMissionEvent(const UtCalendar &aEpoch, const wsf::space::OrbitalMissionContext &aContext)
Definition WsfOrbitalEvent.cpp:181
const char * GetScriptClassName() const override
Definition WsfOrbitalMissionSequence.hpp:62
const WsfScenario & GetScenario() const
Definition WsfOrbitalMissionSequence.hpp:109
~WsfOrbitalMissionSequence() override=default
WsfOrbitalMissionSequence & operator=(const WsfOrbitalMissionSequence &)=delete
WsfOrbitalMissionSequence * Clone() const override
Make a copy of this object.
Definition WsfOrbitalMissionSequence.hpp:41
WsfOrbitalMissionSequence(const WsfScenario &aScenario)
Definition WsfOrbitalMissionSequence.cpp:28
bool IsSequence() const override
Is this MissionEvent a MissionEvent sequence (WsfMissionEventSequence)?
Definition WsfOrbitalMissionSequence.hpp:61
bool PreOrderTraversal(Callable aOperation)
Definition WsfOrbitalMissionSequence.hpp:81
const MissionEvents & GetSequence() const
Return the actual sequence (std::list) of maneuvers (WsfOrbitalEvent).
Definition WsfOrbitalMissionSequence.hpp:53
MissionEvents & GetSequence()
Return the actual sequence (std::list) of maneuvers (WsfOrbitalEvent).
Definition WsfOrbitalMissionSequence.hpp:65
std::list< ut::CloneablePtr< WsfOrbitalEvent > > MissionEvents
Definition WsfOrbitalMissionSequence.hpp:50
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfSpaceOrbitalMissionContext.hpp:38
Copyrights Multiple, All Rights Reserved