Ticket #1580: 1580.5.diff
File 1580.5.diff, 8.6 KB (added by , 9 years ago) |
---|
-
binaries/data/mods/public/gui/common/settings.js
32 32 var settings = { 33 33 "Ceasefire": loadCeasefire(), 34 34 "GameSpeeds": loadSettingValuesFile("game_speeds.json"), 35 "PlayerColors": loadPlayerColors(), 35 36 "PopulationCapacities": loadPopulationCapacities(), 36 37 "StartingResources": loadSettingValuesFile("starting_resources.json") 37 38 }; … … 89 90 } 90 91 91 92 /** 93 * Loads available colors settings. 94 * 95 * @returns {Array|undefined} 96 */ 97 function loadPlayerColors() 98 { 99 var json = Engine.ReadJSONFile("simulation/data/player_defaults.json"); 100 101 if (!json || !json.PlayerData || !Array.isArray(json.PlayerData)) 102 { 103 error("Could not load player_defaults.json"); 104 return undefined; 105 } 106 107 return json.PlayerData.map(player => player.Color); 108 } 109 110 /** 92 111 * Loads available population capacities. 93 112 * 94 113 * @returns {Array|undefined} -
binaries/data/mods/public/gui/gamesetup/gamesetup.js
7 7 8 8 const g_Ceasefire = prepareForDropdown(g_Settings ? g_Settings.Ceasefire : undefined); 9 9 const g_GameSpeeds = prepareForDropdown(g_Settings ? g_Settings.GameSpeeds.filter(speed => !speed.ReplayOnly) : undefined); 10 const g_PlayerColors = prepareForDropdown(g_Settings ? g_Settings.PlayerColors : undefined); 10 11 const g_PopulationCapacities = prepareForDropdown(g_Settings ? g_Settings.PopulationCapacities : undefined); 11 12 const g_StartingResources = prepareForDropdown(g_Settings ? g_Settings.StartingResources : undefined); 12 13 … … 50 51 51 52 var g_AIs = []; 52 53 54 var g_PlayerColorIds = []; 55 var g_PlayerColorNames = []; 56 var g_PlayerColorValues = [["r","g","b"]]; 57 53 58 var g_ChatMessages = []; 54 59 55 60 // Data caches … … 380 385 updateGameAttributes(); 381 386 }; 382 387 388 // Populate color drop-down lists. 389 var colorPicker = Engine.GetGUIObjectByName("playerColorPicker["+i+"]"); 390 colorPicker.list = getPlayerColorNames(); 391 colorPicker.list_data = getPlayerColorIds(); 392 colorPicker.selected = -1; 393 // Update color 394 colorPicker.onSelectionChange = function() 395 { 396 if (this.selected !== -1) 397 { 398 let numPlayers = g_GameAttributes.settings.PlayerData.length; 399 let inUse = false; 400 let playerColorValues = getPlayerColorValues(); 401 for (let n = 0; n < numPlayers; ++n) 402 { 403 if (rgbValuesMatch(playerColorValues[this.list_data[this.selected]], getSetting(g_GameAttributes.settings.PlayerData, g_DefaultPlayerData ? g_DefaultPlayerData[n] : {}, "Color"))) 404 { 405 inUse = true; 406 break; 407 } 408 } 409 if(!inUse){ 410 copyRgbValuesFromColorIntoColor(playerColorValues[this.list_data[this.selected]], getSetting(g_GameAttributes.settings.PlayerData, g_DefaultPlayerData ? g_DefaultPlayerData[playerSlot] : {}, "Color")); 411 } 412 } 413 if (!g_IsInGuiUpdate) 414 { 415 updateGameAttributes(); 416 } 417 } 418 383 419 // Set events 384 420 var civ = Engine.GetGUIObjectByName("playerCiv["+i+"]"); 385 421 civ.onSelectionChange = function() { … … 413 449 } 414 450 } 415 451 452 // Returns the index of the specified color. 453 function getIndexOfColor(color) 454 { 455 for (var i = 0; i < g_PlayerColors.r.length; ++i) 456 { 457 if (rgbValuesMatch(getPlayerColorValues()[i], color)) 458 { 459 return i; 460 } 461 } 462 return -1; 463 } 464 465 function getPlayerColorIds() 466 { 467 for(let i = 0; i < g_PlayerColors.r.length;++i) 468 g_PlayerColorIds[i] = i; 469 470 return g_PlayerColorIds; 471 } 472 473 function copyRgbValuesFromColorIntoColor(color1, color2) 474 { 475 color2.r = color1.r; 476 color2.g = color1.g; 477 color2.b = color1.b; 478 } 479 480 function getPlayerColorNames() 481 { 482 for(let i = 0; i < g_PlayerColors.r.length;++i) 483 g_PlayerColorNames[i] = "[color=\"" + g_PlayerColors.r[i] + " " + g_PlayerColors.g[i] + " " + g_PlayerColors.b[i] + " 255\"]" + "■"; 484 485 return g_PlayerColorNames; 486 } 487 488 function getPlayerColorValues() 489 { 490 return g_Settings.PlayerColors; 491 } 492 493 function rgbValuesMatch(color1, color2) 494 { 495 return color1.r === color2.r && color1.g === color2.g && color1.b === color2.b; 496 } 497 416 498 function handleNetMessage(message) 417 499 { 418 500 log("Net message: " + uneval(message)); … … 1422 1504 var pTeam = Engine.GetGUIObjectByName("playerTeam["+i+"]"); 1423 1505 var pTeamText = Engine.GetGUIObjectByName("playerTeamText["+i+"]"); 1424 1506 var pColor = Engine.GetGUIObjectByName("playerColor["+i+"]"); 1507 var pColorPicker = Engine.GetGUIObjectByName("playerColorPicker["+i+"]") 1425 1508 1426 1509 // Player data / defaults 1427 1510 var pData = mapSettings.PlayerData ? mapSettings.PlayerData[i] : {}; … … 1428 1511 var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[i] : {}; 1429 1512 1430 1513 // Common to all game types 1431 var color = rgbToGuiColor(getSetting(pData, pDefs, "Color"));1432 pColor.sprite = "color:" + color+ " 100";1514 var color = getSetting(pData, pDefs, "Color"); 1515 pColor.sprite = "color:" + rgbToGuiColor(color) + " 100"; 1433 1516 pName.caption = translate(getSetting(pData, pDefs, "Name")); 1434 1517 1435 1518 var team = getSetting(pData, pDefs, "Team"); … … 1449 1532 { 1450 1533 pCivText.hidden = false; 1451 1534 pCiv.hidden = true; 1535 pColorPicker.hidden = true; 1452 1536 pTeamText.hidden = false; 1453 1537 pTeam.hidden = true; 1454 1538 // Set text values … … 1464 1548 pCiv.hidden = false; 1465 1549 pTeamText.hidden = true; 1466 1550 pTeam.hidden = false; 1551 pColorPicker.hidden = false; 1467 1552 // Set dropdown values 1468 1553 pCiv.selected = (civ ? pCiv.list_data.indexOf(civ) : 0); 1469 1554 pTeam.selected = (team !== undefined && team >= 0) ? team+1 : 0; 1555 pColorPicker.selected = getIndexOfColor(color); 1470 1556 } 1471 1557 } 1472 1558 -
binaries/data/mods/public/gui/gamesetup/gamesetup.xml
42 42 <!-- Player assignments --> 43 43 <object size="24 49 100%-440 345" type="image" sprite="ModernDarkBoxGold" name="playerAssignmentsPanel"> 44 44 <object size="0 6 100% 30"> 45 <object name="playerNameHeading" type="text" style="ModernLabelText" size="0 0 22% 100%">45 <object name="playerNameHeading" type="text" style="ModernLabelText" size="0 0 16% 100%"> 46 46 <translatableAttribute id="caption">Player Name</translatableAttribute> 47 47 </object> 48 <object name="playerColorHeading" type="text" style="ModernLabelText" size="-2% 0 40% 100%"> 49 <translatableAttribute id="caption">Color</translatableAttribute> 50 </object> 48 51 <object name="playerPlacementHeading" type="text" style="ModernLabelText" size="22%+5 0 50%+35 100%"> 49 52 <translatableAttribute id="caption">Player Placement</translatableAttribute> 50 53 </object> … … 71 74 <repeat count="8"> 72 75 <object name="playerBox[n]" size="0 0 100% 32" hidden="true"> 73 76 <object name="playerColor[n]" type="image" size="0 0 100% 100%"/> 74 <object name="playerName[n]" type="text" style="ModernLabelText" size="0 2 22% 30"/> 77 <object name="playerName[n]" type="text" style="ModernLabelText" size="0 0 16% 100%"/> 78 <object name="playerColorPicker[n]" type="dropdown" style="ModernDropDown" size="16%+5 2 20%+5 30" tooltip_style="onscreenToolTip"> 79 <translatableAttribute id="tooltip">Pick Color.</translatableAttribute> 80 </object> 75 81 <object name="playerAssignment[n]" type="dropdown" style="ModernDropDown" size="22%+5 2 50%+35 30" tooltip_style="onscreenToolTip"> 76 82 <translatableAttribute id="tooltip">Select player.</translatableAttribute> 77 83 </object> … … 152 158 tooltip_style="onscreenToolTip"> 153 159 <translatableAttribute id="tooltip">Select a map to play on.</translatableAttribute> 154 160 <action on="SelectionChange"> 155 if (this.list_data[this.selected]) 161 if (this.list_data[this.selected]) 156 162 selectMap(this.list_data[this.selected]); 157 163 </action> 158 164 </object> … … 179 185 180 186 <!-- Map Description --> 181 187 <object size="100%-425 529 100%-25 100%-60"> 182 <object name="mapInfoName" type="text" style="ModernLeftLabelText" size="0 0 100%-120 30"/> 188 <object name="mapInfoName" type="text" style="ModernLeftLabelText" size="0 0 100%-120 30"/> 183 189 <object type="image" sprite="ModernDarkBoxGold" size="0 30 100% 100%"> 184 190 <object name="mapInfoDescription" type="text" style="MapDescription" size="0 0 100% 100%"/> 185 191 </object>