/** * @RDE_HEADER@ * Api for VWM * $Id$ * $HeadURL$ * $Author$ * Created by Gerlinde Rudolphus, SLSA, 2013-03-05 */ #pragma once #include "vwm_building_room_geometry.h" #include #include #include "vwm_building.h" #include "vwm_types.h" #include namespace BuildingControlUnit { namespace VWM { struct NearestWall { int roomId{0}; WallElement wallElement; bool isValid() const { return roomId > 0; } }; class BUILDINGCONTROLVWM_EXPORT Api : public QObject { Q_OBJECT public: explicit Api(QObject *parent = nullptr); bool init(const QString &chargesConfig, const QString &vulBuildingConfig, const BuildingBsmConfig &bsmConfig, const bool initBuilding); const Building &building() const { return m_building; } // for test purposes const QVector &hitsSinceLastInit() const { return m_hitsSinceLastInit; } const HitResult lastHitResult() const { return m_lastHitResult; } const QMap contaminationStates() const {return m_contaminationStates;} const QMap &bsmMap() const { return m_bsmMap; } void sendOverrides(); const Charge chargeFromChargeTypeId(int chargeTypeId) const; public Q_SLOTS: void onHitOptical(qint64 timeMSec, int sensorId, int originatorId, int chargeTypeId, int deposition1, int deposition2); void onHitOpticalOC(qint64 timeMSec, int sensorId, int originatorId, int chargeTypeId, DamageState damageState); void onHitEcc(int originatorId, DamageState damageState, const QVector &roomIds); void onSetContaminationState(const std::vector &contaminationStates); void onResetContaminations(); void onHitCes(const qint64 effectTimeMSec, const int chargeTypeId, const int destructiveFactor, const int penetrationFactor, const int aesId, const LtsUtils::QPoint3D &posImpact, const QString &properties); NearestWall findNearestWall(const LtsUtils::QPoint3D &detonationLocation, double &distanceOut, LtsUtils::QPoint3D &directionWallElementPointToDetonationOut); void onHitCes3D_Evaluation(const qint64 effectTimeMSec, const int chargeTypeId, const int destructiveFactor, const int penetrationFactor, const int aesId, const LtsUtils::QPoint3D &posImpact, const LtsUtils::QPoint3D &detonationLocation, const double detonationDistance, const QString &properties); void onFortifyFactorRequest(int originatorId, const QVector &foritfyInfos); void onRelayStatesRequest(const QString &hostname, const QVector &relayStateInfos); void onSetEffectStatesRequest(const QString &hostname, const QVector &effectStates); void dumpHitResult(const Hit &hit, const HitResult &result, const Charge &chargeOrg, const Charge &charge, const QString &context); Q_SIGNALS: void hitResult(const HitResult &result, const QMap &contaminationStates, bool playSound); void newOverrides( const QString &hostname, const QVector &effectStates); void unknownDirectHit(int sensorId); private: void sendHitToVwm(const Hit &hit); private: QMap m_bsmMap; QMap m_chargeMap; QVector m_hitsSinceLastInit; HitResult m_lastHitResult; QMap m_contaminationStates; // key = aesId Building m_building; BuildingRoomGeometry m_buildingRoomGeometry; NGL::INGLLogger &m_logger; }; } // namespace VWM } // namespace BuildingControlUnit