/** * @RDE_HEADER@ * Handler for all Effect Cluster * $Id$ * $HeadURL$ * $Author$ * Created by Patric Karwat, ESZS, 2026-01-13 */ #pragma once #include #include "aes_db.h" #include "handler_base.h" #include "object_effect_cluster.h" #include // qAddPostRoutine #include // TAB #include namespace AreaEffectSimulation { class ObjectEffectCluster; class HandlerEffectCluster final : public HandlerBaseTmpl , protected Interface::Fts::EffectClusterModifyRequestHandler , protected Interface::Fts::EffectClusterModifyActorRequestHandler , protected Interface::Fts::EffectClusterSingleEffectOnlyModifyRequestHandler , protected Interface::Fts::EffectClusterOcModifyRequestHandler , protected Interface::Fts::EffectClusterRemoveRequestHandler , protected Interface::Fts::EffectClusterPauseResumeRequestHandler , protected Interface::Fts::EffectClusterFireHaltRequestHandler // , protected Interface::Fts::TargetPositionsModifyRequestHandler , protected Interface::Fts::TrajectoryAdlerModifyRequestHandler , protected Interface::Fts::EffectClusterReleaseReceivedRequestHandler , protected Interface::Fts::AcknowledgeExternalAesItemRequestHandler , protected Interface::Fts::SetAesItemEffectorStateRequestHandler , protected TrainingAreaBase::Interface::Ftc::AdlerFqFbReplyHandler { Q_OBJECT public: explicit HandlerEffectCluster(MainHandler *mainHandler); ~HandlerEffectCluster() = default; Core::FunctionReplyObject effectClusterModifyRequest(const rti::core::SampleIdentity &cookie, const EffectClusterModifyRequest &request); void recountActiveAreas() override; bool init(); int getPartyId(int aesItemId) { return m_objectMap.value(aesItemId)->data().partyId; }; const ObjectEffectCluster *getEffectClusterObj(int id); protected: void onAdlerFqFbReply(const Core::FunctionReplyObject &replyObject) override; private: // EffectClusterModifyRequestHandler Core::FunctionReplyObject effectClusterCreateRequest(const EffectClusterModifyRequest &request); void onEffectClusterModifyRequest(const rti::core::SampleIdentity &cookie, const EffectClusterModifyRequest &request) override; // EffectClusterModifyActorRequestHandler void onEffectClusterModifyActorRequest(const rti::core::SampleIdentity &cookie, const EffectClusterModifyActorRequest &request) override; // EffectClusterSingleEffectOnlyModifyRequestHandler void onEffectClusterSingleEffectOnlyModifyRequest(const rti::core::SampleIdentity &cookie, const EffectClusterSingleEffectOnlyRequest &request) override; // EffectClusterOcModifyRequestHandler void onEffectClusterOcModifyRequest(const rti::core::SampleIdentity &cookie, const EffectClusterOcModifyRequest &request) override; // EffectClusterRemoveRequestHandler void onEffectClusterRemoveRequest(const rti::core::SampleIdentity &cookie, const Core::RemoveElementRequest &request) override; // EffectClusterPauseResumeRequestHandler void onEffectClusterPauseResumeRequest(const rti::core::SampleIdentity &cookie, const EffectClusterPauseResumeRequest &request) override; void onEffectClusterFireHaltRequest(const rti::core::SampleIdentity &cookie, const EffectClusterFireHaltRequest &request) override; // EffectClusterReleaseReceivedRequestHandler void onEffectClusterReleaseReceivedRequest(const rti::core::SampleIdentity &cookie, const EffectClusterReleaseReceivedRequest &request) override; // AcknowledgeExternalAesItemRequestHandler void onAcknowledgeExternalAesItemRequest(const rti::core::SampleIdentity &cookie, const AcknowledgeExternalAesItemRequest &request) override; // AcknowledgeExternalAesItemRequestHandler void onSetAesItemEffectorStateRequest(const rti::core::SampleIdentity &cookie, const SetAesItemEffectorStateRequest &request) override; /*! \name For laserGuided ammo like vulcano */ /* virtual void onTargetPositionsModifyRequest(const rti::core::SampleIdentity &cookie, const TargetPositionsModifyRequest &request) override; //@} */ virtual void onTrajectoryAdlerModifyRequest(const rti::core::SampleIdentity &cookie, const TrajectoryAdlerModifyRequest &request) override; // next FireCommand void onFireCommandReceived(const TrainingAreaBase::EX_Fire &fireCommand, DataModification modtype); // Fire Hold, Fire Hold Referenced and continue void onFireHoldReceived(const TrainingAreaBase::EX_CeaseFiring &ceaseFire, DataModification modType); // Dummy for testing // void onPlaningDataReceived(const TrainingAreaBase::ExAwesPlanning &planning, DataModification modType); int totalAreasCentral() const override; int totalAreas() const override { return 0; } private: // we need to store a lookupMap for the FireReference to the actual object Id. QMap m_referenceToClusterId; }; } // namespace AreaEffectSimulation