/** * Object class for ChargeEffect * $Id$ * $HeadURL$ * $Author$ */ #pragma once #include #include "logger.h" #include #include #include #include #include class QTimer; namespace AreaEffectSimulation { class MainHandler; class ObjectChargeEffect : public QObject { Q_OBJECT public: ObjectChargeEffect(const Database::AesChargeEffect &data, MainHandler *mainHandler, QObject *parent); // creation from database ObjectChargeEffect(MainHandler *mainHandler, QObject *parent); Core::FunctionReplyObject create(const ChargeEffectModifyRequest &data); // creation from function topic Core::FunctionReplyObject update(const ChargeEffectModifyRequest &data); // from function topic void updatedProperties(const Database::AesChargeEffect &dbData); bool remove(); // conversion methods static Database::AesChargeEffect functionTopicToDatabase(const ChargeEffectModifyRequest &data); ChargeEffect dataBaseToDataTopic(const Database::AesChargeEffect &data); void publish(); void init(); QDateTime getEffectStart() const; qint32 id() const; bool isFinished() const; static qint32 s_afterglowMsecs; Q_SIGNALS: void finished(qint32 chargeEffectId); void chargeEffectStateChanged(const int id, const AesEffectState state); private Q_SLOTS: void onStateTimerTimeout(); private: // methods void setNextState(); void calculateInitEffectState(); void startStateTimer(); bool hasChanges(const Database::AesChargeEffect newData) const; private: // attributes MainHandler *m_mainHandler; Database::AesChargeEffect m_data; int m_trajectoryId; AesEffectState m_state; bool m_stateChanged; QTimer *m_stateTimer; LOGGER_T &m_logger; }; // class ObjectChargeEffect } // namespace AreaEffectSimulation