/** * Handler for player data * $Id$ * $HeadURL$ * $Author$ * Created by gr, SLSE, 2017-02-20 */ #pragma once #include "EffectShowClient/esc_db.h" #include "esc_convert_to_tab.h" #include "logger.h" #include "esc_helper.h" #include #include #include namespace EffectShowClient { class MainHandler; /** * @brief Handler for data exchange with the equipment of the vhicle. * * (1)Receives data inputs from the vehicle.\n * (2)Sends data outputs to the vhicle.\n */ class HandlerVehicle : public QObject { Q_OBJECT public: explicit HandlerVehicle(MainHandler *mainHandler, QObject *parent = nullptr); ~HandlerVehicle(); /** * @brief Initialization of the data exchange with the vehicle equipment. */ bool init(); /** * @brief Returns whether the vehicle is operational. * @return (true)The Vehicle is operational */ bool isOperational() const; /** * @brief Provides the number of available shots and equipped shots. * @param[in] numberOfShotsAvailable Number of shots available * @param[in] numberOfShotsMagazine Number of shots equipped */ void setAmmunitionParameter(int numberOfShotsMagazine); /** * @brief Returns the burning time of a smoke cartridge. * @return Burning time of a smoke cartridge [s] */ int burningTimeSmokeCartridge_s() const; /** * @brief Sets explosion parameter. * @param[in] numberOfVolley Number of volley. The volleys are evenly distributed throughout the duration. * @param[in] numberofShot Number of shots overall. * @param[in] duration Duration[ms] over all volleys. */ void setExplosionParameter(int numberOfVolley, int numberOfShot, qint64 duration); /** * @brief Recalculates all spreads. */ void recalcEverything(); /** * @brief Sets smoke prameter. * @param[in] lengthOfFogZone Length of fog zone [m] * @param[in] directionOfFogZone Direction of fog zone [deg] */ void setSmokeParameter(int lengthOfFogZone, int directionOfFogZone); /** * @brief Controls the effect show. * @param[in] effectShowControl Effect show control parameter. */ void effectShowControl(EffectShowClient::EffectShowControl_e effectShowControl); private: void spreadShotsInVolleys(int shots, int volleys); signals: void safetyConfirmation(const EffectShowClient::SafetyConfirmation_e &safetyConfirmed); void statusExplosionFiring(const StatusExplosionFiring_t &statusExplosion); void statusSmokeFiring(const StatusSmokeFiring_t &statusExplosion); void readyForExplosionFiring(bool ready); void readyForSmokeFiring(bool ready); void vehicleBattery(double battery); void vehicleSmokeRounds(int smokeRounds); void vehilceSmokeAmmunition(int ammunition); void vehicleShutDown(); void vehicleFinshedVolley(int rounds); void vehicleStoppedVolley(int rounds); void vehicleFireUnits(const CardRidges &cardRidges); void vehicleSmokeCardridgesStatus(const CardRidges &cardRidges); void vehicleSmokeCardridgesFireStatus(const CardRidges &cardRidges); void vehicleType(EffectShowManagement::Feature_e type); private slots: void onStartVolley(); void onRemainingTimerTimeOut(); void onVolleyStopped(int shots); void onVolleyFinished(int shots); // void onSafetyUpdate(const SafetyConfirmation_e safety); private: // attributes MainHandler *m_mainHandler{nullptr}; QTimer *m_volleyTimer{nullptr}; QTimer *m_remainingTimer{nullptr}; double m_timeBetweenShots{800}; int m_currentVolley{0}; qint64 m_oldTime{0}; StatusExplosionFiring_t m_statusExplosionFiring; StatusSmokeFiring_t m_statusSmokeFiring; QMap m_shotsInVolley; QMap m_pauseAfterVolley; NGL::INGLLogger &m_logger; }; } // namespace EffectShowClient