Ticket #1580: 1580.5.diff

File 1580.5.diff, 8.6 KB (added by Stan, 9 years ago)
  • binaries/data/mods/public/gui/common/settings.js

     
    3232    var settings = {
    3333        "Ceasefire": loadCeasefire(),
    3434        "GameSpeeds": loadSettingValuesFile("game_speeds.json"),
     35        "PlayerColors": loadPlayerColors(),
    3536        "PopulationCapacities": loadPopulationCapacities(),
    3637        "StartingResources": loadSettingValuesFile("starting_resources.json")
    3738    };
     
    8990}
    9091
    9192/**
     93* Loads available colors settings.
     94*
     95* @returns {Array|undefined}
     96*/
     97function 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/**
    92111 * Loads available population capacities.
    93112 *
    94113 * @returns {Array|undefined}
  • binaries/data/mods/public/gui/gamesetup/gamesetup.js

     
    77
    88const g_Ceasefire = prepareForDropdown(g_Settings ? g_Settings.Ceasefire : undefined);
    99const g_GameSpeeds = prepareForDropdown(g_Settings ? g_Settings.GameSpeeds.filter(speed => !speed.ReplayOnly) : undefined);
     10const g_PlayerColors = prepareForDropdown(g_Settings ? g_Settings.PlayerColors : undefined);
    1011const g_PopulationCapacities = prepareForDropdown(g_Settings ? g_Settings.PopulationCapacities : undefined);
    1112const g_StartingResources = prepareForDropdown(g_Settings ? g_Settings.StartingResources : undefined);
    1213
     
    5051
    5152var g_AIs = [];
    5253
     54var g_PlayerColorIds = [];
     55var g_PlayerColorNames = [];
     56var g_PlayerColorValues = [["r","g","b"]];
     57
    5358var g_ChatMessages = [];
    5459
    5560// Data caches
     
    380385            updateGameAttributes();
    381386        };
    382387
     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
    383419        // Set events
    384420        var civ = Engine.GetGUIObjectByName("playerCiv["+i+"]");
    385421        civ.onSelectionChange = function() {
     
    413449    }
    414450}
    415451
     452// Returns the index of the specified color.
     453function 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
     465function 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
     473function copyRgbValuesFromColorIntoColor(color1, color2)
     474{
     475      color2.r = color1.r;
     476    color2.g = color1.g;
     477    color2.b = color1.b;
     478}
     479
     480function 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
     488function getPlayerColorValues()
     489{
     490    return g_Settings.PlayerColors;
     491}
     492
     493function rgbValuesMatch(color1, color2)
     494{
     495    return color1.r === color2.r && color1.g === color2.g && color1.b === color2.b;
     496}
     497
    416498function handleNetMessage(message)
    417499{
    418500    log("Net message: " + uneval(message));
     
    14221504        var pTeam = Engine.GetGUIObjectByName("playerTeam["+i+"]");
    14231505        var pTeamText = Engine.GetGUIObjectByName("playerTeamText["+i+"]");
    14241506        var pColor = Engine.GetGUIObjectByName("playerColor["+i+"]");
     1507        var pColorPicker = Engine.GetGUIObjectByName("playerColorPicker["+i+"]")
    14251508
    14261509        // Player data / defaults
    14271510        var pData = mapSettings.PlayerData ? mapSettings.PlayerData[i] : {};
     
    14281511        var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[i] : {};
    14291512
    14301513        // 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";
    14331516        pName.caption = translate(getSetting(pData, pDefs, "Name"));
    14341517
    14351518        var team = getSetting(pData, pDefs, "Team");
     
    14491532        {
    14501533            pCivText.hidden = false;
    14511534            pCiv.hidden = true;
     1535            pColorPicker.hidden = true;
    14521536            pTeamText.hidden = false;
    14531537            pTeam.hidden = true;
    14541538            // Set text values
     
    14641548            pCiv.hidden = false;
    14651549            pTeamText.hidden = true;
    14661550            pTeam.hidden = false;
     1551            pColorPicker.hidden = false;
    14671552            // Set dropdown values
    14681553            pCiv.selected = (civ ? pCiv.list_data.indexOf(civ) : 0);
    14691554            pTeam.selected = (team !== undefined && team >= 0) ? team+1 : 0;
     1555            pColorPicker.selected = getIndexOfColor(color);
    14701556        }
    14711557    }
    14721558
  • binaries/data/mods/public/gui/gamesetup/gamesetup.xml

     
    4242            <!-- Player assignments -->
    4343            <object size="24 49 100%-440 345" type="image" sprite="ModernDarkBoxGold" name="playerAssignmentsPanel">
    4444                <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%">
    4646                        <translatableAttribute id="caption">Player Name</translatableAttribute>
    4747                    </object>
     48                    <object name="playerColorHeading" type="text" style="ModernLabelText" size="-2% 0 40% 100%">
     49                        <translatableAttribute id="caption">Color</translatableAttribute>
     50                    </object>
    4851                    <object name="playerPlacementHeading" type="text" style="ModernLabelText" size="22%+5 0 50%+35 100%">
    4952                        <translatableAttribute id="caption">Player Placement</translatableAttribute>
    5053                    </object>
     
    7174                    <repeat count="8">
    7275                        <object name="playerBox[n]" size="0 0 100% 32" hidden="true">
    7376                            <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>
    7581                            <object name="playerAssignment[n]" type="dropdown" style="ModernDropDown" size="22%+5 2 50%+35 30" tooltip_style="onscreenToolTip">
    7682                                <translatableAttribute id="tooltip">Select player.</translatableAttribute>
    7783                            </object>
     
    152158                    tooltip_style="onscreenToolTip">
    153159                    <translatableAttribute id="tooltip">Select a map to play on.</translatableAttribute>
    154160                    <action on="SelectionChange">
    155                         if (this.list_data[this.selected]) 
     161                        if (this.list_data[this.selected])
    156162                            selectMap(this.list_data[this.selected]);
    157163                    </action>
    158164                </object>
     
    179185
    180186            <!-- Map Description -->
    181187            <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"/>
    183189                <object type="image" sprite="ModernDarkBoxGold" size="0 30 100% 100%">
    184190                    <object name="mapInfoDescription" type="text" style="MapDescription" size="0 0 100% 100%"/>
    185191                </object>