qmlfrontend/hwengine.cpp
branchqmlfrontend
changeset 12861 488782d9aba9
parent 12860 e33bcb9d5e9c
child 12863 fe16fa088b69
equal deleted inserted replaced
12860:e33bcb9d5e9c 12861:488782d9aba9
     1 #include "hwengine.h"
     1 #include "hwengine.h"
     2 
     2 
     3 #include <QDebug>
     3 #include <QDebug>
     4 #include <QLibrary>
     4 #include <QLibrary>
     5 #include <QQmlEngine>
     5 #include <QQmlEngine>
       
     6 #include <QUuid>
       
     7 
       
     8 #include "previewimageprovider.h"
       
     9 #include "runqueue.h"
     6 
    10 
     7 extern "C" {
    11 extern "C" {
     8 RunEngine_t* flibRunEngine;
    12 RunEngine_t* flibRunEngine;
     9 ipcToEngineRaw_t* flibIpcToEngineRaw;
    13 ipcToEngineRaw_t* flibIpcToEngineRaw;
    10 ipcSetEngineBarrier_t* flibIpcSetEngineBarrier;
    14 ipcSetEngineBarrier_t* flibIpcSetEngineBarrier;
    16 }
    20 }
    17 
    21 
    18 HWEngine::HWEngine(QQmlEngine* engine, QObject* parent)
    22 HWEngine::HWEngine(QQmlEngine* engine, QObject* parent)
    19     : QObject(parent)
    23     : QObject(parent)
    20     , m_engine(engine)
    24     , m_engine(engine)
       
    25     , m_previewProvider(new PreviewImageProvider())
       
    26     , m_runQueue(new RunQueue(this))
    21 {
    27 {
    22     qRegisterMetaType<MessageType>("MessageType");
    28     qRegisterMetaType<MessageType>("MessageType");
    23 
    29 
    24 #ifdef Q_OS_WIN
    30 #ifdef Q_OS_WIN
    25     QLibrary hwlib("./libhwengine.dll");
    31     QLibrary hwlib("./libhwengine.dll");
    38     flibInit = (flibInit_t*)hwlib.resolve("flibInit");
    44     flibInit = (flibInit_t*)hwlib.resolve("flibInit");
    39     flibFree = (flibFree_t*)hwlib.resolve("flibFree");
    45     flibFree = (flibFree_t*)hwlib.resolve("flibFree");
    40 
    46 
    41     flibInit("/usr/home/unC0Rr/Sources/Hedgewars/MainRepo/share/hedgewars/Data", "/usr/home/unC0Rr/.hedgewars");
    47     flibInit("/usr/home/unC0Rr/Sources/Hedgewars/MainRepo/share/hedgewars/Data", "/usr/home/unC0Rr/.hedgewars");
    42     flibRegisterUIMessagesCallback(this, &guiMessagesCallback);
    48     flibRegisterUIMessagesCallback(this, &guiMessagesCallback);
       
    49 
       
    50     m_engine->addImageProvider(QLatin1String("preview"), m_previewProvider);
       
    51 
       
    52     connect(m_runQueue, &RunQueue::previewIsRendering, this, &HWEngine::previewIsRendering);
       
    53     connect(this, &HWEngine::gameFinished, m_runQueue, &RunQueue::onGameFinished);
    43 }
    54 }
    44 
    55 
    45 HWEngine::~HWEngine()
    56 HWEngine::~HWEngine()
    46 {
    57 {
    47     flibFree();
    58     flibFree();
    72 }
    83 }
    73 
    84 
    74 void HWEngine::engineMessageHandler(MessageType mt, const QByteArray& msg)
    85 void HWEngine::engineMessageHandler(MessageType mt, const QByteArray& msg)
    75 {
    86 {
    76     switch (mt) {
    87     switch (mt) {
    77     case MSG_RENDERINGPREVIEW: {
       
    78         qDebug("MSG_RENDERINGPREVIEW");
       
    79         emit previewIsRendering();
       
    80         break;
       
    81     }
       
    82     case MSG_PREVIEW: {
    88     case MSG_PREVIEW: {
    83         qDebug("MSG_PREVIEW");
    89         qDebug("MSG_PREVIEW");
       
    90         m_previewProvider->setPixmap(msg);
    84         emit previewImageChanged();
    91         emit previewImageChanged();
    85         break;
    92         break;
    86     }
    93     }
    87     case MSG_PREVIEWHOGCOUNT: {
    94     case MSG_PREVIEWHOGCOUNT: {
    88         qDebug("MSG_PREVIEWHOGCOUNT");
    95         qDebug("MSG_PREVIEWHOGCOUNT");
    93         qDebug("MSG_TONET");
   100         qDebug("MSG_TONET");
    94         break;
   101         break;
    95     }
   102     }
    96     case MSG_GAMEFINISHED: {
   103     case MSG_GAMEFINISHED: {
    97         qDebug("MSG_GAMEFINISHED");
   104         qDebug("MSG_GAMEFINISHED");
       
   105         emit gameFinished();
    98         break;
   106         break;
    99     }
   107     }
   100     }
   108     }
   101 }
   109 }
   102 
   110 
   103 void HWEngine::getPreview()
   111 void HWEngine::getPreview()
   104 {
   112 {
   105     GameConfig cfg;
   113     GameConfig cfg;
   106     cfg.cmdSeed("superseed");
   114     cfg.cmdSeed(QUuid::createUuid().toByteArray());
   107     m_runQueue.append(cfg);
   115 
   108     flibIpcSetEngineBarrier();
   116     m_runQueue->queue(cfg);
   109     for (const QByteArray& b : m_runQueue[0].config()) {
       
   110         qDebug() << "[frontend] sending msg of size" << b.size();
       
   111         flibIpcToEngineRaw(b.data(), b.size());
       
   112     }
       
   113     flibIpcRemoveBarrierFromEngineQueue();
       
   114     flibRunEngine(m_runQueue[0].argc(), m_runQueue[0].argv());
       
   115 }
   117 }
   116 
   118 
   117 void HWEngine::runQuickGame()
   119 void HWEngine::runQuickGame()
   118 {
   120 {
   119 }
   121 }