qmlFrontend/hwengine.cpp
author unc0rr
Sun, 28 Sep 2014 21:33:14 +0400
branchqmlfrontend
changeset 10432 b0abef0ee78c
parent 10430 899a30018ede
child 10434 1614b13ad35e
permissions -rw-r--r--
Quick Game PoC
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
     1
#include <QLibrary>
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
     2
#include <QtQml>
10404
1baaab44a0b2 - Fix arguments parsing in engine assuming paramcount > 0
unc0rr
parents: 10402
diff changeset
     3
#include <QDebug>
10420
unc0rr
parents: 10418
diff changeset
     4
#include <QPainter>
10424
4be6cd55f1cf - Get rid of engine's PathPrefix and UserPathPrefix
unc0rr
parents: 10420
diff changeset
     5
#include <QUuid>
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
     6
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
     7
#include "hwengine.h"
10420
unc0rr
parents: 10418
diff changeset
     8
#include "previewimageprovider.h"
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
     9
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    10
extern "C" {
10428
7c25297720f1 More refactoring: move PoC preview getting code into flib
unc0rr
parents: 10426
diff changeset
    11
    RunEngine_t *flibRunEngine;
7c25297720f1 More refactoring: move PoC preview getting code into flib
unc0rr
parents: 10426
diff changeset
    12
    registerGUIMessagesCallback_t *flibRegisterGUIMessagesCallback;
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    13
    setSeed_t *flibSetSeed;
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    14
    getSeed_t *flibGetSeed;
10428
7c25297720f1 More refactoring: move PoC preview getting code into flib
unc0rr
parents: 10426
diff changeset
    15
    getPreview_t *flibGetPreview;
10432
b0abef0ee78c Quick Game PoC
unc0rr
parents: 10430
diff changeset
    16
    runQuickGame_t *flibRunQuickGame;
10416
1c301054694d - Remove --port command
unc0rr
parents: 10404
diff changeset
    17
    flibInit_t *flibInit;
10424
4be6cd55f1cf - Get rid of engine's PathPrefix and UserPathPrefix
unc0rr
parents: 10420
diff changeset
    18
    flibFree_t *flibFree;
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    19
}
10420
unc0rr
parents: 10418
diff changeset
    20
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    21
Q_DECLARE_METATYPE(MessageType);
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    22
10420
unc0rr
parents: 10418
diff changeset
    23
HWEngine::HWEngine(QQmlEngine *engine, QObject *parent) :
unc0rr
parents: 10418
diff changeset
    24
    QObject(parent),
unc0rr
parents: 10418
diff changeset
    25
    m_engine(engine)
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    26
{
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    27
    qRegisterMetaType<MessageType>("MessageType");
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    28
10404
1baaab44a0b2 - Fix arguments parsing in engine assuming paramcount > 0
unc0rr
parents: 10402
diff changeset
    29
    QLibrary hwlib("./libhwengine.so");
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    30
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    31
    if(!hwlib.load())
10404
1baaab44a0b2 - Fix arguments parsing in engine assuming paramcount > 0
unc0rr
parents: 10402
diff changeset
    32
        qWarning() << "Engine library not found" << hwlib.errorString();
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    33
10428
7c25297720f1 More refactoring: move PoC preview getting code into flib
unc0rr
parents: 10426
diff changeset
    34
    flibRunEngine = (RunEngine_t*) hwlib.resolve("RunEngine");
7c25297720f1 More refactoring: move PoC preview getting code into flib
unc0rr
parents: 10426
diff changeset
    35
    flibRegisterGUIMessagesCallback = (registerGUIMessagesCallback_t*) hwlib.resolve("registerGUIMessagesCallback");
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    36
    flibSetSeed = (setSeed_t*) hwlib.resolve("setSeed");
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    37
    flibGetSeed = (getSeed_t*) hwlib.resolve("getSeed");
10428
7c25297720f1 More refactoring: move PoC preview getting code into flib
unc0rr
parents: 10426
diff changeset
    38
    flibGetPreview = (getPreview_t*) hwlib.resolve("getPreview");
10432
b0abef0ee78c Quick Game PoC
unc0rr
parents: 10430
diff changeset
    39
    flibRunQuickGame = (runQuickGame_t*) hwlib.resolve("runQuickGame");
10416
1c301054694d - Remove --port command
unc0rr
parents: 10404
diff changeset
    40
    flibInit = (flibInit_t*) hwlib.resolve("flibInit");
10424
4be6cd55f1cf - Get rid of engine's PathPrefix and UserPathPrefix
unc0rr
parents: 10420
diff changeset
    41
    flibFree = (flibFree_t*) hwlib.resolve("flibFree");
10416
1c301054694d - Remove --port command
unc0rr
parents: 10404
diff changeset
    42
10432
b0abef0ee78c Quick Game PoC
unc0rr
parents: 10430
diff changeset
    43
    flibInit("/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-GC/share/hedgewars/Data", "~/.hedgewars");
10428
7c25297720f1 More refactoring: move PoC preview getting code into flib
unc0rr
parents: 10426
diff changeset
    44
    flibRegisterGUIMessagesCallback(this, &guiMessagesCallback);
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    45
}
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    46
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    47
HWEngine::~HWEngine()
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    48
{
10424
4be6cd55f1cf - Get rid of engine's PathPrefix and UserPathPrefix
unc0rr
parents: 10420
diff changeset
    49
    flibFree();
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    50
}
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    51
10428
7c25297720f1 More refactoring: move PoC preview getting code into flib
unc0rr
parents: 10426
diff changeset
    52
