Program Listing for File spacecraft.h

Return to documentation for file (agents/spacecraft.h)

#pragma once

#include "lupnt/agents/agent.h"
#include "lupnt/dynamics/joint_orbit_clock_dynamics.h"

namespace lupnt {

  class Spacecraft : public Agent {
  public:
    Spacecraft() = default;
    explicit Spacecraft(Config& config);

    void Setup() override { Agent::Setup(); }

    void Step(Real t) override;

    State GetTruthStateAt(Real t) const;
    const State& GetTruthState() const { return truth_; }
    Real GetTruthTime() const { return truth_time_; }
    JointOrbitClockDynamics* GetTruthDynamics() const { return truth_dyn_.get(); }

    Cart6 GetStateAt(Real t) const override;

  protected:
    void ConfigureTruth(Config& config);

    State truth_;
    Real truth_time_ = 0.0;
    Ptr<JointOrbitClockDynamics> truth_dyn_;
  };

}  // namespace lupnt