/** * @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 class QTimer; namespace HighLevelArchitecture { class DamageModel : public QObject { Q_OBJECT public: explicit DamageModel(const IdentifierStruct &is, const ProjectDataManagement::VulnerabilityState &state); explicit DamageModel(const ProjectDataManagement::VulnerabilityState &state); explicit DamageModel(const IdentifierStruct &is, const rpr2::DamageStatusEnum32::ET &status); explicit DamageModel(const IdentifierStruct &is) : DamageModel(is, ProjectDataManagement::VulnerabilityState_def::CombatReady) {} const IdentifierStruct &identifierStruct() const { return m_is; } rpr2::DamageStatusEnum32::ET damageState(qint64 simTimeMSec) const; ProjectDataManagement::VulnerabilityState vulnerabilityState(qint64 simTimeMSec) const; // Todo: Both really public? void setVulnerabilityState(const ProjectDataManagement::VulnerabilityState &state, qint64 simTimeMSec); void setDamageState(const rpr2::DamageStatusEnum32::ET state, qint64 simTimeMSec); bool immobilized(qint64 simTimeMSec) const; bool firePowerDisabled(qint64 simTimeMSec) 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 VulnerabilityStateStructWithTimeStamp { ProjectDataManagement::VulnerabilityState vulnerabilityState; qint64 timeStamp = 0; }; QVector m_vulnerabilityStates; static const int s_waitInterval = 100; // 100 ms static ProjectDataManagement::VulnerabilityState vulnerabilityStateFromDamageStatus(const rpr2::DamageStatusEnum32::ET &status); }; } // namespace HighLevelArchitecture