Ticket #2373: resignation_v5.patch
File resignation_v5.patch, 9.6 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
148 148 pauseGame(); 149 149 var btCaptions = ["Yes", "No"]; 150 150 var btCode = [leaveGame, resumeGame]; 151 152 if (g_IsNetworked && !g_GameEnded) 153 btCode = [g_IsController ? abortNetworkGameQuestion : networkReturnQuestion, resumeGame]; 154 151 155 messageBox(400, 200, "Are you sure you want to quit?", "Confirmation", 0, btCaptions, btCode); 152 156 } 153 157 158 function networkReturnQuestion() 159 { 160 var btCaptions = ["I resign", "I will return"]; 161 var btCode = [leaveGame, leaveGame]; 162 var btArgs = [false, true]; 163 messageBox(400, 200, "You are exiting the game, will you return soon?", "Confirmation", 0, btCaptions, btCode, btArgs); 164 } 154 165 166 function abortNetworkGameQuestion() 167 { 168 var btCaptions = ["Exit the game", "Resume"]; 169 var btCode = [leaveGame, resumeGame]; 170 messageBox(400, 200, "Because you are the host the game will end for all players if you leave.\n\nAre you sure you want to do that?", "Confirmation", 0, btCaptions, btCode); 171 } 172 155 173 function openDeleteDialog(selection) 156 174 { 157 175 closeMenu(); -
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 * leaves 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 leaveGame(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 } 286 306 g_leaveGameInProcess = true; 307 287 308 stopAmbient(); 288 Engine.EndGame(); 289 309 290 310 if (g_IsController && Engine.HasXmppClient()) 291 311 Engine.SendUnregisterGame(); 292 312 … … 297 317 "players": g_Players, 298 318 "mapSettings": mapSettings 299 319 }); 320 321 // end game after a short time to ensure that network stuff is delivered. 322 setTimeout(function() { Engine.EndGame(); }, timeUntilEngineEndsGame); 300 323 } 301 324 302 325 // Return some data that we'll use when hotloading this file after changes … … 427 450 var btCode = [null]; 428 451 var message = "Press OK to continue"; 429 452 } 430 else 453 else if (!g_leaveGameInProcess) 431 454 { 432 455 var btCaptions = ["Yes", "No"]; 433 var btCode = [ leaveGame, null];456 var btCode = [prepareLeaveGame, null]; 434 457 var message = "Do you want to quit?"; 435 458 } 459 else 460 { 461 var btCaptions = ["Ok"]; 462 var btCode = [null]; 463 var message = "You have been defeated. Game will exit now."; 464 } 436 465 437 466 if (playerState.state == "defeated") 438 467 { -
binaries/data/mods/public/gui/session/session.xml
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 -->