Ticket #52: DisablingTemplatesByTriggers.patch
File DisablingTemplatesByTriggers.patch, 7.4 KB (added by , 10 years ago) |
---|
-
binaries/data/mods/public/maps/random/survivalofthefittest_triggers.js
96 96 { 97 97 if (TriggerHelper.EntityHasClass(entity, "CivilCentre")) 98 98 { 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 100 102 } 101 103 } 102 104 } … … 118 120 // Additional stuff 119 121 var cmpPlayer = TriggerHelper.GetPlayerComponent(numberOfPlayers); 120 122 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 } 121 134 } 122 135 123 136 Trigger.prototype.PlaceTreasures = function() … … 168 181 cmpTrigger.DoAfterDelay(0, "InitGame", {}); 169 182 cmpTrigger.DoAfterDelay(1000, "InitializeEnemyWaves", {}); 170 183 171 cmpTrigger.RegisterTrigger("OnOwnershipChanged", "DefeatPlayerOnceCCIsDestroyed", {"enabled": true}); 172 No newline at end of file 184 cmpTrigger.RegisterTrigger("OnOwnershipChanged", "DefeatPlayerOnceCCIsDestroyed", {"enabled": true}); -
binaries/data/mods/public/simulation/components/Builder.js
35 35 if (cmpIdentity) 36 36 string = string.replace(/\{civ\}/g, cmpIdentity.GetCiv()); 37 37 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); 38 46 } 39 47 return entities; 40 48 }; -
binaries/data/mods/public/simulation/components/Player.js
42 42 "metal": markForTranslation("Metal"), 43 43 "stone": markForTranslation("Stone"), 44 44 } 45 this.disabledTemplates = {}; 45 46 }; 46 47 47 48 Player.prototype.SetPlayerID = function(id) … … 699 700 cmpGUIInterface.PushNotification(notification); 700 701 }; 701 702 703 Player.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 711 Player.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 719 Player.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 727 Player.prototype.GetDisabledTemplates = function(templates) 728 { 729 return this.disabledTemplates; 730 }; 731 702 732 Engine.RegisterComponentType(IID_Player, "Player", Player); -
binaries/data/mods/public/simulation/components/ProductionQueue.js
103 103 string = string.replace(/\{civ\}/g, cmpIdentity.GetCiv()); 104 104 105 105 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 107 115 // check if some templates need to show their advanced or elite version 108 116 var upgradeTemplate = function(templateName) 109 117 { … … 120 128 }; 121 129 122 130 var cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager); 123 var playerID = QueryOwnerInterface(this.entity, IID_Player).GetPlayerID();131 var playerID = cmpPlayer.GetPlayerID(); 124 132 for each (var templateName in entitiesList) 125 133 this.entitiesList.push(upgradeTemplate(templateName)); 126 134 for each (var item in this.queue) … … 785 793 this.CalculateEntitiesList(); 786 794 }; 787 795 796 ProductionQueue.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 788 803 Engine.RegisterComponentType(IID_ProductionQueue, "ProductionQueue", ProductionQueue); -
source/simulation2/MessageTypes.h
519 519 } 520 520 }; 521 521 522 /** 523 * Sent when a player's disabled templates list is changed 524 */ 525 class CMessageDisabledTemplatesChanged : public CMessage 526 { 527 public: 528 DEFAULT_MESSAGE_IMPL(DisabledTemplatesChanged) 529 530 CMessageDisabledTemplatesChanged() 531 { 532 } 533 }; 534 522 535 #endif // INCLUDED_MESSAGETYPES -
source/simulation2/scripting/MessageTypeConversions.cpp
451 451 return new CMessageMinimapPing(); 452 452 } 453 453 454 ///////////////////////////////// 455 456 jsval CMessageDisabledTemplatesChanged::ToJSVal(ScriptInterface& scriptInterface) const 457 { 458 TOJSVAL_SETUP(); 459 return OBJECT_TO_JSVAL(obj); 460 } 461 462 CMessage* CMessageDisabledTemplatesChanged::FromJSVal(ScriptInterface& UNUSED(scriptInterface), jsval UNUSED(val)) 463 { 464 return new CMessageDisabledTemplatesChanged(); 465 } 466 454 467 //////////////////////////////////////////////////////////////// 455 468 456 469 CMessage* CMessageFromJSVal(int mtid, ScriptInterface& scriptingInterface, jsval val) -
source/simulation2/TypeList.h
56 56 MESSAGE(TemplateModification) 57 57 MESSAGE(VisionRangeChanged) 58 58 MESSAGE(MinimapPing) 59 MESSAGE(DisabledTemplatesChanged) 59 60 60 61 // TemplateManager must come before all other (non-test) components, 61 62 // so that it is the first to be (de)serialized