Ticket #1580: 1580.4.diff

File 1580.4.diff, 7.0 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]], g_GameAttributes.settings.PlayerData[n].Color))
     404                    {
     405                        inUse = true;
     406                        break;
     407                    }
     408                }
     409                if(!inUse){
     410                    copyRgbValuesFromColorIntoColor(playerColorValues[this.list_data[this.selected]], g_GameAttributes.settings.PlayerData[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
     452function getPlayerColorIds()
     453{
     454    for(let i = 0; i < g_PlayerColors.r.length;++i)
     455        g_PlayerColorIds[i] = i;
     456
     457    return g_PlayerColorIds;
     458}
     459
     460function copyRgbValuesFromColorIntoColor(color1, color2)
     461{
     462      color2.r = color1.r;
     463    color2.g = color1.g;
     464    color2.b = color1.b;
     465}
     466
     467function getPlayerColorNames()
     468{
     469    for(let i = 0; i < g_PlayerColors.r.length;++i)
     470        g_PlayerColorNames[i] = "[color=\"" + g_PlayerColors.r[i] + " " + g_PlayerColors.g[i] + " " + g_PlayerColors.b[i] + " 255\"]" + "■";
     471
     472        return g_PlayerColorNames;
     473}
     474
     475function getPlayerColorValues()
     476{
     477    for(let i = 0; i < g_PlayerColors.r.length;++i)
     478    {
     479        g_PlayerColorValues[i].r = g_PlayerColors.r[i];
     480        g_PlayerColorValues[i].g = g_PlayerColors.g[i];
     481        g_PlayerColorValues[i].b = g_PlayerColors.b[i];
     482    }
     483
     484    return g_PlayerColorValues;
     485}
     486
     487function rgbValuesMatch(color1, color2)
     488{
     489    return color1.r === color2.r && color1.g === color2.g && color1.b === color2.b;
     490}
     491
    416492function handleNetMessage(message)
    417493{
    418494    log("Net message: " + uneval(message));
  • 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>