/** * Handler for player data * $Id$ * $HeadURL$ * $Author$ * Created by gr, SLSE, 2017-02-20 */ #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace LtsUtils { class QPoint3D; } // AES-Handling for buildings namespace CesBuildings { class HandlerAesData : public QObject , protected Buildings::Interface::Ftc::SendCesHitOnBuildingReplyHandler , protected Buildings::Interface::Ftc::SendCesHit3DonBuildingReplyHandler , protected TrainingAreaBase::Interface::Ftc::SendCesHitInformationReplyHandler , protected Buildings::Interface::Ftc::SetBuildingStatesReplyHandler { Q_OBJECT public: explicit HandlerAesData(const std::shared_ptr &ddsHandler, const std::shared_ptr &buildingDataHandler, QObject *parent = nullptr); ~HandlerAesData(); /** * Initialize the handler to manage information from player management */ bool init(); AreaEffectSimulation::AesItemView itemView(const int &aesId) const { return m_aesItemViews.value(aesId); } ProjectDataManagement::IgniterFunctionBase igniterFunctionBaseExplosionCluster(const int &aesId) const { auto chargeStruct = m_ddsHandler->dtcAes()->explosionCluster(aesId).chargeStruct(); return m_ddsHandler->dtcPdm()->getChargeTypeIgniterTypeIgniterFunction(chargeStruct.chargeTypeId(), chargeStruct.igniterTypeId(), chargeStruct.igniterFunctionId()).igniterFunctionBaseId(); } int chargeTypeId(const int &aesId) const { return m_ddsHandler->dtcAes()->explosionCluster(aesId).chargeStruct().chargeTypeId(); } protected: void onSendCesHitOnBuildingReply(const Core::FunctionReplyObject &replyObject) override final; void onSendCesHit3DonBuildingReply(const Core::FunctionReplyObject &replyObject) override final; void onSendCesHitInformationReply(const Core::FunctionReplyObject &reply) override final; void onSetBuildingStatesReply(const Core::FunctionReplyObject &reply) override final; private slots: /** * Handle the signals from 'AES' */ void onChargeEffectChanged(const AreaEffectSimulation::ChargeEffect &data, DataModification modType); void onExplosionSingleChanged(const AreaEffectSimulation::ExplosionSingle &data, DataModification modType); void onAirSupportImpactChanged(const AreaEffectSimulation::AirSupportImpact &data, DataModification modType); void onAesItemViewChanged(const AreaEffectSimulation::AesItemView &data, DataModification modType); void onTriggeredImpactsChanged(const AreaEffectSimulation::TriggeredImpacts &data, DataModification modType); void onEffectsChanged(const AreaEffectSimulation::Effects &effects, DataModification modType); void onBoobyTrapChanged(const AreaEffectSimulation::BoobyTrap &data, DataModification modType); void onStartTimeReached(); void removeStates(const AreaEffectSimulation::AesItemView &data); //private: // structs // typedef QHash> BitfieldStates; shift to aes_item_view_utm.h private: // methoden bool inFootprint(const Core::GeoPosition2D &geoPosition, const CentralEffectSimulation::HandlerBuildingData::Footprint &footPrint, const double radius) const; bool inBoundingBox(const Core::GeoPosition2D& impactPosition, const CentralEffectSimulation::HandlerBuildingData::Footprint &footprint, const double impactRadius) const; void preCalculateImpacts(const AreaEffectSimulation::TriggeredImpacts &data); void calculateImpacts(const AreaEffectSimulation::TriggeredImpacts &data, const AreaEffectSimulation::AesItemView &aesItemView, const CentralEffectSimulation::HandlerBuildingData::Footprint &footprint); void calculateImpacts(const AreaEffectSimulation::Effects &effects, const CentralEffectSimulation::HandlerBuildingData::Footprint &footprint); void checkBuildingsHit(const AreaEffectSimulation::AesItemView &data); QVector findBuildingsBetween(const LtsCoordTrans::LtsCoordinate &impactPosition, const CentralEffectSimulation::HandlerBuildingData::Footprint &targetFootprint); void calculateBuildingExplosion(const AreaEffectSimulation::ChargeStruct &chargeStruct, const Core::GeoPosition2D &impactPosition, const int id); void startTimer(int id, int msec); private: // attributes std::shared_ptr m_ddsHandler; ///< Pointer to VOM DDS handler std::shared_ptr m_handlerBuildingData; QHash m_bitfieldStatesBld; // key = mseId, value = BitfieldState // AES-Values QHash m_aesItemViews; // key = aesItemId QHash m_aesItemViewsUtm; // key = aesItemId QHash m_explosionSingleState; // key = id value = state CentralEffectSimulation::LOGGER_T &m_logger; ///< Interface to the Logging-Facility QHash m_chargeEffects; // key = onChargeEffectChanged.id value ChargeEffect }; } // namespace CesBuildings