# HG changeset patch # User unc0rr # Date 1448659084 -10800 # Node ID bca9afcc3a729b87d64d9fc3cb4dd7484c4fb205 # Parent 97e3e62ea5f9d8e725f1202f9ec862a34ae4a49f Handle some CFG parameters diff -r 97e3e62ea5f9 -r bca9afcc3a72 hedgewars/uFLGameConfig.pas --- a/hedgewars/uFLGameConfig.pas Thu Nov 26 20:11:54 2015 +0300 +++ b/hedgewars/uFLGameConfig.pas Sat Nov 28 00:18:04 2015 +0300 @@ -21,6 +21,12 @@ procedure netSetSeed(seed: shortstring); procedure netSetTheme(themeName: shortstring); procedure netSetScript(scriptName: shortstring); +procedure netSetFeatureSize(fsize: LongInt); +procedure netSetMapGen(mapgen: LongInt); +procedure netSetMap(map: shortstring); +procedure netSetMazeSize(mazesize: LongInt); +procedure netSetTemplate(template: LongInt); +procedure updatePreviewIfNeeded; implementation uses uFLIPC, hwengine, uFLUtils, uFLTeams, uFLData, uFLSChemes, uFLAmmo, uFLUICallback; @@ -34,9 +40,13 @@ seed: shortstring; theme: shortstring; script: shortstring; + map: shortstring; scheme: TScheme; ammo: TAmmo; - mapgen: Longint; + mapgen: LongInt; + featureSize: LongInt; + mazesize: LongInt; + template: LongInt; gameType: TGameType; teams: array[0..7] of TTeam; arguments: array[0..Pred(MAXARGS)] of shortstring; @@ -47,6 +57,7 @@ var currentConfig: TGameConfig; + previewNeedsUpdate: boolean; function getScriptPath(scriptName: shortstring): shortstring; begin @@ -179,6 +190,8 @@ procedure getPreview; cdecl; begin + previewNeedsUpdate:= false; + with currentConfig do begin gameType:= gtPreview; @@ -355,9 +368,69 @@ begin if scriptName <> currentConfig.script then begin + previewNeedsUpdate:= true; currentConfig.script:= scriptName; sendUI(mtScript, @scriptName[1], length(scriptName)) end end; +procedure netSetFeatureSize(fsize: LongInt); +var s: shortstring; +begin + if fsize <> currentConfig.featureSize then + begin + previewNeedsUpdate:= true; + currentConfig.featureSize:= fsize; + s:= IntToStr(fsize); + sendUI(mtFeatureSize, @s[1], length(s)) + end +end; + +procedure netSetMapGen(mapgen: LongInt); +var s: shortstring; +begin + if mapgen <> currentConfig.mapgen then + begin + previewNeedsUpdate:= true; + currentConfig.mapgen:= mapgen; + s:= IntToStr(mapgen); + sendUI(mtMapGen, @s[1], length(s)) + end +end; + +procedure netSetMap(map: shortstring); +begin + sendUI(mtMap, @map[1], length(map)) +end; + +procedure netSetMazeSize(mazesize: LongInt); +var s: shortstring; +begin + if mazesize <> currentConfig.mazesize then + begin + previewNeedsUpdate:= true; + currentConfig.mazesize:= mazesize; + s:= IntToStr(mazesize); + sendUI(mtMazeSize, @s[1], length(s)) + end +end; + +procedure netSetTemplate(template: LongInt); +var s: shortstring; +begin + if template <> currentConfig.template then + begin + previewNeedsUpdate:= true; + currentConfig.template:= template; + s:= IntToStr(template); + sendUI(mtTemplate, @s[1], length(s)) + end +end; + +procedure updatePreviewIfNeeded; +begin + if previewNeedsUpdate then + getPreview +end; + end. diff -r 97e3e62ea5f9 -r bca9afcc3a72 hedgewars/uFLNetProtocol.pas --- a/hedgewars/uFLNetProtocol.pas Thu Nov 26 20:11:54 2015 +0300 +++ b/hedgewars/uFLNetProtocol.pas Sat Nov 28 00:18:04 2015 +0300 @@ -10,7 +10,7 @@ procedure ResetNetState; implementation -uses uFLNetTypes, uFLTypes, uFLUICallback, uFLNet, uFLGameConfig; +uses uFLNetTypes, uFLTypes, uFLUICallback, uFLNet, uFLGameConfig, uFLUtils; type PHandler = procedure (var t: TCmdData); @@ -53,26 +53,60 @@ procedure handler_CFG_FEATURE_SIZE(var p: TCmdParami); begin + if isInRoom then + begin + netSetFeatureSize(p.param1); + updatePreviewIfNeeded + end; end; +var fmcfgIndex: integer; + procedure handler_CFG_FULLMAPCONFIG(var p: TCmdParam); begin + fmcfgIndex:= 0; end; procedure handler_CFG_FULLMAPCONFIG_s(var s: TCmdParamS); begin + if not isInRoom then exit; + + inc(fmcfgIndex); + case fmcfgIndex of + 1: if s.str1[0] <> '+' then netSetMap(s.str1); + 2: netSetMapGen(strToInt(s.str1)); + 3: netSetMazeSize(strToInt(s.str1)); + 4: netSetTheme(s.str1); + 5: netSetTemplate(strToInt(s.str1)); + 6: begin + netSetFeatureSize(strToInt(s.str1)); + updatePreviewIfNeeded; + end; + end; end; procedure handler_CFG_MAP(var p: TCmdParamS); begin + if isInRoom then + netSetMap(p.str1); end; procedure handler_CFG_MAPGEN(var p: TCmdParami); begin + if isInRoom then + begin + netSetMapGen(p.param1); + updatePreviewIfNeeded + end end; procedure handler_CFG_MAZE_SIZE(var p: TCmdParami); begin + if isInRoom then + begin + netSetMazeSize(p.param1); + updatePreviewIfNeeded + end end; procedure handler_CFG_SCHEME(var p: TCmdParam); @@ -97,6 +131,11 @@ procedure handler_CFG_TEMPLATE(var p: TCmdParami); begin + if isInRoom then + begin + netSetTemplate(p.param1); + updatePreviewIfNeeded + end end; procedure handler_CFG_THEME(var p: TCmdParamS); diff -r 97e3e62ea5f9 -r bca9afcc3a72 hedgewars/uFLTypes.pas --- a/hedgewars/uFLTypes.pas Thu Nov 26 20:11:54 2015 +0300 +++ b/hedgewars/uFLTypes.pas Sat Nov 28 00:18:04 2015 +0300 @@ -7,7 +7,8 @@ , mtRemoveLobbyClient, mtLobbyChatLine, mtAddRoomClient , mtRemoveRoomClient, mtRoomChatLine, mtAddRoom, mtUpdateRoom , mtRemoveRoom, mtError, mtWarning, mtMoveToLobby, mtMoveToRoom - , mtNickname, mtSeed, mtTheme, mtScript); + , mtNickname, mtSeed, mtTheme, mtScript, mtFeatureSize, mtMapGen + , mtMap, mtMazeSize, mtTemplate); TIPCMessage = record str: shortstring; diff -r 97e3e62ea5f9 -r bca9afcc3a72 qmlFrontend/flib.h --- a/qmlFrontend/flib.h Thu Nov 26 20:11:54 2015 +0300 +++ b/qmlFrontend/flib.h Sat Nov 28 00:18:04 2015 +0300 @@ -34,6 +34,11 @@ , MSG_SEED , MSG_THEME , MSG_SCRIPT + , MSG_FEATURESIZE + , MSG_MAPGEN + , MSG_MAP + , MSG_MAZESIZE + , MSG_TEMPLATE }; typedef union string255_ diff -r 97e3e62ea5f9 -r bca9afcc3a72 qmlFrontend/hwengine.cpp --- a/qmlFrontend/hwengine.cpp Thu Nov 26 20:11:54 2015 +0300 +++ b/qmlFrontend/hwengine.cpp Sat Nov 28 00:18:04 2015 +0300 @@ -264,6 +264,26 @@ emit scriptChanged(QString::fromUtf8(msg)); break; } + case MSG_FEATURESIZE: { + emit featureSizeChanged(msg.toInt()); + break; + } + case MSG_MAPGEN: { + emit mapGenChanged(msg.toInt()); + break; + } + case MSG_MAP: { + emit mapChanged(QString::fromUtf8(msg)); + break; + } + case MSG_MAZESIZE: { + emit mazeSizeChanged(msg.toInt()); + break; + } + case MSG_TEMPLATE: { + emit templateChanged(msg.toInt()); + break; + } } } diff -r 97e3e62ea5f9 -r bca9afcc3a72 qmlFrontend/hwengine.h --- a/qmlFrontend/hwengine.h Thu Nov 26 20:11:54 2015 +0300 +++ b/qmlFrontend/hwengine.h Sat Nov 28 00:18:04 2015 +0300 @@ -73,6 +73,11 @@ void seedChanged(const QString & seed); void themeChanged(const QString & theme); void scriptChanged(const QString & script); + void featureSizeChanged(int featureSize); + void mapGenChanged(int mapgen); + void mapChanged(const QString & map); + void mazeSizeChanged(int mazeSize); + void templateChanged(int templ); void roomAdded(quint32 flags , const QString & name diff -r 97e3e62ea5f9 -r bca9afcc3a72 qmlFrontend/qml/qmlFrontend/GameConfig.qml --- a/qmlFrontend/qml/qmlFrontend/GameConfig.qml Thu Nov 26 20:11:54 2015 +0300 +++ b/qmlFrontend/qml/qmlFrontend/GameConfig.qml Sat Nov 28 00:18:04 2015 +0300 @@ -92,7 +92,7 @@ } Connections { target: HWEngine - onScriptChanged: scriptsModel.showItem({"iconSource" : "", "text" : script}); + onScriptChanged: cbScript.showItem({"iconSource" : "", "text" : script}); } } }