# HG changeset patch # User unc0rr # Date 1423343405 -10800 # Node ID 57e21f7621b0d8bbe9f767d1c66d20ab2a5fc956 # Parent 48a53259fad892cac38f93e8f23c42483338494d Send selected scheme config on engine initialization (WIP) diff -r 48a53259fad8 -r 57e21f7621b0 hedgewars/hwLibrary.pas --- a/hedgewars/hwLibrary.pas Sat Feb 07 23:26:14 2015 +0300 +++ b/hedgewars/hwLibrary.pas Sun Feb 08 00:10:05 2015 +0300 @@ -158,6 +158,7 @@ getSeed, setTheme, setScript, + setScheme, getThemesList, freeThemesList, getThemeIcon, diff -r 48a53259fad8 -r 57e21f7621b0 hedgewars/uFLGameConfig.pas --- a/hedgewars/uFLGameConfig.pas Sat Feb 07 23:26:14 2015 +0300 +++ b/hedgewars/uFLGameConfig.pas Sun Feb 08 00:10:05 2015 +0300 @@ -13,13 +13,14 @@ function getSeed: PChar; cdecl; procedure setTheme(themeName: PChar); cdecl; procedure setScript(scriptName: PChar); cdecl; +procedure setScheme(schemeName: PChar); cdecl; procedure tryAddTeam(teamName: PChar); cdecl; procedure tryRemoveTeam(teamName: PChar); cdecl; procedure changeTeamColor(teamName: PChar; dir: LongInt); cdecl; implementation -uses uFLIPC, hwengine, uFLUtils, uFLTeams, uFLData; +uses uFLIPC, hwengine, uFLUtils, uFLTeams, uFLData, uFLSChemes; var guiCallbackPointer: pointer; guiCallbackFunction: TGUICallback; @@ -33,6 +34,7 @@ seed: shortstring; theme: shortstring; script: shortstring; + scheme: TScheme; mapgen: Longint; gameType: TGameType; teams: array[0..7] of TTeam; @@ -65,6 +67,8 @@ ipcToEngine('e$mapgen ' + intToStr(mapgen)); ipcToEngine('e$theme ' + theme); + sendSchemeConfig(scheme); + i:= 0; while (i < 8) and (teams[i].hogsNumber > 0) do begin @@ -323,4 +327,13 @@ currentConfig.script:= '' end; +procedure setScheme(schemeName: PChar); cdecl; +var scheme: PScheme; +begin + scheme:= schemeByName(schemeName); + + if scheme <> nil then + currentConfig.scheme:= scheme^ +end; + end. diff -r 48a53259fad8 -r 57e21f7621b0 hedgewars/uFLSchemes.pas --- a/hedgewars/uFLSchemes.pas Sat Feb 07 23:26:14 2015 +0300 +++ b/hedgewars/uFLSchemes.pas Sun Feb 08 00:10:05 2015 +0300 @@ -5,53 +5,14 @@ function getSchemesList: PPChar; cdecl; procedure freeSchemesList; +function schemeByName(s: shortstring): PScheme; +procedure sendSchemeConfig(var scheme: TScheme); + implementation uses uFLUtils, uFLIPC, uPhysFSLayer, uFLData; const MAX_SCHEME_NAMES = 64; type - TScheme = record - schemeName - , scriptparam : shortstring; - fortsmode - , divteams - , solidland - , border - , lowgrav - , laser - , invulnerability - , mines - , vampiric - , karma - , artillery - , randomorder - , king - , placehog - , sharedammo - , disablegirders - , disablewind - , morewind - , tagteam - , bottomborder: boolean; - damagefactor - , turntime - , health - , suddendeath - , caseprobability - , minestime - , landadds - , minedudpct - , explosives - , minesnum - , healthprobability - , healthcaseamount - , waterrise - , healthdecrease - , ropepct - , getawaytime - , worldedge: LongInt - end; - PScheme = ^TScheme; TSchemeArray = array [0..0] of TScheme; PSchemeArray = ^TSchemeArray; var @@ -152,9 +113,9 @@ scheme:= @schemes^[l - 1]; if copy(s, 1, 5) = 'name=' then - tmpScheme. schemeName:= midStr(s, 6) + tmpScheme.schemeName:= midStr(s, 6) else if copy(s, 1, 12) = 'scriptparam=' then - tmpScheme. schemeName:= midStr(s, 13) else + tmpScheme.scriptparam:= midStr(s, 13) else begin ii:= 0; repeat @@ -208,6 +169,20 @@ getSchemesList:= listOfSchemeNames end; +function schemeByName(s: shortstring): PScheme; +var i: Longword; + scheme: PScheme; +begin + scheme:= schemesList; + i:= 0; + while (i < schemesNumber) and (scheme^.schemeName <> s) do + begin + inc(scheme); + inc(i) + end; + + if i < schemesNumber then schemeByName:= scheme else schemeByName:= nil +end; procedure freeSchemesList; begin @@ -215,4 +190,15 @@ FreeMem(schemesList, sizeof(schemesList^) * (schemesNumber + 1)) end; + +procedure sendSchemeConfig(var scheme: TScheme); +var i: Longword; +begin + with scheme do + begin + ipcToEngine('e$turntime ' + inttostr(scheme.turntime)); + ipcToEngine('e$minesnum ' + inttostr(scheme.minesnum)); + end +end; + end. diff -r 48a53259fad8 -r 57e21f7621b0 hedgewars/uFLTypes.pas --- a/hedgewars/uFLTypes.pas Sat Feb 07 23:26:14 2015 +0300 +++ b/hedgewars/uFLTypes.pas Sun Feb 08 00:10:05 2015 +0300 @@ -33,6 +33,49 @@ end; PTeam = ^TTeam; + TScheme = record + schemeName + , scriptparam : shortstring; + fortsmode + , divteams + , solidland + , border + , lowgrav + , laser + , invulnerability + , mines + , vampiric + , karma + , artillery + , randomorder + , king + , placehog + , sharedammo + , disablegirders + , disablewind + , morewind + , tagteam + , bottomborder: boolean; + damagefactor + , turntime + , health + , suddendeath + , caseprobability + , minestime + , landadds + , minedudpct + , explosives + , minesnum + , healthprobability + , healthcaseamount + , waterrise + , healthdecrease + , ropepct + , getawaytime + , worldedge: LongInt + end; + PScheme = ^TScheme; + implementation end. diff -r 48a53259fad8 -r 57e21f7621b0 qmlFrontend/CMakeLists.txt --- a/qmlFrontend/CMakeLists.txt Sat Feb 07 23:26:14 2015 +0300 +++ b/qmlFrontend/CMakeLists.txt Sun Feb 08 00:10:05 2015 +0300 @@ -15,6 +15,7 @@ previewimageprovider themeiconprovider qtquick2applicationviewer/qtquick2applicationviewer + flib.h ) include_directories(${OPENGL_INCLUDE_DIR}) diff -r 48a53259fad8 -r 57e21f7621b0 qmlFrontend/flib.h --- a/qmlFrontend/flib.h Sat Feb 07 23:26:14 2015 +0300 +++ b/qmlFrontend/flib.h Sun Feb 08 00:10:05 2015 +0300 @@ -37,6 +37,7 @@ typedef char *getSeed_t(); typedef void setTheme_t(const char * themeName); typedef void setScript_t(const char * scriptName); +typedef void setScheme_t(const char * schemeName); typedef void flibInit_t(const char * localPrefix, const char * userPrefix); typedef void flibFree_t(); diff -r 48a53259fad8 -r 57e21f7621b0 qmlFrontend/hwengine.cpp --- a/qmlFrontend/hwengine.cpp Sat Feb 07 23:26:14 2015 +0300 +++ b/qmlFrontend/hwengine.cpp Sun Feb 08 00:10:05 2015 +0300 @@ -15,6 +15,7 @@ getSeed_t *flibGetSeed; setTheme_t *flibSetTheme; setScript_t *flibSetScript; + setScheme_t *flibSetScheme; getPreview_t *flibGetPreview; runQuickGame_t *flibRunQuickGame; runLocalGame_t *flibRunLocalGame; @@ -57,6 +58,7 @@ flibSetSeed = (setSeed_t*) hwlib.resolve("setSeed"); flibSetTheme = (setTheme_t*) hwlib.resolve("setTheme"); flibSetScript = (setScript_t*) hwlib.resolve("setScript"); + flibSetScheme = (setScheme_t*) hwlib.resolve("setScheme"); flibGetThemesList = (getThemesList_t*) hwlib.resolve("getThemesList"); flibFreeThemesList = (freeThemesList_t*) hwlib.resolve("freeThemesList"); @@ -233,3 +235,8 @@ { flibSetScript(script.toUtf8().constData()); } + +void HWEngine::setScheme(const QString &scheme) +{ + flibSetScheme(scheme.toUtf8().constData()); +} diff -r 48a53259fad8 -r 57e21f7621b0 qmlFrontend/hwengine.h --- a/qmlFrontend/hwengine.h Sat Feb 07 23:26:14 2015 +0300 +++ b/qmlFrontend/hwengine.h Sun Feb 08 00:10:05 2015 +0300 @@ -27,6 +27,7 @@ Q_INVOKABLE void setTheme(const QString & theme); Q_INVOKABLE void setScript(const QString & script); + Q_INVOKABLE void setScheme(const QString & scheme); Q_INVOKABLE void tryAddTeam(const QString & teamName); Q_INVOKABLE void tryRemoveTeam(const QString & teamName); diff -r 48a53259fad8 -r 57e21f7621b0 qmlFrontend/qml/qmlFrontend/GameConfig.qml --- a/qmlFrontend/qml/qmlFrontend/GameConfig.qml Sat Feb 07 23:26:14 2015 +0300 +++ b/qmlFrontend/qml/qmlFrontend/GameConfig.qml Sun Feb 08 00:10:05 2015 +0300 @@ -127,7 +127,7 @@ anchors.fill: parent onClicked: { cbScheme.currentIndex = index - //HWEngine.setScheme(schemeName.text) + HWEngine.setScheme(schemeName.text) } } }