#pragma once #include #include #include #include #include #include #include #include #include #define SUPPORT_AES_EFFECTS #define SUPPORT_EXPLOSION_CLUSTER_SINGLE_EFFECT namespace HighLevelArchitecture { class NgsHandler; struct ParticipantPosition; class AesHandler : public QObject , protected AreaEffectSimulation::Interface::Ftc::MineAreaModifyReplyHandler , protected AreaEffectSimulation::Interface::Ftc::MineAreaRemoveReplyHandler , protected AreaEffectSimulation::Interface::Ftc::MineCorridorModifyReplyHandler , protected AreaEffectSimulation::Interface::Ftc::MineCorridorRemoveReplyHandler , protected AreaEffectSimulation::Interface::Ftc::ExplosionSingleModifyReplyHandler #ifdef SUPPORT_EXPLOSION_CLUSTER_SINGLE_EFFECT , protected AreaEffectSimulation::Interface::Ftc::ExplosionClusterSingleEffectOnlyModifyReplyHandler #endif { Q_OBJECT public: explicit AesHandler(NgsHandler *ngsHandler); void onMineAreaModifyReply(const Core::FunctionReplyObject &replyObject) override final; void onMineAreaRemoveReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } void onMineCorridorModifyReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } void onMineCorridorRemoveReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } void onExplosionSingleModifyReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } #ifdef SUPPORT_EXPLOSION_CLUSTER_SINGLE_EFFECT void onExplosionClusterSingleEffectOnlyModifyReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } #endif int64_t externalId(int aesItemId) const; bool init(); private Q_SLOTS: void onAesItemViewChanged(const AreaEffectSimulation::AesItemView &data, DataModification modType); void onTriggeredImpactsChanged(const AreaEffectSimulation::TriggeredImpacts &data, DataModification modType); #ifdef SUPPORT_AES_EFFECTS void onEffectsChanged(const AreaEffectSimulation::Effects &data, DataModification modType); #endif void onAesExplosionSingleChanged(const AreaEffectSimulation::ExplosionSingle &data, DataModification modType); void onAesMineAreaChanged(const AreaEffectSimulation::MineArea &data, DataModification modType); void onAesMineCorridorChanged(const AreaEffectSimulation::MineCorridor &data, DataModification modType); void onAesNContaminationChanged(const AreaEffectSimulation::NContamination &data, DataModification modType); void onAesBCContaminationChanged(const AreaEffectSimulation::BCContamination &data, DataModification modType); void onAesNameChanged(qint64 identifierInt, const std::string &newName); void onAesActivationTimeChanged(qint64 identifierInt, qint64 msecsSinceEpoch); void onAesForceIdentifierChanged(qint64 identifierInt, int partyId); void onAesDurationChanged(qint64 identifierInt, quint32 u_time); void onAesChargeChanged(qint64 identifierInt, int chargeTypeId); void onAesPointsDataChanged(qint64 identifierInt, const std::vector &pos); void onAesRemoveItem(qint64 identifierInt); bool onNewMinefield(const AreaEffectSimulation::MineAreaModifyRequest &ma); bool onNewMinefieldBreach(const AreaEffectSimulation::MineCorridorModifyRequest &mc); void onMunitionDetonation(const AreaEffectSimulation::ExplosionSingleModifyRequest &es); #ifdef SUPPORT_EXPLOSION_CLUSTER_SINGLE_EFFECT void onMunitionDetonationExplosionClusterSingleEffect(const AreaEffectSimulation::ExplosionClusterSingleEffectOnlyRequest &es); #endif private: template void onSendRequest(const T &item); template void addRequestToQueue(int aesItemId, T *request); static bool isModifiable(const AreaEffectSimulation::AesItem &item); private: NGL::INGLLogger &m_logger; NgsHandler *m_ngsHandler; std::shared_ptr m_dtcAes; std::shared_ptr m_ftcAes; QMap m_aesItemViews; QMap > m_takenIndicesForAesItem; #ifdef SUPPORT_AES_EFFECTS AreaEffectSimulation::HandledImpactsStorage m_handledImpactsStorage; #endif QMap m_pendingRequests; LtsUtils::RequestHelper *m_requestHelper; }; }