#pragma once #include #include #include #include #include #include #include #include #include #include #include "server.h" class QTcpSocket; class QTimer; class Player { private: void randomizeDeathTicks() { deathTicks = ((qrand() % (maximumDeathTicks - minimumDeathTicks + 1)) + minimumDeathTicks); } public: uint32_t eqId; uint32_t issi; QPointF posUTM; bool isLogin; bool isValidBITE; TrainingAreaBase::TetraIcd::VulnerabilityState vbg; int patternInList; int stepInPattern; uint32_t deathTicks; uint32_t minimumDeathTicks; uint32_t maximumDeathTicks; Player(int eqId_, int issi_, uint32_t minimumDeathTicks_, uint32_t maximumDeathTicks_, const QPointF &posUTM_) : eqId(eqId_) , issi(issi_) , posUTM(posUTM_) , isLogin(false) , isValidBITE(false) , vbg(TrainingAreaBase::TetraIcd::VulnerabilityState::CombatReady) , patternInList(0) , stepInPattern(1) , deathTicks(0) , minimumDeathTicks(minimumDeathTicks_) , maximumDeathTicks(maximumDeathTicks_) { randomizeDeathTicks(); } bool isEndOfTicks() { deathTicks--; if (deathTicks < 1) { randomizeDeathTicks(); return true; } return false; } }; class TTWorker : public QObject { Q_OBJECT public: explicit TTWorker(QTcpSocket *socket, const TTSArgs &ttsArgs); bool init(); private Q_SLOTS: void onReadyRead(); void onSendPlayerPositions(); void onSocketError(); void onSendNachforderungBroadcastTelegramm(); void onSendDeaktivierungEinzelminen(); protected: void startExecution(); QVector interpretPattern(QString pattern) const; void movePlayer(Player *p); void handleReceivedTelegram(const QByteArray &data); void handleRegisterInd(); void handleDataIndReq(const QByteArray &data); void sendTelegram(N_CoPrtCnv::CoPrtCnvRadioTelegram *radioTelegram, uint32_t issi); template void sendTelegram(const T &tele, uint32_t issi) { N_CoPrtCnv::CoPrtCnvCentralTelegram ct(tele); sendTelegram(N_CoPrtCnv::CoPrtCnvTelegramConverter::convertToRadio(&ct), issi); } void sendLogin(uint32_t eqId, uint32_t issi); void sendBITE(uint32_t eqId, uint32_t issi); void sendTaktischerStatus(uint32_t eqId, uint32_t issi, TrainingAreaBase::TetraIcd::VulnerabilityState vbg); void sendSanitationReport(uint32_t eqId, uint32_t issi); private: QTcpSocket *m_socket; QTimer *m_timer; QByteArray m_buffer; unsigned int m_counter; bool m_toogle; TTSArgs m_ttsArgs; QVector m_playerList; QVector m_patternList; QPointF m_generalPosition; NGL::INGLLogger &m_logger; };