Ticket #3234: wonderOptions_V3.2.patch
File wonderOptions_V3.2.patch, 17.8 KB (added by , 8 years ago) |
---|
-
binaries/data/mods/public/gui/common/settings.js
32 32 "AIDescriptions": loadAIDescriptions(), 33 33 "AIDifficulties": loadAIDifficulties(), 34 34 "Ceasefire": loadCeasefire(), 35 "WonderDurations": loadWonderDuration(), 35 36 "GameSpeeds": loadSettingValuesFile("game_speeds.json"), 36 37 "MapTypes": loadMapTypes(), 37 38 "MapSizes": loadSettingValuesFile("map_sizes.json"), … … 131 132 } 132 133 133 134 /** 135 * Loads available wonder-victory times 136 */ 137 function loadWonderDuration() 138 { 139 var jsonFile = "wonder_times.json"; 140 var json = Engine.ReadJSONFile(g_SettingsDirectory + jsonFile); 141 142 if (!json || json.Default === undefined || !json.Times || !Array.isArray(json.Times)) 143 { 144 error("Could not load " + jsonFile); 145 return undefined; 146 } 147 148 return json.Times.map(duration => ({ 149 "Duration": duration, 150 "Default": duration == json.Default, 151 "Title": sprintf(translatePluralWithContext("wonder victory", "%(min)s minute", "%(min)s minutes", duration), { "min": duration }) 152 })); 153 } 154 155 /** 134 156 * Loads available ceasefire settings. 135 157 * 136 158 * @returns {Array|undefined} -
binaries/data/mods/public/gui/gamesetup/gamesetup.js
8 8 const g_PopulationCapacities = prepareForDropdown(g_Settings && g_Settings.PopulationCapacities); 9 9 const g_StartingResources = prepareForDropdown(g_Settings && g_Settings.StartingResources); 10 10 const g_VictoryConditions = prepareForDropdown(g_Settings && g_Settings.VictoryConditions); 11 const g_WonderDurations = prepareForDropdown(g_Settings && g_Settings.WonderDurations); 11 12 12 13 /** 13 14 * All selectable playercolors except gaia. … … 248 249 initPopulationCaps(); 249 250 initStartingResources(); 250 251 initCeasefire(); 252 initWonderDurations(); 251 253 initVictoryConditions(); 252 254 initMapSizes(); 253 255 initRadioButtons(); … … 300 302 } 301 303 302 304 /** 303 * Sets the size of the more-options dialog.305 * Remove empty space in case of hidden options (like cheats, rating or wonder duration) 304 306 */ 305 307 function resizeMoreOptionsWindow() 306 308 { 307 // For singleplayer reduce the size of more options dialog by two options (cheats, rated game = 60px) 308 if (!g_IsNetworked) 309 const elementHeight = 30; 310 const elements = [ 311 "optionGameSpeed", 312 "optionVictoryCondition", 313 "optionWonderDuration", 314 "optionPopulationCap", 315 "optionStartingResources", 316 "optionCeasefireText", 317 "optionRevealMap", 318 "optionExploreMapText", 319 "optionDisableTreasuresText", 320 "optionLockTeams", 321 "optionCheats", 322 "optionRating", 323 "hideMoreOptions" 324 ]; 325 326 let yPos = undefined; 327 for (let element of elements) 309 328 { 310 Engine.GetGUIObjectByName("moreOptions").size = "50%-200 50%-195 50%+200 50%+160"; 311 Engine.GetGUIObjectByName("hideMoreOptions").size = "50%-70 310 50%+70 336"; 329 let guiOption = Engine.GetGUIObjectByName(element); 330 let gSize = guiOption.size; 331 yPos = yPos || gSize.top; 332 333 if (guiOption.hidden) 334 continue; 335 336 gSize.top = yPos; 337 gSize.bottom = yPos + elementHeight - 2; 338 guiOption.size = gSize; 339 340 yPos += elementHeight; 312 341 } 313 // For non-lobby multiplayergames reduce the size of the dialog by one option (rated game, 30px) 314 else if (!Engine.HasXmppClient())315 {316 Engine.GetGUIObjectByName("moreOptions").size = "50%-200 50%-195 50%+200 50%+190";317 Engine.GetGUIObjectByName("hideMoreOptions").size = "50%-70 340 50%+70 366";318 }342 343 // Resize the vertically centered window containing the options 344 let moreOptions = Engine.GetGUIObjectByName("moreOptions"); 345 let mSize = moreOptions.size; 346 mSize.bottom = yPos + mSize.top + 20; 347 moreOptions.size = mSize; 319 348 } 320 349 321 350 function initNumberOfPlayers() … … 406 435 victoryConditions.selected = g_VictoryConditions.Default; 407 436 } 408 437 438 function initWonderDurations() 439 { 440 let wonderConditions = Engine.GetGUIObjectByName("wonderDuration"); 441 wonderConditions.list = g_WonderDurations.Title; 442 wonderConditions.list_data = g_WonderDurations.Duration; 443 wonderConditions.selected = g_WonderDurations.Default; 444 wonderConditions.onSelectionChange = function() 445 { 446 if (this.selected != -1) 447 g_GameAttributes.settings.WonderDuration = g_WonderDurations.Duration[this.selected]; 448 449 updateGameAttributes(); 450 }; 451 } 452 409 453 function initMapSizes() 410 454 { 411 455 let mapSize = Engine.GetGUIObjectByName("mapSize"); … … 1243 1287 // These dropdowns might set the default (as they ignore g_IsInGuiUpdate) 1244 1288 let mapSizeIdx = mapSettings.Size !== undefined ? g_MapSizes.Tiles.indexOf(mapSettings.Size) : g_MapSizes.Default; 1245 1289 let victoryIdx = mapSettings.GameType !== undefined ? g_VictoryConditions.Name.indexOf(mapSettings.GameType) : g_VictoryConditions.Default; 1290 let wonderDurationIdx = mapSettings.WonderDuration !== undefined ? g_WonderDurations.Duration.indexOf(mapSettings.WonderDuration) : g_WonderDurations.Default; 1246 1291 let popIdx = mapSettings.PopulationCap !== undefined ? g_PopulationCapacities.Population.indexOf(mapSettings.PopulationCap) : g_PopulationCapacities.Default; 1247 1292 let startingResIdx = mapSettings.StartingResources !== undefined ? g_StartingResources.Resources.indexOf(mapSettings.StartingResources) : g_StartingResources.Default; 1248 1293 let ceasefireIdx = mapSettings.Ceasefire !== undefined ? g_Ceasefire.Duration.indexOf(mapSettings.Ceasefire) : g_Ceasefire.Default; … … 1259 1304 Engine.GetGUIObjectByName("populationCap").selected = popIdx; 1260 1305 Engine.GetGUIObjectByName("gameSpeed").selected = gameSpeedIdx; 1261 1306 Engine.GetGUIObjectByName("ceasefire").selected = ceasefireIdx; 1307 Engine.GetGUIObjectByName("wonderDuration").selected = wonderDurationIdx; 1262 1308 Engine.GetGUIObjectByName("startingResources").selected = startingResIdx; 1263 1309 } 1264 1310 else … … 1273 1319 Engine.GetGUIObjectByName("mapSizeText").caption = g_GameAttributes.mapType == "random" ? g_MapSizes.LongName[mapSizeIdx] : translate("Default"); 1274 1320 Engine.GetGUIObjectByName("numPlayersText").caption = numPlayers; 1275 1321 Engine.GetGUIObjectByName("victoryConditionText").caption = g_VictoryConditions.Title[victoryIdx]; 1322 Engine.GetGUIObjectByName("wonderDurationText").caption = g_WonderDurations.Title[wonderDurationIdx]; 1276 1323 Engine.GetGUIObjectByName("populationCapText").caption = g_PopulationCapacities.Title[popIdx]; 1277 1324 Engine.GetGUIObjectByName("startingResourcesText").caption = g_StartingResources.Title[startingResIdx]; 1278 1325 Engine.GetGUIObjectByName("ceasefireText").caption = g_Ceasefire.Title[ceasefireIdx]; … … 1285 1332 setGUIBoolean("lockTeams", "lockTeamsText", !!mapSettings.LockTeams); 1286 1333 setGUIBoolean("enableRating", "enableRatingText", !!mapSettings.RatingEnabled); 1287 1334 1335 Engine.GetGUIObjectByName("optionWonderDuration").hidden = 1336 g_GameAttributes.settings.GameType && 1337 g_GameAttributes.settings.GameType != "wonder"; 1338 1288 1339 Engine.GetGUIObjectByName("cheatWarningText").hidden = !g_IsNetworked || !mapSettings.CheatsEnabled; 1289 1340 1290 1341 Engine.GetGUIObjectByName("enableCheats").enabled = !mapSettings.RatingEnabled; … … 1299 1350 1300 1351 let notScenario = g_GameAttributes.mapType != "scenario" && g_IsController ; 1301 1352 hideControl("victoryCondition", "victoryConditionText", notScenario); 1353 hideControl("wonderDuration", "wonderDurationText", notScenario); 1302 1354 hideControl("populationCap", "populationCapText", notScenario); 1303 1355 hideControl("startingResources", "startingResourcesText", notScenario); 1304 1356 hideControl("ceasefire", "ceasefireText", notScenario); … … 1356 1408 pColorPicker.selected = g_PlayerColors.findIndex(col => sameColor(col, color)); 1357 1409 } 1358 1410 1411 resizeMoreOptionsWindow(); 1412 1359 1413 g_IsInGuiUpdate = false; 1360 1414 1361 1415 // Game attributes include AI settings, so update the player list … … 1374 1428 let mapName = g_GameAttributes.map || ""; 1375 1429 1376 1430 let victoryIdx = Math.max(0, g_VictoryConditions.Name.indexOf(g_GameAttributes.settings.GameType || "")); 1377 let victoryTitle = g_VictoryConditions.Title[victoryIdx]; 1431 let victoryTitle; 1432 1433 if (g_VictoryConditions.Name[victoryIdx] == "wonder") 1434 victoryTitle = sprintf( 1435 translatePluralWithContext( 1436 "victory condition", 1437 "Wonder (%(min)s minute)", 1438 "Wonder (%(min)s minutes)", 1439 g_GameAttributes.settings.WonderDuration 1440 ), 1441 { "min": g_GameAttributes.settings.WonderDuration } 1442 ); 1443 else 1444 victoryTitle = g_VictoryConditions.Title[victoryIdx]; 1445 1378 1446 if (victoryIdx != g_VictoryConditions.Default) 1379 1447 victoryTitle = "[color=\"" + g_VictoryColor + "\"]" + victoryTitle + "[/color]"; 1380 1448 -
binaries/data/mods/public/gui/gamesetup/gamesetup.xml
276 276 <translatableAttribute id="caption">More Options</translatableAttribute> 277 277 </object> 278 278 279 <object size="14 38 94% 66">279 <object name="optionGameSpeed" size="14 38 94% 66"> 280 280 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 281 281 <translatableAttribute id="caption">Game Speed:</translatableAttribute> 282 282 </object> … … 286 286 </object> 287 287 </object> 288 288 289 <object size="14 68 94% 96">289 <object name="optionVictoryCondition" size="14 68 94% 96"> 290 290 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 291 291 <translatableAttribute id="caption">Victory Condition:</translatableAttribute> 292 292 </object> … … 296 296 </object> 297 297 </object> 298 298 299 <object size="14 98 94% 126">299 <object name="optionWonderDuration" size="14 188 94% 216"> 300 300 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 301 <translatableAttribute id="caption">Wonder Victory:</translatableAttribute> 302 </object> 303 <object name="wonderDurationText" size="40% 0 100% 100%" type="text" style="ModernLeftLabelText"/> 304 <object name="wonderDuration" size="40%+10 0 100% 28" type="dropdown" style="ModernDropDown" hidden="true" tooltip_style="onscreenToolTip"> 305 <translatableAttribute id="tooltip">Number of minutes that the player has to keep the wonder in order to win.</translatableAttribute> 306 </object> 307 </object> 308 309 <object name="optionPopulationCap" size="14 98 94% 126"> 310 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 301 311 <translatableAttribute id="caption">Population Cap:</translatableAttribute> 302 312 </object> 303 313 <object name="populationCapText" size="40% 0 100% 100%" type="text" style="ModernLeftLabelText"/> … … 306 316 </object> 307 317 </object> 308 318 309 <object size="14 128 94% 156">319 <object name="optionStartingResources" size="14 128 94% 156"> 310 320 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 311 321 <translatableAttribute id="caption">Starting Resources:</translatableAttribute> 312 322 </object> … … 316 326 </object> 317 327 </object> 318 328 319 <object size="14 158 94% 186">329 <object name="optionCeasefireText" size="14 158 94% 186"> 320 330 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 321 331 <translatableAttribute id="caption">Ceasefire:</translatableAttribute> 322 332 </object> … … 326 336 </object> 327 337 </object> 328 338 329 <object size="14 188 94% 216">339 <object name="optionRevealMap" size="14 218 94% 246"> 330 340 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 331 341 <translatableAttribute id="caption" comment="Make sure to differentiate between the revealed map and explored map options!">Revealed Map:</translatableAttribute> 332 342 </object> … … 336 346 </object> 337 347 </object> 338 348 339 <object size="14 218 94% 246">349 <object name="optionExploreMapText" size="14 248 94% 276"> 340 350 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 341 351 <translatableAttribute id="caption" comment="Make sure to differentiate between the revealed map and explored map options!">Explored Map:</translatableAttribute> 342 352 </object> … … 346 356 </object> 347 357 </object> 348 358 349 <object size="14 248 94% 276">359 <object name="optionDisableTreasuresText" size="14 278 94% 306"> 350 360 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 351 361 <translatableAttribute id="caption">Disable Treasures:</translatableAttribute> 352 362 </object> … … 356 366 </object> 357 367 </object> 358 368 359 <object size="14 278 94% 306">369 <object name="optionLockTeams" size="14 308 94% 336"> 360 370 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 361 371 <translatableAttribute id="caption">Teams Locked:</translatableAttribute> 362 372 </object> … … 366 376 </object> 367 377 </object> 368 378 369 <object name="optionCheats" size="14 3 08 94% 336" hidden="true">379 <object name="optionCheats" size="14 338 94% 366" hidden="true"> 370 380 <object size="0 0 40% 28" type="text" style="ModernRightLabelText"> 371 381 <translatableAttribute id="caption">Cheats:</translatableAttribute> 372 382 </object> … … 376 386 </object> 377 387 </object> 378 388 379 <object name="optionRating" size="14 3 38 94% 366" hidden="true">389 <object name="optionRating" size="14 368 94% 396" hidden="true"> 380 390 <object size="0 0 40% 28" hidden="false" type="text" style="ModernRightLabelText"> 381 391 <translatableAttribute id="caption">Rated Game:</translatableAttribute> 382 392 </object> -
binaries/data/mods/public/maps/scripts/WonderVictory.js
31 31 if (i != data.to) 32 32 players.push(i); 33 33 34 var time = cmpWonder.Get TimeTillVictory()*1000;34 var time = cmpWonder.GetVictoryDuration(); 35 35 messages.otherMessage = cmpGuiInterface.AddTimeNotification({ 36 36 "message": markForTranslation("%(player)s will have won in %(time)s"), 37 37 "players": players, -
binaries/data/mods/public/simulation/components/EndGameManager.js
15 15 // Game type, initialised from the map settings. 16 16 // One of: "conquest" (default) and "endless" 17 17 this.gameType = "conquest"; 18 18 19 this.wonderDuration = 10 * 60 * 1000; 20 19 21 // Allied victory means allied players can win if victory conditions are met for each of them 20 22 // Would be false for a "last man standing" game (when diplomacy is fully implemented) 21 23 this.alliedVictory = true; … … 37 39 return this.gameType == type; 38 40 }; 39 41 42 EndGameManager.prototype.SetWonderDuration = function(wonderDuration) 43 { 44 this.wonderDuration = wonderDuration; 45 }; 46 47 EndGameManager.prototype.GetWonderDuration = function() 48 { 49 return this.wonderDuration; 50 }; 51 40 52 EndGameManager.prototype.MarkPlayerAsWon = function(playerID) 41 53 { 42 54 var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); -
binaries/data/mods/public/simulation/components/Wonder.js
1 1 function Wonder() {} 2 2 3 3 Wonder.prototype.Schema = 4 "<element name=' TimeTillVictory'>" +5 "< data type='nonNegativeInteger'/>" +4 "<element name='DurationMultiplier' a:help='A civ-specific time-bonus/handicap for the wonder-victory-condition.'>" + 5 "<ref name='nonNegativeDecimal'/>" + 6 6 "</element>"; 7 7 8 8 Wonder.prototype.Init = function() … … 11 11 12 12 Wonder.prototype.Serialize = null; 13 13 14 Wonder.prototype.GetTimeTillVictory = function() 14 /** 15 * Returns the number of minutes that a player has to keep the wonder in order to win. 16 */ 17 Wonder.prototype.GetVictoryDuration = function() 15 18 { 16 return +this.template.TimeTillVictory; 19 var cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager); 20 return cmpEndGameManager.GetWonderDuration() * this.template.DurationMultiplier; 17 21 }; 18 22 19 23 Engine.RegisterComponentType(IID_Wonder, "Wonder", Wonder); -
binaries/data/mods/public/simulation/data/settings/wonder_times.json
1 { 2 "Times": [1, 3, 5, 10, 15, 20, 25, 30, 45, 60], 3 "Default": 15 4 } -
binaries/data/mods/public/simulation/helpers/Setup.js
49 49 var cmpEndGameManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_EndGameManager); 50 50 if (settings.GameType) 51 51 cmpEndGameManager.SetGameType(settings.GameType); 52 if (settings.WonderDuration) 53 cmpEndGameManager.SetWonderDuration(settings.WonderDuration * 60 * 1000); 52 54 53 55 if (settings.Garrison) 54 56 { -
binaries/data/mods/public/simulation/templates/template_structure_wonder.xml
91 91 <FoundationActor>structures/fndn_6x6.xml</FoundationActor> 92 92 </VisualActor> 93 93 <Wonder> 94 < TimeTillVictory>600</TimeTillVictory>94 <DurationMultiplier>1</DurationMultiplier> 95 95 </Wonder> 96 96 </Entity>