WSF
WsfSpaceOrbitalMissionSimulationContext.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 2021 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 WSFSPACEORBITALMISSIONSIMULATIONCONTEXT_HPP
13#define WSFSPACEORBITALMISSIONSIMULATIONCONTEXT_HPP
14
15#include "UtCloneablePtr.hpp"
16class UtInput;
17
18#include "WsfEvent.hpp"
22
23namespace wsf
24{
25namespace space
26{
27
34{
35public:
40
41 void Update(const UtCalendar& aEpoch) override;
42 bool Initialize(const UtCalendar& aEpoch) override;
43 const UtOrbitalPropagatorBase& GetPropagator() const override;
44 WsfSimulation* GetSimulation() const override;
45 WsfSpaceMoverBase* GetSpaceMover() const override;
46 void InitiateMissionEvent(const UtCalendar& aEpoch, const WsfOrbitalEvent& aMissionEvent) const override;
47 void UpdateMissionEvent(const UtCalendar& aEpoch, const WsfOrbitalEvent& aMissionEvent) const override;
48 void CompleteMissionEvent(const UtCalendar& aEpoch, const WsfOrbitalEvent& aMissionEvent) const override;
49 void CancelMissionEvent(const UtCalendar& aEpoch, const WsfOrbitalEvent& aMissionEvent) const override;
50 bool Maneuver(const UtCalendar& aEpoch, const UtVec3d& aCommandedDeltaV, UtVec3d& aActualDeltaV) const override;
51 double GetAvailableDeltaV() const override;
52 double GetRequiredDeltaV(double aDuration) const override;
53 bool PerformStagingOperation() const override;
54 std::string GetName() const override;
55 double GetManeuverDuration(const UtCalendar& aEpoch, const WsfOrbitalManeuver& aManeuver, double aDeltaV) const override;
56
57 // Methods specific to the simulation context
58
60 bool ProcessInput(UtInput& aInput);
61
62 UtCalendar GetLastUpdateTime() const { return mLastUpdateTime; }
63
65 void Schedule(WsfOrbitalEvent* aMissionEventPtr);
66
72 void ScheduleMission(const UtCalendar& aEpoch, std::unique_ptr<WsfOrbitalMissionSequence> aMissionEventsPtr);
73
76
77private:
79 class Event : public WsfEvent
80 {
81 public:
82 Event(WsfOrbitalEvent* aMissionEventPtr, OrbitalMissionSimulationContext& aContext);
83 ~Event() override = default;
85
86 private:
87 WsfOrbitalEvent* mMissionEventPtr;
89 UtCalendar mTime; // Absolute value of event time from GetTime().
90 size_t mPlatformIndex; // to verify future platform validity
91 size_t mMissionEventId;
92 };
93
95 class SetEvents : public WsfEvent
96 {
97 public:
98 SetEvents(const UtCalendar& aEpoch,
99 std::unique_ptr<WsfOrbitalMissionSequence> aMissionEventsPtr,
101 ~SetEvents() override = default;
103
104 private:
105 UtCalendar mEpoch;
106 std::unique_ptr<WsfOrbitalMissionSequence> mMissionEventsPtr;
108 };
109
111 const WsfOrbitalEvent* GetCurrentMissionEvent() const;
112
118 void ScheduleNextMissionEvent(const UtCalendar& aEpoch);
119
120
122 bool ScheduleMissionP(const UtCalendar& aEpoch, std::unique_ptr<WsfOrbitalMissionSequence> aMissionEventsPtr);
123
125 bool IsReportable(const WsfOrbitalEvent& aOrbitalEvent) const;
126
127 WsfSpaceMoverBase& mMover;
128 UtCalendar mLastUpdateTime{};
129 ut::CloneablePtr<WsfOrbitalMissionSequence> mMissionEventsPtr;
130};
131
132} // namespace space
133} // namespace wsf
134
135#endif // WSFSPACEORBITALMISSIONSIMULATIONCONTEXT_HPP
Definition WsfEvent.hpp:29
virtual EventDisposition Execute()=0
EventDisposition
Definition WsfEvent.hpp:37
Definition WsfOrbitalEvent.hpp:50
Definition WsfOrbitalManeuver.hpp:34
Definition WsfOrbitalMissionSequence.hpp:32
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfSpaceMoverBase.hpp:70
Definition WsfSpaceOrbitalMissionSimulationContext.hpp:34
WsfSimulation * GetSimulation() const override
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:84
UtCalendar GetLastUpdateTime() const
Definition WsfSpaceOrbitalMissionSimulationContext.hpp:62
std::string GetName() const override
Get a name identifying this orbital mission context.
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:152
bool Maneuver(const UtCalendar &aEpoch, const UtVec3d &aCommandedDeltaV, UtVec3d &aActualDeltaV) const override
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:130
void InitiateMissionEvent(const UtCalendar &aEpoch, const WsfOrbitalEvent &aMissionEvent) const override
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:94
void ScheduleMission(const UtCalendar &aEpoch, std::unique_ptr< WsfOrbitalMissionSequence > aMissionEventsPtr)
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:195
OrbitalMissionSimulationContext(const OrbitalMissionSimulationContext &aOther)=delete
bool ProcessInput(UtInput &aInput)
This method will read in a mission sequence from input.
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:164
bool PerformStagingOperation() const override
Perform a staging operation.
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:147
bool Initialize(const UtCalendar &aEpoch) override
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:57
double GetRequiredDeltaV(double aDuration) const override
Get the delta-v required to maneuver for the given aDuration.
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:142
void Update(const UtCalendar &aEpoch) override
Update the MissionEvents state to the specified absolute time.
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:46
void CompleteMissionEvent(const UtCalendar &aEpoch, const WsfOrbitalEvent &aMissionEvent) const override
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:112
double GetManeuverDuration(const UtCalendar &aEpoch, const WsfOrbitalManeuver &aManeuver, double aDeltaV) const override
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:157
OrbitalMissionSimulationContext(WsfSpaceMoverBase &aMover)
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:32
const UtOrbitalPropagatorBase & GetPropagator() const override
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:79
const WsfOrbitalMissionSequence & GetMissionEvents() const
Return the mission events configured for this context.
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:203
void CancelMissionEvent(const UtCalendar &aEpoch, const WsfOrbitalEvent &aMissionEvent) const override
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:121
double GetAvailableDeltaV() const override
Get the available delta-v in the executing context.
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:137
void Schedule(WsfOrbitalEvent *aMissionEventPtr)
Schedule the given orbital event as a simulation event.
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:188
void UpdateMissionEvent(const UtCalendar &aEpoch, const WsfOrbitalEvent &aMissionEvent) const override
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:103
WsfSpaceMoverBase * GetSpaceMover() const override
Definition WsfSpaceOrbitalMissionSimulationContext.cpp:89
Definition WsfAtmosphere.cpp:23
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved