equal
deleted
inserted
replaced
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 } |