Ticket #52: DisablingTemplatesByTriggers.patch

File DisablingTemplatesByTriggers.patch, 7.4 KB (added by O.Davoodi, 10 years ago)
  • binaries/data/mods/public/maps/random/survivalofthefittest_triggers.js

     
    9696        {
    9797            if (TriggerHelper.EntityHasClass(entity, "CivilCentre"))
    9898            {
    99                 cmpTrigger.playerCivicCenter[i] = entity;
     99                cmpTrigger.playerCivicCenter[i] = entity; // Don't put a "break;" here. For some reason each player has an
     100                                                          // extra entity with CivicCenter class with an ID smaller than
     101                                                          // that of the actual Civic Center
    100102            }
    101103        }
    102104    }
     
    118120    // Additional stuff
    119121    var cmpPlayer = TriggerHelper.GetPlayerComponent(numberOfPlayers);
    120122    cmpPlayer.SetName("Enemy Waves");
     123   
     124    // Disable farms and civic centers for all players
     125    for (var i = 1; i < numberOfPlayers; ++i)
     126    {
     127        var cmpPlayer = TriggerHelper.GetPlayerComponent(i);
     128        var civ = cmpPlayer.GetCiv();
     129        var disabledTemplates = {}
     130        disabledTemplates["structures/" + civ + "_field"] = true;
     131        disabledTemplates["structures/" + civ + "_civil_centre"] = true;
     132        cmpPlayer.SetDisabledTemplates(disabledTemplates);
     133    }
    121134}
    122135
    123136Trigger.prototype.PlaceTreasures = function()
     
    168181cmpTrigger.DoAfterDelay(0, "InitGame", {});
    169182cmpTrigger.DoAfterDelay(1000, "InitializeEnemyWaves", {});
    170183
    171 cmpTrigger.RegisterTrigger("OnOwnershipChanged", "DefeatPlayerOnceCCIsDestroyed", {"enabled": true});
    172  No newline at end of file
     184cmpTrigger.RegisterTrigger("OnOwnershipChanged", "DefeatPlayerOnceCCIsDestroyed", {"enabled": true});
  • binaries/data/mods/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 = 0; i < entities.length; ++i)
     44            if (disabledEntities[entities[i]])
     45                entities.splice(i, 1);
    3846    }
    3947    return entities;
    4048};
  • binaries/data/mods/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};
     710
     711Player.prototype.RemoveDisabledTemplate = function(template)
     712{
     713    this.disabledTemplates[template] = false;
     714    var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
     715    var ents = cmpRangeManager.GetEntitiesByPlayer(this.playerID);
     716    Engine.BroadcastMessage(MT_DisabledTemplatesChanged, {});
     717};
     718
     719Player.prototype.SetDisabledTemplates = function(templates)
     720{
     721    this.disabledTemplates = templates;
     722    var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
     723    var ents = cmpRangeManager.GetEntitiesByPlayer(this.playerID);
     724    Engine.BroadcastMessage(MT_DisabledTemplatesChanged, {});
     725};
     726
     727Player.prototype.GetDisabledTemplates = function(templates)
     728{
     729    return this.disabledTemplates;
     730};
     731
    702732Engine.RegisterComponentType(IID_Player, "Player", Player);
  • binaries/data/mods/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 = 0; i < entitiesList.length; ++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);
  • source/simulation2/MessageTypes.h

     
    519519    }
    520520};
    521521
     522/**
     523 * Sent when a player's disabled templates list is changed
     524 */
     525class CMessageDisabledTemplatesChanged : public CMessage
     526{
     527public:
     528    DEFAULT_MESSAGE_IMPL(DisabledTemplatesChanged)
     529
     530    CMessageDisabledTemplatesChanged()
     531    {
     532    }
     533};
     534
    522535#endif // INCLUDED_MESSAGETYPES
  • source/simulation2/scripting/MessageTypeConversions.cpp

     
    451451    return new CMessageMinimapPing();
    452452}
    453453
     454/////////////////////////////////
     455
     456jsval CMessageDisabledTemplatesChanged::ToJSVal(ScriptInterface& scriptInterface) const
     457{
     458    TOJSVAL_SETUP();
     459    return OBJECT_TO_JSVAL(obj);
     460}
     461
     462CMessage* CMessageDisabledTemplatesChanged::FromJSVal(ScriptInterface& UNUSED(scriptInterface), jsval UNUSED(val))
     463{
     464    return new CMessageDisabledTemplatesChanged();
     465}
     466
    454467////////////////////////////////////////////////////////////////
    455468
    456469CMessage* CMessageFromJSVal(int mtid, ScriptInterface& scriptingInterface, jsval val)
  • source/simulation2/TypeList.h

     
    5656MESSAGE(TemplateModification)
    5757MESSAGE(VisionRangeChanged)
    5858MESSAGE(MinimapPing)
     59MESSAGE(DisabledTemplatesChanged)
    5960
    6061// TemplateManager must come before all other (non-test) components,
    6162// so that it is the first to be (de)serialized