# HG changeset patch # User unc0rr # Date 1514159927 -3600 # Node ID e33bcb9d5e9c10c7007b98e38d4ce29fde76a52a # Parent a03f245243b0ed12fad5bec2c03764a6281d848b Preview rendering seems to work now diff -r a03f245243b0 -r e33bcb9d5e9c hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Sun Dec 24 16:56:22 2017 +0100 +++ b/hedgewars/hwengine.pas Mon Dec 25 00:58:47 2017 +0100 @@ -580,14 +580,12 @@ end; function EngineThread(p: pointer): Longint; cdecl; export; -var e: TFLIBEvent; begin if GameType = gmtLandPreview then GenLandPreview() else Game(); - e:= flibGameFinished; - sendUI(mtFlibEvent, @e, sizeof(e)); + sendUI(mtGameFinished, nil, 0); EngineThread:= 0 end; diff -r a03f245243b0 -r e33bcb9d5e9c hedgewars/uFLIPC.pas --- a/hedgewars/uFLIPC.pas Sun Dec 24 16:56:22 2017 +0100 +++ b/hedgewars/uFLIPC.pas Mon Dec 25 00:58:47 2017 +0100 @@ -173,6 +173,7 @@ msg.str[0]:= #0; msg.len:= len; msg.buf:= GetMem(len); + Move(p^, msg.buf^, len); ipcSend(msg, queueEngine) end; diff -r a03f245243b0 -r e33bcb9d5e9c hedgewars/uFLTypes.pas --- a/hedgewars/uFLTypes.pas Sun Dec 24 16:56:22 2017 +0100 +++ b/hedgewars/uFLTypes.pas Mon Dec 25 00:58:47 2017 +0100 @@ -7,15 +7,7 @@ type TMessageType = (mtRenderingPreview, mtPreview, mtPreviewHogCount - , mtAddPlayingTeam, mtRemovePlayingTeam - , mtAddTeam, mtRemoveTeam, mtTeamColor, mtHedgehogsNumber - , mtNetData, mtToNet - , mtFlibEvent, mtConnected, mtDisconnected, mtAddLobbyClient - , mtRemoveLobbyClient, mtLobbyChatLine, mtAddRoomClient - , mtRemoveRoomClient, mtRoomChatLine, mtAddRoom, mtUpdateRoom - , mtRemoveRoom, mtError, mtWarning, mtMoveToLobby, mtMoveToRoom - , mtNickname, mtSeed, mtTheme, mtScript, mtFeatureSize, mtMapGen - , mtMap, mtMazeSize, mtTemplate, mtAmmo, mtScheme); + , mtToNet, mtGameFinished); TFLIBEvent = (flibGameFinished); diff -r a03f245243b0 -r e33bcb9d5e9c hedgewars/uIO.pas --- a/hedgewars/uIO.pas Sun Dec 24 16:56:22 2017 +0100 +++ b/hedgewars/uIO.pas Mon Dec 25 00:58:47 2017 +0100 @@ -123,6 +123,7 @@ isProcessed: boolean; begin isProcessed := true; +system.writeln('IPC:', s); case s[1] of '!': begin AddFileLog('Ping? Pong!'); isPonged:= true; end; diff -r a03f245243b0 -r e33bcb9d5e9c qmlfrontend/flib.h --- a/qmlfrontend/flib.h Sun Dec 24 16:56:22 2017 +0100 +++ b/qmlfrontend/flib.h Mon Dec 25 00:58:47 2017 +0100 @@ -11,6 +11,8 @@ MSG_RENDERINGPREVIEW, MSG_PREVIEW, MSG_PREVIEWHOGCOUNT, + MSG_TONET, + MSG_GAMEFINISHED, }; typedef union string255_ { diff -r a03f245243b0 -r e33bcb9d5e9c qmlfrontend/gameconfig.cpp --- a/qmlfrontend/gameconfig.cpp Sun Dec 24 16:56:22 2017 +0100 +++ b/qmlfrontend/gameconfig.cpp Mon Dec 25 00:58:47 2017 +0100 @@ -23,6 +23,13 @@ return m_arguments.size(); } +const QList GameConfig::config() const +{ + QList cfg = m_cfg; + cfg.append("\x01!"); + return cfg; +} + void GameConfig::clear() { m_arguments.clear(); diff -r a03f245243b0 -r e33bcb9d5e9c qmlfrontend/gameconfig.h --- a/qmlfrontend/gameconfig.h Sun Dec 24 16:56:22 2017 +0100 +++ b/qmlfrontend/gameconfig.h Mon Dec 25 00:58:47 2017 +0100 @@ -10,7 +10,7 @@ const char** argv() const; int argc() const; - const QList config(); + const QList config() const; void clear(); void cmdSeed(const QByteArray& seed); diff -r a03f245243b0 -r e33bcb9d5e9c qmlfrontend/hwengine.cpp --- a/qmlfrontend/hwengine.cpp Sun Dec 24 16:56:22 2017 +0100 +++ b/qmlfrontend/hwengine.cpp Mon Dec 25 00:58:47 2017 +0100 @@ -2,6 +2,7 @@ #include #include +#include extern "C" { RunEngine_t* flibRunEngine; @@ -46,6 +47,20 @@ flibFree(); } +static QObject* hwengine_singletontype_provider(QQmlEngine* engine, QJSEngine* scriptEngine) +{ + Q_UNUSED(scriptEngine) + + HWEngine* hwengine = new HWEngine(engine); + return hwengine; +} + +void HWEngine::exposeToQML() +{ + qDebug("HWEngine::exposeToQML"); + qmlRegisterSingletonType("Hedgewars.Engine", 1, 0, "HWEngine", hwengine_singletontype_provider); +} + void HWEngine::guiMessagesCallback(void* context, MessageType mt, const char* msg, uint32_t len) { HWEngine* obj = reinterpret_cast(context); @@ -60,23 +75,42 @@ { switch (mt) { case MSG_RENDERINGPREVIEW: { + qDebug("MSG_RENDERINGPREVIEW"); emit previewIsRendering(); break; } case MSG_PREVIEW: { + qDebug("MSG_PREVIEW"); emit previewImageChanged(); break; } case MSG_PREVIEWHOGCOUNT: { + qDebug("MSG_PREVIEWHOGCOUNT"); emit previewHogCountChanged((quint8)msg.data()[0]); break; } + case MSG_TONET: { + qDebug("MSG_TONET"); + break; + } + case MSG_GAMEFINISHED: { + qDebug("MSG_GAMEFINISHED"); + break; + } } } void HWEngine::getPreview() { - m_runQueue.append(GameConfig()); + GameConfig cfg; + cfg.cmdSeed("superseed"); + m_runQueue.append(cfg); + flibIpcSetEngineBarrier(); + for (const QByteArray& b : m_runQueue[0].config()) { + qDebug() << "[frontend] sending msg of size" << b.size(); + flibIpcToEngineRaw(b.data(), b.size()); + } + flibIpcRemoveBarrierFromEngineQueue(); flibRunEngine(m_runQueue[0].argc(), m_runQueue[0].argv()); } diff -r a03f245243b0 -r e33bcb9d5e9c qmlfrontend/main.cpp --- a/qmlfrontend/main.cpp Sun Dec 24 16:56:22 2017 +0100 +++ b/qmlfrontend/main.cpp Mon Dec 25 00:58:47 2017 +0100 @@ -3,15 +3,18 @@ #include "hwengine.h" -int main(int argc, char *argv[]) +int main(int argc, char* argv[]) { - QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); - QGuiApplication app(argc, argv); + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + QGuiApplication app(argc, argv); + + QQmlApplicationEngine engine; - QQmlApplicationEngine engine; - engine.load(QUrl(QLatin1String("qrc:/main.qml"))); - if (engine.rootObjects().isEmpty()) - return -1; + HWEngine::exposeToQML(); - return app.exec(); + engine.load(QUrl(QLatin1String("qrc:/main.qml"))); + if (engine.rootObjects().isEmpty()) + return -1; + + return app.exec(); }