# HG changeset patch # User unc0rr # Date 1448478601 -10800 # Node ID 80a9b14bb8d326df5ea07babf618981953bc5e3f # Parent f88b3948adf328c0e6a46d72c9f040857fb40244 Some game config methods and signals diff -r f88b3948adf3 -r 80a9b14bb8d3 hedgewars/uFLGameConfig.pas --- a/hedgewars/uFLGameConfig.pas Wed Nov 25 21:31:30 2015 +0300 +++ b/hedgewars/uFLGameConfig.pas Wed Nov 25 22:10:01 2015 +0300 @@ -18,6 +18,10 @@ procedure tryRemoveTeam(teamName: PChar); cdecl; procedure changeTeamColor(teamName: PChar; dir: LongInt); cdecl; +procedure netSetSeed(seed: shortstring); +procedure netSetTheme(themeName: shortstring); +procedure netSetScript(scriptName: shortstring); + implementation uses uFLIPC, hwengine, uFLUtils, uFLTeams, uFLData, uFLSChemes, uFLAmmo, uFLUICallback; @@ -44,6 +48,10 @@ var currentConfig: TGameConfig; +function getScriptPath(scriptName: shortstring): shortstring; +begin + getScriptPath:= '/Scripts/Multiplayer/' + scriptName + '.lua' +end; procedure sendConfig(config: PGameConfig); var i: Longword; @@ -52,14 +60,14 @@ begin case gameType of gtPreview: begin - if script <> '' then - ipcToEngine('escript ' + script); + if script <> 'Normal' then + ipcToEngine('escript ' + getScriptPath(script)); ipcToEngine('eseed ' + seed); ipcToEngine('e$mapgen ' + intToStr(mapgen)); end; gtLocal: begin - if script <> '' then - ipcToEngine('escript ' + script); + if script <> 'Normal' then + ipcToEngine('escript ' + getScriptPath(script)); ipcToEngine('eseed ' + seed); ipcToEngine('e$mapgen ' + intToStr(mapgen)); ipcToEngine('e$theme ' + theme); @@ -108,6 +116,8 @@ begin with currentConfig do begin + script:= 'Normal'; + for i:= 0 to 7 do teams[i].hogsNumber:= 0 end @@ -115,10 +125,10 @@ procedure setSeed(seed: PChar); cdecl; begin + sendUI(mtSeed, @seed[1], length(seed)); currentConfig.seed:= seed end; - function getSeed: PChar; cdecl; begin getSeed:= str2PChar(currentConfig.seed) @@ -300,10 +310,7 @@ procedure setScript(scriptName: PChar); cdecl; begin - if scriptName <> 'Normal' then - currentConfig.script:= '/Scripts/Multiplayer/' + scriptName + '.lua' - else - currentConfig.script:= '' + currentConfig.script:= scriptName end; procedure setScheme(schemeName: PChar); cdecl; @@ -324,4 +331,31 @@ currentConfig.ammo:= ammo^ end; +procedure netSetSeed(seed: shortstring); +begin + if seed <> currentConfig.seed then + begin + currentConfig.seed:= seed; + sendUI(mtSeed, @seed[1], length(seed)) + end +end; + +procedure netSetTheme(themeName: shortstring); +begin + if themeName <> currentConfig.theme then + begin + currentConfig.theme:= themeName; + sendUI(mtTheme, @themeName[1], length(themeName)) + end +end; + +procedure netSetScript(scriptName: shortstring); +begin + if scriptName <> currentConfig.script then + begin + currentConfig.script:= scriptName; + sendUI(mtScript, @scriptName[1], length(scriptName)) + end +end; + end. diff -r f88b3948adf3 -r 80a9b14bb8d3 hedgewars/uFLNetProtocol.pas --- a/hedgewars/uFLNetProtocol.pas Wed Nov 25 21:31:30 2015 +0300 +++ b/hedgewars/uFLNetProtocol.pas Wed Nov 25 22:10:01 2015 +0300 @@ -10,7 +10,7 @@ procedure ResetNetState; implementation -uses uFLNetTypes, uFLTypes, uFLUICallback, uFLNet; +uses uFLNetTypes, uFLTypes, uFLUICallback, uFLNet, uFLGameConfig; type PHandler = procedure (var t: TCmdData); @@ -85,10 +85,14 @@ procedure handler_CFG_SCRIPT(var p: TCmdParamS); begin + if isInRoom then + netSetScript(p.str1) end; procedure handler_CFG_SEED(var p: TCmdParamS); begin + if isInRoom then + netSetSeed(p.str1) end; procedure handler_CFG_TEMPLATE(var p: TCmdParami); @@ -97,6 +101,8 @@ procedure handler_CFG_THEME(var p: TCmdParamS); begin + if isInRoom then + netSetTheme(p.str1) end; procedure handler_CHAT(var p: TCmdParamSL); @@ -394,7 +400,6 @@ end end; - procedure ResetNetState; begin isInRoom:= false; diff -r f88b3948adf3 -r 80a9b14bb8d3 hedgewars/uFLTypes.pas --- a/hedgewars/uFLTypes.pas Wed Nov 25 21:31:30 2015 +0300 +++ b/hedgewars/uFLTypes.pas Wed Nov 25 22:10:01 2015 +0300 @@ -7,7 +7,7 @@ , mtRemoveLobbyClient, mtLobbyChatLine, mtAddRoomClient , mtRemoveRoomClient, mtRoomChatLine, mtAddRoom, mtUpdateRoom , mtRemoveRoom, mtError, mtWarning, mtMoveToLobby, mtMoveToRoom - , mtNickname); + , mtNickname, mtSeed, mtTheme, mtScript); TIPCMessage = record str: shortstring; diff -r f88b3948adf3 -r 80a9b14bb8d3 qmlFrontend/flib.h --- a/qmlFrontend/flib.h Wed Nov 25 21:31:30 2015 +0300 +++ b/qmlFrontend/flib.h Wed Nov 25 22:10:01 2015 +0300 @@ -31,6 +31,9 @@ , MSG_MOVETOLOBBY , MSG_MOVETOROOM , MSG_NICKNAME + , MSG_SEED + , MSG_THEME + , MSG_SCRIPT }; typedef union string255_ diff -r f88b3948adf3 -r 80a9b14bb8d3 qmlFrontend/hwengine.cpp --- a/qmlFrontend/hwengine.cpp Wed Nov 25 21:31:30 2015 +0300 +++ b/qmlFrontend/hwengine.cpp Wed Nov 25 22:10:01 2015 +0300 @@ -252,6 +252,18 @@ m_myNickname = QString::fromUtf8(msg); break; } + case MSG_SEED: { + emit seedChanged(QString::fromUtf8(msg)); + break; + } + case MSG_THEME: { + emit themeChanged(QString::fromUtf8(msg)); + break; + } + case MSG_SCRIPT: { + emit scriptChanged(QString::fromUtf8(msg)); + break; + } } } diff -r f88b3948adf3 -r 80a9b14bb8d3 qmlFrontend/hwengine.h --- a/qmlFrontend/hwengine.h Wed Nov 25 21:31:30 2015 +0300 +++ b/qmlFrontend/hwengine.h Wed Nov 25 22:10:01 2015 +0300 @@ -70,6 +70,10 @@ void movedToLobby(); void movedToRoom(); + void seedChanged(const QString & seed); + void themeChanged(const QString & theme); + void scriptChanged(const QString & script); + void roomAdded(quint32 flags , const QString & name , int players