void HWEngine::getPreview()
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    53
{
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    54
    flibSetSeed(QUuid::createUuid().toString().toLatin1());
10428
7c25297720f1 More refactoring: move PoC preview getting code into flib
unc0rr
parents: 10426
diff changeset
    55
    flibGetPreview();
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    56
}
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    57
10432
b0abef0ee78c Quick Game PoC
unc0rr
parents: 10430
diff changeset
    58
void HWEngine::runQuickGame()
b0abef0ee78c Quick Game PoC
unc0rr
parents: 10430
diff changeset
    59
{
b0abef0ee78c Quick Game PoC
unc0rr
parents: 10430
diff changeset
    60
    flibSetSeed(QUuid::createUuid().toString().toLatin1());
b0abef0ee78c Quick Game PoC
unc0rr
parents: 10430
diff changeset
    61
    flibRunQuickGame();
b0abef0ee78c Quick Game PoC
unc0rr
parents: 10430
diff changeset
    62
}
b0abef0ee78c Quick Game PoC
unc0rr
parents: 10430
diff changeset
    63
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    64
static QObject *hwengine_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    65
{
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    66
    Q_UNUSED(scriptEngine)
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    67
10420
unc0rr
parents: 10418
diff changeset
    68
    HWEngine *hwengine = new HWEngine(engine);
10402
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    69
    return hwengine;
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    70
}
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    71
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    72
void HWEngine::exposeToQML()
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    73
{
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    74
    qDebug("HWEngine::exposeToQML");
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    75
    qmlRegisterSingletonType<HWEngine>("Hedgewars.Engine", 1, 0, "HWEngine", hwengine_singletontype_provider);
3313336c1ee0 Let's get it started
unc0rr
parents:
diff changeset
    76
}
10416
1c301054694d - Remove --port command
unc0rr
parents: 10404
diff changeset
    77
1c301054694d - Remove --port command
unc0rr
parents: 10404
diff changeset
    78
10428
7c25297720f1 More refactoring: move PoC preview getting code into flib
unc0rr
parents: 10426
diff changeset
    79
void HWEngine::guiMessagesCallback(void *context, MessageType mt, const char * msg, uint32_t len)
10420
unc0rr
parents: 10418
diff changeset
    80
{
unc0rr
parents: 10418
diff changeset
    81
    HWEngine * obj = (HWEngine *)context;
unc0rr
parents: 10418
diff changeset
    82
    QByteArray b = QByteArray::fromRawData(msg, len);
unc0rr
parents: 10418
diff changeset
    83
unc0rr
parents: 10418
diff changeset
    84
    qDebug() << "FLIPC in" << b.size() << b;
unc0rr
parents: 10418
diff changeset
    85
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    86
    QMetaObject::invokeMethod(obj, "engineMessageHandler", Qt::QueuedConnection, Q_ARG(MessageType, mt), Q_ARG(QByteArray, b));
10416
1c301054694d - Remove --port command
unc0rr
parents: 10404
diff changeset
    87
}
1c301054694d - Remove --port command
unc0rr
parents: 10404
diff changeset
    88
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    89
void HWEngine::engineMessageHandler(MessageType mt, const QByteArray &msg)
10416
1c301054694d - Remove --port command
unc0rr
parents: 10404
diff changeset
    90
{
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    91
    switch(mt)
10426
727a154cf784 Some refactoring
unc0rr
parents: 10424
diff changeset
    92
    {
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    93
    case MSG_PREVIEW:
10426
727a154cf784 Some refactoring
unc0rr
parents: 10424
diff changeset
    94
        PreviewImageProvider * preview = (PreviewImageProvider *)m_engine->imageProvider(QLatin1String("preview"));
727a154cf784 Some refactoring
unc0rr
parents: 10424
diff changeset
    95
        preview->setPixmap(msg);
727a154cf784 Some refactoring
unc0rr
parents: 10424
diff changeset
    96
        emit previewImageChanged();
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
    97
        break;
10426
727a154cf784 Some refactoring
unc0rr
parents: 10424
diff changeset
    98
    }
10424
4be6cd55f1cf - Get rid of engine's PathPrefix and UserPathPrefix
unc0rr
parents: 10420
diff changeset
    99
}
10416
1c301054694d - Remove --port command
unc0rr
parents: 10404
diff changeset
   100
10424
4be6cd55f1cf - Get rid of engine's PathPrefix and UserPathPrefix
unc0rr
parents: 10420
diff changeset
   101
QString HWEngine::currentSeed()
4be6cd55f1cf - Get rid of engine's PathPrefix and UserPathPrefix
unc0rr
parents: 10420
diff changeset
   102
{
10430
899a30018ede Getter and setter for seed
unc0rr
parents: 10428
diff changeset
   103
    return QString::fromLatin1(flibGetSeed());
10416
1c301054694d - Remove --port command
unc0rr
parents: 10404
diff changeset
   104
}