/** * @RDE_HEADER@ * Damage state transaformation from/to HLA <-> Excon, see ICD, 4.4.3.5.6 - Damage Model * $Id$ * $HeadURL$ * $Author$ */ #pragma once #include #include #include #include #include #include #include #include class QTimer; namespace HighLevelArchitecture { class DamageModel : public QObject { Q_OBJECT public: explicit DamageModel(const IdentifierStruct &is, const rpr2::TacticalStatusStruct &state); explicit DamageModel(const rpr2::TacticalStatusStruct &state); explicit DamageModel(const IdentifierStruct &is) : DamageModel(is, {rpr2::TacticalStatusEnum8::CombatReady, 0, rpr2::TotalStatusEnum32::CombatReady}) {} const IdentifierStruct &identifierStruct() const { return m_is; } rpr2::DamageStatusEnum32::ET damageState(qint64 simTimeMSec) const; rpr2::TotalStatusEnum32::ET totalState(qint64 simTimeMSec) const; ProjectDataManagement::VulnerabilityState vulnerabilityState(qint64 simTimeMSec) const; bool immobilized(qint64 simTimeMSec) const; bool firePowerDisabled(qint64 simTimeMSec) const; void setTacticalStatusStruct(const rpr2::TacticalStatusStruct &state, qint64 simTimeMSec); void setTacticalStatus(const rpr2::HitResultEnum16::ET &state, qint64 simTimeMSec); rpr2::TacticalStatusStruct tacticalStatusStruct(qint64 timeStamp) const; Q_SIGNALS: void damageStateChanged(); void playerManipulationChanged(int eqNo, bool playerIsManipulated, qint64 simTimeMSecs); private: int indexForTime(qint64 simTimeMSec) const; void initTimer(); private: IdentifierStruct m_is; QTimer *m_timer = nullptr; struct TacticalStatusStructWithTimeStamp { rpr2::TacticalStatusStruct tss; qint64 timeStamp = 0; TacticalStatusStructWithTimeStamp() { tss.TacticalStatus = rpr2::TacticalStatusEnum8::CombatReady; tss.VulnerabilityKind = 0; tss.TotalStatus = rpr2::TotalStatusEnum32::CombatReady; } }; QVector m_tacticalStates; static const int s_waitInterval = 100; // 100 ms void setTacticalStatusStructWithTimestamp(TacticalStatusStructWithTimeStamp &tssTs, const rpr2::HitResultEnum16::ET &state, qint64 simTimeMSec); }; } // namespace HighLevelArchitecture