Ticket #52: DisablingTemplatesByTriggers.2.patch

File DisablingTemplatesByTriggers.2.patch, 6.6 KB (added by O.Davoodi, 10 years ago)

New patch that also informs the GUI that the change has happened. Fixes issues pointed by leper and sanderd17

  • public/gui/session/messages.js

     
    117117        if (player == Engine.GetPlayerID())
    118118            openDialog(notification.dialogName, notification.data, player);
    119119    },
     120    "resetselectionpannel": function(notification, player)
     121    {
     122        if (player != Engine.GetPlayerID())
     123            return;
     124        g_Selection.rebuildSelection([]);
     125    }
    120126};
    121127
    122128// Notifications
  • public/maps/random/survivalofthefittest_triggers.js

     
    100100        }
    101101    }
    102102
     103    // Fix alliances
     104    for (var i = 1; i < numberOfPlayers; ++i)
     105    {
     106        var cmpPlayer = TriggerHelper.GetPlayerComponent(i);
     107        for (var j = 1; j < numberOfPlayers; ++j)
     108            if (i != j)
     109                cmpPlayer.SetAlly(j);
     110        cmpPlayer.SetLockTeams(true);
     111    }
     112   
    103113    // make gaia black
    104114    TriggerHelper.GetPlayerComponent(0).SetColour(0, 0, 0);
    105115   
     
    133143{
    134144    // Defeat a player that has lost his civic center
    135145    if (data.entity == cmpTrigger.playerCivicCenter[data.from] && data.to == -1)
     146    {
    136147        TriggerHelper.DefeatPlayer(data.from);
    137148   
    138     // Check if only one player remains. He will be the winner.
    139     var lastPlayerStanding = 0;
    140     var numPlayersStanding = 0;
    141     var numberOfPlayers = TriggerHelper.GetNumberOfPlayers();
    142     for (var i = 1; i < numberOfPlayers; ++i)
    143     {
    144         if (TriggerHelper.GetPlayerComponent(i).GetState() == "active")
     149        // Check if only one player remains. He will be the winner.
     150        var lastPlayerStanding = 0;
     151        var numPlayersStanding = 0;
     152        var numberOfPlayers = TriggerHelper.GetNumberOfPlayers();
     153        for (var i = 1; i < numberOfPlayers; ++i)
    145154        {
    146             lastPlayerStanding = i;
    147             ++numPlayersStanding;
     155            if (TriggerHelper.GetPlayerComponent(i).GetState() == "active")
     156            {
     157                lastPlayerStanding = i;
     158                ++numPlayersStanding;
     159            }
    148160        }
     161        if (numPlayersStanding == 1)
     162            TriggerHelper.SetPlayerWon(lastPlayerStanding);
    149163    }
    150     if (numPlayersStanding == 1)
    151         TriggerHelper.SetPlayerWon(lastPlayerStanding);
    152164}
    153165
    154166var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
  • public/simulation/components/Builder.js

     
    3535        if (cmpIdentity)
    3636            string = string.replace(/\{civ\}/g, cmpIdentity.GetCiv());
    3737        entities = string.split(/\s+/);
     38       
     39        // Remove disabled entities
     40        var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player)
     41        var disabledEntities = cmpPlayer.GetDisabledTemplates();
     42       
     43        for (var i = entities.length - 1; i >= 0; --i)
     44            if (disabledEntities[entities[i]])
     45                entities.splice(i, 1);
    3846    }
    3947    return entities;
    4048};
  • public/simulation/components/Player.js

     
    4242        "metal": markForTranslation("Metal"),
    4343        "stone": markForTranslation("Stone"),
    4444    }
     45    this.disabledTemplates = {};
    4546};
    4647
    4748Player.prototype.SetPlayerID = function(id)
     
    699700        cmpGUIInterface.PushNotification(notification);
    700701};
    701702
     703Player.prototype.AddDisabledTemplate = function(template)
     704{
     705    this.disabledTemplates[template] = true;
     706    var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
     707    var ents = cmpRangeManager.GetEntitiesByPlayer(this.playerID);
     708    Engine.BroadcastMessage(MT_DisabledTemplatesChanged, {});
     709    var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
     710    cmpGuiInterface.PushNotification({"type": "resetselectionpannel", "players": [this.GetPlayerID()]});
     711};
     712
     713Player.prototype.RemoveDisabledTemplate = function(template)
     714{
     715    this.disabledTemplates[template] = false;
     716    var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
     717    var ents = cmpRangeManager.GetEntitiesByPlayer(this.playerID);
     718    Engine.BroadcastMessage(MT_DisabledTemplatesChanged, {});
     719    var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
     720    cmpGuiInterface.PushNotification({"type": "resetselectionpannel", "players": [this.GetPlayerID()]});
     721};
     722
     723Player.prototype.SetDisabledTemplates = function(templates)
     724{
     725    this.disabledTemplates = templates;
     726    var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
     727    var ents = cmpRangeManager.GetEntitiesByPlayer(this.playerID);
     728    Engine.BroadcastMessage(MT_DisabledTemplatesChanged, {});
     729    var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
     730    cmpGuiInterface.PushNotification({"type": "resetselectionpannel", "players": [this.GetPlayerID()]});
     731};
     732
     733Player.prototype.GetDisabledTemplates = function(templates)
     734{
     735    return this.disabledTemplates;
     736};
     737
    702738Engine.RegisterComponentType(IID_Player, "Player", Player);
  • public/simulation/components/ProductionQueue.js

     
    103103        string = string.replace(/\{civ\}/g, cmpIdentity.GetCiv());
    104104   
    105105    var entitiesList = string.split(/\s+/);
    106 
     106   
     107    // Remove disabled entities
     108    var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player)
     109    var disabledEntities = cmpPlayer.GetDisabledTemplates();
     110   
     111    for (var i = entitiesList.length - 1; i >= 0; --i)
     112        if (disabledEntities[entitiesList[i]])
     113            entitiesList.splice(i, 1);
     114   
    107115    // check if some templates need to show their advanced or elite version
    108116    var upgradeTemplate = function(templateName)
    109117    {
     
    120128    };
    121129
    122130    var cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager);
    123     var playerID = QueryOwnerInterface(this.entity, IID_Player).GetPlayerID();
     131    var playerID = cmpPlayer.GetPlayerID();
    124132    for each (var templateName in entitiesList)
    125133        this.entitiesList.push(upgradeTemplate(templateName));
    126134    for each (var item in this.queue)
     
    785793        this.CalculateEntitiesList();
    786794};
    787795
     796ProductionQueue.prototype.OnDisabledTemplatesChanged = function(msg)
     797{
     798    // if the disabled templates of the player is changed,
     799    // update the entities list so that this is reflected there
     800    this.CalculateEntitiesList();
     801};
     802
    788803Engine.RegisterComponentType(IID_ProductionQueue, "ProductionQueue", ProductionQueue);