Ticket #2373: resignation_v4.patch
File resignation_v4.patch, 10.4 KB (added by , 10 years ago) |
---|
-
binaries/data/mods/public/gui/common/functions_global_object.js
22 22 { 23 23 if (btnCode !== undefined && g_messageBoxBtnFunctions[btnCode]) 24 24 { 25 if (g_messageBoxCallbackArgs[btnCode]) 26 g_messageBoxBtnFunctions[btnCode](g_messageBoxCallbackArgs[btnCode]); 25 // cache the vales to make it possible to call a messageBox from a callback function. 26 var callbackFunction = g_messageBoxBtnFunctions[btnCode]; 27 var callbackArgs = g_messageBoxCallbackArgs[btnCode] 28 g_messageBoxBtnFunctions = []; 29 g_messageBoxCallbackArgs = []; 30 31 if (callbackArgs !== undefined) 32 callbackFunction(callbackArgs); 27 33 else 28 g_messageBoxBtnFunctions[btnCode](); 34 callbackFunction(); 35 36 return; 29 37 } 30 31 38 g_messageBoxBtnFunctions = []; 32 39 g_messageBoxCallbackArgs = []; 33 40 } -
binaries/data/mods/public/gui/session/menu.js
147 147 closeOpenDialogs(); 148 148 pauseGame(); 149 149 var btCaptions = ["Yes", "No"]; 150 var btCode = [ leaveGame, resumeGame];150 var btCode = [g_IsNetworked && !g_GameEnded ? networkReturnQuestion : prepareLeaveGame, resumeGame]; 151 151 messageBox(400, 200, "Are you sure you want to quit?", "Confirmation", 0, btCaptions, btCode); 152 152 } 153 153 154 function networkReturnQuestion() 155 { 156 var btCaptions = ["Yes, I will return", "No, I resign"]; 157 var btCode = [prepareLeaveGame, prepareLeaveGame]; 158 var btArgs = [true, false]; 159 messageBox(400, 200, "You are exiting the game, will you return soon?", "Confirmation", 0, btCaptions, btCode, btArgs); 160 } 154 161 155 162 function openDeleteDialog(selection) 156 163 { -
binaries/data/mods/public/gui/session/session.js
1 const TIME_UNTIL_ENGINE_ENDS_GAME = 5000; // time in ms until the engine quits the game (in MP with resign) 2 1 3 // Network Mode 2 4 var g_IsNetworked = false; 3 5 … … 37 39 // Whether the player has lost/won and reached the end of their game 38 40 var g_GameEnded = false; 39 41 42 // true, if prepareLeaveGame() was called 43 var g_leaveGameInProcess = false; 44 40 45 var g_Disconnected = false; // Lost connection to server 41 46 42 47 // Holds player states from the last tick … … 234 239 Engine.SubmitUserReport("profile", 3, JSON.stringify(data)); 235 240 } 236 241 237 function resignGame() 242 /** 243 * let's a player resign 244 * leaveGameAfterResign: if true, game is quit, after resign 245 */ 246 function resignGame(leaveGameAfterResign) 238 247 { 239 248 var simState = GetSimState(); 240 249 … … 248 257 "playerId": Engine.GetPlayerID() 249 258 }); 250 259 251 global.music.setState(global.music.states.DEFEAT); 252 resumeGame(); 260 // resume to the game, if the resign button was used 261 if (!leaveGameAfterResign) 262 { 263 global.music.setState(global.music.states.DEFEAT); 264 resumeGame(); 265 } 253 266 } 254 267 255 function leaveGame() 268 /** 269 * prepare to leave the game 270 * willRejoin: can be set to true, in case of network game, if the player just has to reboot or restart the game 271 */ 272 function prepareLeaveGame(willRejoin) 256 273 { 257 274 var extendedSimState = Engine.GuiInterfaceCall("GetExtendedSimulationState"); 258 275 var playerState = extendedSimState.players[Engine.GetPlayerID()]; 259 276 var mapSettings = Engine.GetMapSettings(); 260 277 var gameResult; 278 var timeUntilEngineEndsGame = 1; 261 279 262 280 if (g_Disconnected) 263 281 { … … 274 292 else // "active" 275 293 { 276 294 gameResult = "You have abandoned the game."; 277 278 // Tell other players that we have given up and been defeated279 Engine.PostNetworkCommand({280 "type": "defeat-player",281 "playerId": Engine.GetPlayerID()282 });283 284 295 global.music.setState(global.music.states.DEFEAT); 296 297 // resign, if player click on "No, I resign" 298 if (!willRejoin) 299 { 300 gameResult = "You have been defeated..."; 301 resignGame(true); 302 if(g_IsNetworked) 303 timeUntilEngineEndsGame = TIME_UNTIL_ENGINE_ENDS_GAME; // give engine some time to deliver the network message (before the client disconnects...) 304 } 285 305 } 306 g_leaveGameInProcess = true; 307 setTimeout(function() { leaveGame({"gameResult": gameResult, "extendedSimState": extendedSimState, "mapSettings": mapSettings}); }, timeUntilEngineEndsGame); 308 } 286 309 310 /** 311 * leaves the game; is needed to give network messages time to reach their destination 312 * data: must contain gameResult, extendedSimState and mapSettings 313 */ 314 function leaveGame(data) 315 { 287 316 stopAmbient(); 288 317 Engine.EndGame(); 289 318 … … 291 320 Engine.SendUnregisterGame(); 292 321 293 322 Engine.SwitchGuiPage("page_summary.xml", { 294 "gameResult" : gameResult,295 "timeElapsed" : extendedSimState.timeElapsed,296 "playerStates": extendedSimState.players,323 "gameResult" : data.gameResult, 324 "timeElapsed" : data.extendedSimState.timeElapsed, 325 "playerStates": data.extendedSimState.players, 297 326 "players": g_Players, 298 "mapSettings": mapSettings327 "mapSettings": data.mapSettings 299 328 }); 300 329 } 301 330 … … 427 456 var btCode = [null]; 428 457 var message = "Press OK to continue"; 429 458 } 430 else 459 else if (!g_leaveGameInProcess) 431 460 { 432 461 var btCaptions = ["Yes", "No"]; 433 var btCode = [ leaveGame, null];462 var btCode = [prepareLeaveGame, null]; 434 463 var message = "Do you want to quit?"; 435 464 } 465 else 466 { 467 var btCaptions = ["Ok"]; 468 var btCode = [null]; 469 var message = "You have been defeated. Game will exit now."; 470 } 436 471 437 472 if (playerState.state == "defeated") 438 473 { -
binaries/data/mods/public/gui/session/session.xml
39 39 <!-- 40 40 <action on="Press"><![CDATA[ 41 41 messageBox(400, 200, "Do you really want to quit?", "Confirmation", 0, 42 ["Yes", "No!"], [ leaveGame, null]);42 ["Yes", "No!"], [prepareLeaveGame, null]); 43 43 ]]></action> 44 44 --> 45 45 … … 776 776 z="40" 777 777 > 778 778 <object size="4 36 100%-4 50%+20"> 779 780 <!-- Manual button --> 781 <object type="button" 782 name="manualButton" 783 style="StoneButtonFancy" 784 size="0 0 100% 28" 785 tooltip_style="sessionToolTip" 786 > 787 Manual 788 <action on="Press">openManual();</action> 789 </object> 790 791 <!-- Chat button --> 792 <object type="button" 793 name="chatButton" 794 style="StoneButtonFancy" 795 size="0 32 100% 60" 796 tooltip_style="sessionToolTip" 797 > 798 Chat 799 <action on="Press">chatMenuButton();</action> 800 </object> 779 801 780 <!-- Settings button --> 781 <object type="button" 782 name="settingsButton" 783 style="StoneButtonFancy" 784 size="0 0 100% 28" 785 tooltip_style="sessionToolTip" 786 > 787 Settings 788 <action on="Press">settingsMenuButton();</action> 789 </object> 802 <!-- Save game button --> 803 <object type="button" 804 name="saveGameButton" 805 style="StoneButtonFancy" 806 size="0 64 100% 92" 807 tooltip_style="sessionToolTip" 808 > 809 Save 810 <action on="Press"> 811 openSave(); 812 </action> 813 </object> 814 815 <!-- Settings button --> 816 <object type="button" 817 name="settingsButton" 818 style="StoneButtonFancy" 819 size="0 96 100% 124" 820 tooltip_style="sessionToolTip" 821 > 822 Settings 823 <action on="Press">settingsMenuButton();</action> 824 </object> 790 825 791 792 <!-- Save game button --> 793 <object type="button" 794 name="saveGameButton" 795 style="StoneButtonFancy" 796 size="0 32 100% 60" 797 tooltip_style="sessionToolTip" 798 > 799 Save 800 <action on="Press"> 801 openSave(); 802 </action> 826 <!-- Pause / Resume Button --> 827 <object type="button" 828 name="pauseButton" 829 style="StoneButtonFancy" 830 size="0 128 100% 156" 831 tooltip_style="sessionToolTip" 832 > 833 <object name="pauseButtonText" type="text" style="CenteredButtonText" ghost="true">Pause</object> 834 <action on="Press">togglePause();</action> 835 </object> 836 837 <!-- Resign button --> 838 <object type="button" 839 name="menuResignButton" 840 style="StoneButtonFancy" 841 size="0 160 100% 188" 842 tooltip_style="sessionToolTip" 843 > 844 Resign 845 <action on="Press">resignMenuButton();</action> 846 </object> 847 848 <!-- Exit button --> 849 <object type="button" 850 name="menuExitButton" 851 style="StoneButtonFancy" 852 size="0 192 100% 220" 853 tooltip_style="sessionToolTip" 854 > 855 Exit 856 <action on="Press">exitMenuButton();</action> 857 </object> 803 858 </object> 804 805 <!-- Chat button -->806 <object type="button"807 name="chatButton"808 style="StoneButtonFancy"809 size="0 64 100% 92"810 tooltip_style="sessionToolTip"811 >812 Chat813 <action on="Press">chatMenuButton();</action>814 </object>815 816 <!-- Resign button -->817 <object type="button"818 name="menuResignButton"819 style="StoneButtonFancy"820 size="0 96 100% 124"821 tooltip_style="sessionToolTip"822 >823 Resign824 <action on="Press">resignMenuButton();</action>825 </object>826 827 <!-- Exit button -->828 <object type="button"829 name="menuExitButton"830 style="StoneButtonFancy"831 size="0 128 100% 156"832 tooltip_style="sessionToolTip"833 >834 Exit835 <action on="Press">exitMenuButton();</action>836 </object>837 838 <!-- Pause / Resume Button -->839 <object type="button"840 name="pauseButton"841 style="StoneButtonFancy"842 size="0 160 100% 188"843 tooltip_style="sessionToolTip"844 >845 <object name="pauseButtonText" type="text" style="CenteredButtonText" ghost="true">Pause</object>846 <action on="Press">togglePause();</action>847 </object>848 849 <!-- Manual button -->850 <object type="button"851 name="manualButton"852 style="StoneButtonFancy"853 size="0 192 100% 220"854 tooltip_style="sessionToolTip"855 >856 Manual857 <action on="Press">openManual();</action>858 </object>859 </object>860 859 </object> 861 860 862 861 <!-- In-progress research --> … … 1354 1353 tooltip_style="sessionToolTip" 1355 1354 > 1356 1355 <object size="0 0 100% 100%" type="text" style="CenteredButtonText" name="disconnectedExitButtonText" ghost="true">Exit</object> 1357 <action on="Press"> leaveGame()</action>1356 <action on="Press">prepareLeaveGame()</action> 1358 1357 </object> 1359 1358 1360 1359 </object>