Ticket #2087: loading2.patch
File loading2.patch, 11.6 KB (added by , 10 years ago) |
---|
-
binaries/data/config/default.cfg
322 322 hotkey.chat = Return ; Toggle chat window 323 323 hotkey.teamchat = "T" ; Toggle chat window in team chat mode 324 324 325 ; > LOADING SCREEN TOOLTIP HOTKEYS 326 hotkey.loading.previoustip = "LeftArrow" 327 hotkey.loading.nexttip = "RightArrow" 328 325 329 ; > GUI TEXTBOX HOTKEYS 326 330 hotkey.text.delete.left = "Ctrl+Backspace" ; Delete word to the left of cursor 327 331 hotkey.text.delete.right = "Ctrl+Del" ; Delete word to the right of cursor … … 379 383 380 384 ; MOD SETTINGS 381 385 mod.enabledmods = "mod public" 386 387 ; LOADING SCREEN TIP CONTROLS 388 gui.loadingtips.enabled = true -
binaries/data/mods/public/gui/gamesetup/gamesetup.js
1004 1004 Engine.SwitchGuiPage("page_loading.xml", { 1005 1005 "attribs": g_GameAttributes, 1006 1006 "isNetworked" : g_IsNetworked, 1007 "playerAssignments": g_PlayerAssignments 1007 "playerAssignments": g_PlayerAssignments, 1008 "isController": g_IsController 1008 1009 }); 1009 1010 } 1010 1011 } -
binaries/data/mods/public/gui/loading/loading.js
1 var g_Data; 1 let g_Data; 2 let tipControlsEnabled; 3 let tips; 4 let tipIndex; 5 2 6 const END_PIECE_WIDTH = 16; 3 7 4 8 function init(data) 5 9 { 6 10 g_Data = data; 11 if (!data) 12 return; 7 13 8 // Set to "hourglass" cursor. 9 Engine.SetCursor("cursor-wait"); 14 // janwas: main loop now sets progress / description, but that won't 15 // happen until the first timeslice completes, so set initial values. 16 Engine.GetGUIObjectByName("loadingMapName").caption = translate(sprintf( 17 data.attribs.mapType === "random" ? "Generating “%(map)s”" : "Loading “%(map)s”", 18 {"map": translate(data.attribs.settings.Name)})); 10 19 11 // Get tip image and corresponding tip text 12 var tipTextLoadingArray = Engine.BuildDirEntList("gui/text/tips/", "*.txt", false); 20 // Pick a random quote of the day (one quote per line). 21 let quoteArray = Engine.ReadFileLines("gui/text/quotes.txt"); 22 Engine.GetGUIObjectByName("quoteText").caption = translate(quoteArray[getRandom(0, quoteArray.length-1)]); 13 23 14 if (tipTextLoadingArray.length > 0) 15 { 16 // Set tip text 17 var tipTextFilePath = tipTextLoadingArray[getRandom (0, tipTextLoadingArray.length-1)]; 18 var tipText = Engine.TranslateLines(Engine.ReadFile(tipTextFilePath)); 24 tips = Engine.BuildDirEntList("gui/text/tips/", "*.txt", false); 25 tipControlsEnabled = !data.isNetworked 26 && Engine.ConfigDB_GetValue("user", "gui.loadingtips.enabled") === "true" 27 && tips && tips.length > 0; 19 28 20 if (tipText) 21 { 22 var index = tipText.indexOf("\n"); 23 var tipTextTitle = tipText.substring(0, index); 24 var tipTextMessage = tipText.substring(index); 25 Engine.GetGUIObjectByName("tipTitle").caption = tipTextTitle? tipTextTitle : ""; 26 Engine.GetGUIObjectByName("tipText").caption = tipTextMessage? tipTextMessage : ""; 27 } 29 Engine.GetGUIObjectByName("prevTipButton").hidden = !tipControlsEnabled; 30 Engine.GetGUIObjectByName("nextTipButton").hidden = !tipControlsEnabled; 28 31 29 // Set tip image 30 var fileName = tipTextFilePath.substring(tipTextFilePath.lastIndexOf("/")+1).replace(".txt", ".png"); 31 var tipImageFilePath = "loading/tips/" + fileName; 32 var sprite = "stretched:" + tipImageFilePath; 33 Engine.GetGUIObjectByName("tipImage").sprite = sprite? sprite : ""; 34 } 35 else 36 { 37 error("Failed to find any matching tips for the loading screen.") 38 } 32 if (tips && tips.length > 0) 33 updateTip(getRandom(0, tips.length - 1)); 34 } 39 35 40 // janwas: main loop now sets progress / description, but that won't 41 // happen until the first timeslice completes, so set initial values. 42 var loadingMapName = Engine.GetGUIObjectByName ("loadingMapName"); 36 function nextTip() 37 { 38 updateTip((tipIndex + 1) % tips.length); 39 } 43 40 44 if (data) 41 function prevTip() 42 { 43 updateTip((tips.length + tipIndex - 1) % tips.length); 44 } 45 46 function updateTip(nextTipIndex) 47 { 48 // Set tip text 49 tipIndex = nextTipIndex; 50 let tipTextFilePath = tips[tipIndex]; 51 let tipText = Engine.TranslateLines(Engine.ReadFile(tipTextFilePath)); 52 if (!tipText) 45 53 { 46 var mapName = translate(data.attribs.settings.Name); 47 switch (data.attribs.mapType) 48 { 49 case "skirmish": 50 case "scenario": 51 loadingMapName.caption = sprintf(translate("Loading “%(map)s”"), {map: mapName}); 52 break; 53 54 case "random": 55 loadingMapName.caption = sprintf(translate("Generating “%(map)s”"), {map: mapName}); 56 break; 57 58 default: 59 error(sprintf("Unknown map type: %(mapType)s", { mapType: data.attribs.mapType })); 60 } 54 error("Failed to read tip text for the loading screen."); 55 return; 61 56 } 62 57 63 Engine.GetGUIObjectByName("progressText").caption = "";64 Engine.GetGUIObjectByName("progressbar").caption = 0;58 let index = tipText.indexOf("\n"); 59 let fileName = tipTextFilePath.substring(tipTextFilePath.lastIndexOf("/")+1).replace(".txt", ".png"); 65 60 66 // Pick a random quote of the day (each line is a separate tip).67 var quoteArray = Engine.ReadFileLines("gui/text/quotes.txt");68 Engine.GetGUIObjectByName(" quoteText").caption = translate(quoteArray[getRandom(0, quoteArray.length-1)]);61 Engine.GetGUIObjectByName("tipTitle").caption = tipText.substring(0, index); 62 Engine.GetGUIObjectByName("tipText").caption = tipText.substring(index); 63 Engine.GetGUIObjectByName("tipImage").sprite = "stretched:" + "loading/tips/" + fileName; 69 64 } 70 65 71 // ====================================================================72 66 function displayProgress() 73 67 { 74 68 // Make the progessbar finish a little early so that the user can actually see it finish 75 if (g_Progress < 100) 76 { 77 // Show 100 when it is really 99 78 var progress = g_Progress + 1; 69 if (g_Progress >= 100) 70 return; 79 71 80 Engine.GetGUIObjectByName("progressbar").caption = progress; // display current progress81 Engine.GetGUIObjectByName("progressText").caption = progress + "%";72 // Show 100 when it is really 99 73 let progress = g_Progress + 1; 82 74 83 // Displays detailed loading info rather than a percent84 // Engine.GetGUIObjectByName("progressText").caption = g_LoadDescription; // display current progess details75 Engine.GetGUIObjectByName("progressbar").caption = progress; // display current progress 76 Engine.GetGUIObjectByName("progressText").caption = progress + "%"; 85 77 86 87 varmiddle = Engine.GetGUIObjectByName("progressbar");88 varrightSide = Engine.GetGUIObjectByName("progressbar_right");78 // Keep curved right edge of progress bar in sync with the rest of the progress bar 79 let middle = Engine.GetGUIObjectByName("progressbar"); 80 let rightSide = Engine.GetGUIObjectByName("progressbar_right"); 89 81 90 varmiddleLength = (middle.size.right - middle.size.left) - (END_PIECE_WIDTH / 2);91 varincrement = Math.round(progress * middleLength / 100);82 let middleLength = (middle.size.right - middle.size.left) - (END_PIECE_WIDTH / 2); 83 let increment = Math.round(progress * middleLength / 100); 92 84 93 var size = rightSide.size; 94 size.left = increment; 95 size.right = increment + END_PIECE_WIDTH; 96 rightSide.size = size; 97 } 85 let size = rightSide.size; 86 size.left = increment; 87 size.right = increment + END_PIECE_WIDTH; 88 rightSide.size = size; 98 89 } 99 90 100 // ====================================================================101 91 function reallyStartGame() 102 92 { 103 // Stop the music104 // if (global.curr_music)105 // global.curr_music.fade(-1, 0.0, 5.0); // fade to 0 over 5 seconds106 107 108 93 // This is a reserved function name that is executed by the engine when it is ready 109 94 // to start the game (i.e. loading progress has reached 100%). 110 95 111 // Switch GUI from loading screen to game session. 96 if (!tipControlsEnabled) 97 { 98 startGame(); 99 return; 100 } 101 102 // Pause the game so it doesn't run while we read tips 103 Engine.SetPaused(true); 104 Engine.GetGUIObjectByName("startGameButton").hidden = false; 105 } 106 107 function startGame() 108 { 109 Engine.SetPaused(false); 110 111 // Switch GUI from loading screen to game session 112 112 Engine.SwitchGuiPage("page_session.xml", g_Data); 113 } 113 114 114 // Restore default cursor.115 Engine.SetCursor("arrow-default");116 } -
binaries/data/mods/public/gui/loading/loading.xml
40 40 <object size="50%+128 50%-193 50%+448 50%+193" type="image" sprite="LoadingTipText"> 41 41 <object name="tipTitle" size="30 30 100% 50" type="text" style="LoadingTipTitleText"/> 42 42 <object name="tipText" size="30 50 100%-30 100%" type="text" style="LoadingTipText"/> 43 44 <!-- LOADING SCREEN TIP SHOW PREVIOUS --> 45 <object name="prevTipButton" type="button" size="30 100%-80 90 100%-40" z="99" hotkey="loading.previoustip" style="StoneButton"> 46 <translatableAttribute id="caption">Previous</translatableAttribute> 47 <action on="Press">prevTip();</action> 48 </object> 49 50 <!-- LOADING SCREEN TIP SHOW NEXT --> 51 <object name="nextTipButton" type="button" size="100%-90 100%-80 100%-30 100%-40" z="99" hotkey="loading.nexttip" style="StoneButton"> 52 <translatableAttribute id="caption">Next</translatableAttribute> 53 <action on="Press">nextTip();</action> 54 </object> 55 43 56 </object> 44 57 45 58 <!-- LOADING SCREEN QUOTE (needs increased z value to overcome the transparent area of the tip image above it --> … … 49 62 </object> 50 63 <object name="quoteText" size="0 30 100% 100%" type="text" style="LoadingText"></object> 51 64 </object> 65 52 66 </object> 67 68 <!-- LOADING SCREEN READY (needs increased z value to overcome the quote area --> 69 <object name="startGameButton" type="button" size="50%-200 75%+80 50%+200 75%+120" z="99" hidden="true" hotkey="confirm" style="StoneButton"> 70 <translatableAttribute id="caption">I'm ready</translatableAttribute> 71 <action on="Press">startGame();</action> 72 </object> 73 53 74 </objects> -
binaries/data/mods/public/gui/options/options.js
13 13 [translate("FPS Overlay"), translate("Show frames per second in top right corner."), {"config":"overlay.fps"}, "boolean"], 14 14 [translate("Realtime Overlay"), translate("Show current system time in top right corner."), {"config":"overlay.realtime"}, "boolean"], 15 15 [translate("Gametime Overlay"), translate("Show current simulation time in top right corner."), {"config":"gui.session.timeelapsedcounter"}, "boolean"], 16 [translate("Tip Controls"), translate("Allow navigating through loading screen tips and wait for the user before entering game."), {"config":"gui.loadingtips.enabled"}, "boolean"], 16 17 ], 17 18 "graphicsSetting": 18 19 [ … … 108 109 case "config": 109 110 // Load initial value if not yet loaded. 110 111 if (!checked || typeof checked != "boolean") 111 checked = Engine.ConfigDB_GetValue("user", option[2][action]) === "true" ? true : false;112 checked = Engine.ConfigDB_GetValue("user", option[2][action]) === "true"; 112 113 // Hacky macro to create the callback. 113 114 var callback = function(key) 114 115 {