// /** // * Object class for Effector // * $Id$ // * $HeadURL$ // * $Author$ // */ #pragma once #include #include "logger.h" #include "effector_state_machine.h" #include "Trajectory/trajectory_transform.h" #include namespace AreaEffectSimulation { class MainHandler; class AbstractFiringStrategy; class ObjectEffector : public QObject { Q_OBJECT public: ObjectEffector(MainHandler *mainHandler, QObject *parent); bool init(int participantId); int assignedAesItemId(){return m_aesItemId;} AesEffectorState currentEffectorState(); MainHandler *mainHandler() const; int aesItemId() const; int participantId() const; QVector intendendTrajectory() const; EffectorData effectorData() const; public slots: void assignAesItemRequest(int aesItemId); bool reportFireReadinessRequest(); // Feuerbereitschaft melden void fireOrderRequest(); // Feuerbefehl void fireRequest(); // Feuern bool reportFiredRequest(); // Abgefeuert melden void reportEmptyChargeRequest(bool emptyCharge); bool overrideReadynessTimerMinMax(int newMillisecondsMin, int newMillisecondsMax); void resetReadynessTimer(); void setEffectorData(const EffectorData& effectorData); signals: void signalNotReadyToFire(int participantId, int aesItemId); void signalReadyToFire(int participantId, int aesItemId); void signalReceivedOrder(int participantId, int aesItemId); void signalReportedFired(int participantId, int aesItemId); void signalFired(int participantId, int aesItemId, const QVector &chargeEffectIds); public: // methods void assignAesItem(int aesItemId); void deleteAssignmentAesItem(); private slots: // Achtung:!!! // die Punkte in geometry sind im SAA-Format prich relativ zum Abschusspunkt in Metern. // x = lon // y = lat // Die Zeit ist bereits relativ zum Abschusspunkt. void setIndendedTrajectory(const std::vector &geometryRelativeToLaunchOrigin); void sendEffectorToDds(); void onEffectorFired(); void logMessage(QString message); private: // attributes MainHandler *m_mainHandler; EffectorStateMachine *m_effectorStateMachine {nullptr}; int m_aesItemId {0}; int m_participantId {0}; QVector m_intendendTrajectory; // Original EffectorData m_effectorData; AbstractFiringStrategy *m_firingStrategy {nullptr}; LOGGER_T &m_logger; }; // class ObjectEffector } // namespace AreaEffectSimulation