mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-18 06:13:55 -07:00
Cleanup the conquest code
Stop listening to OnTrainingFinished and OnStructureBuild messages but use OnOwnershipChanged messages. This fixes the defeat when only promoted/upgrades/regi-hero units remain. Add foundations to the conquest lists and make them visible on the minimap. Patch By: temple Differential Revision: https://code.wildfiregames.com/D1022 This was SVN commit r20471.
This commit is contained in:
parent
b0bd645fbb
commit
722578fdcd
5 changed files with 14 additions and 80 deletions
|
|
@ -1,12 +1,5 @@
|
|||
{
|
||||
let cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
|
||||
cmpTrigger.conquestClassFilter = "ConquestCritical";
|
||||
cmpTrigger.conquestDefeatReason = markForTranslation("%(player)s has been defeated (lost all workers and structures).");
|
||||
|
||||
let data = { "enabled": true };
|
||||
cmpTrigger.RegisterTrigger("OnOwnershipChanged", "ConquestHandlerOwnerShipChanged", data);
|
||||
cmpTrigger.RegisterTrigger("OnStructureBuilt", "ConquestAddStructure", data);
|
||||
cmpTrigger.RegisterTrigger("OnTrainingFinished", "ConquestTrainingFinished", data);
|
||||
|
||||
cmpTrigger.DoAfterDelay(0, "ConquestStartGameCount", null);
|
||||
cmpTrigger.conquestDefeatReason = markForTranslation("%(player)s has been defeated (lost all critical units and structures).");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
Trigger.prototype.ConquestHandlerOwnerShipChanged = function(msg)
|
||||
Trigger.prototype.ConquestOwnershipChanged = function(msg)
|
||||
{
|
||||
if (!this.conquestDataInit || !this.conquestClassFilter)
|
||||
return;
|
||||
|
|
@ -6,25 +6,16 @@ Trigger.prototype.ConquestHandlerOwnerShipChanged = function(msg)
|
|||
if (!TriggerHelper.EntityMatchesClassList(msg.entity, this.conquestClassFilter))
|
||||
return;
|
||||
|
||||
if (msg.from == -1)
|
||||
return;
|
||||
|
||||
if (msg.to > 0 && this.conquestEntitiesByPlayer[msg.to])
|
||||
if (msg.to > 0)
|
||||
this.conquestEntitiesByPlayer[msg.to].push(msg.entity);
|
||||
|
||||
if (!this.conquestEntitiesByPlayer[msg.from])
|
||||
if (msg.from > 0)
|
||||
{
|
||||
if (msg.from)
|
||||
warn("ConquestHandlerOwnerShipChanged: Unknow player " + msg.from);
|
||||
return;
|
||||
}
|
||||
let entities = this.conquestEntitiesByPlayer[msg.from];
|
||||
let index = entities.indexOf(msg.entity);
|
||||
if (index != -1)
|
||||
entities.splice(index, 1);
|
||||
|
||||
let entities = this.conquestEntitiesByPlayer[msg.from];
|
||||
let index = entities.indexOf(msg.entity);
|
||||
|
||||
if (index >= 0)
|
||||
{
|
||||
entities.splice(index, 1);
|
||||
if (!entities.length)
|
||||
{
|
||||
let cmpPlayer = QueryPlayerIDInterface(msg.from);
|
||||
|
|
@ -34,46 +25,6 @@ Trigger.prototype.ConquestHandlerOwnerShipChanged = function(msg)
|
|||
}
|
||||
};
|
||||
|
||||
Trigger.prototype.ConquestAddStructure = function(msg)
|
||||
{
|
||||
if (!this.conquestClassFilter || !TriggerHelper.EntityMatchesClassList(msg.building, this.conquestClassFilter))
|
||||
return;
|
||||
|
||||
let cmpOwnership = Engine.QueryInterface(msg.building, IID_Ownership);
|
||||
if (!cmpOwnership)
|
||||
{
|
||||
warn("ConquestAddStructure: Structure without Owner");
|
||||
return;
|
||||
}
|
||||
|
||||
let player = cmpOwnership.GetOwner();
|
||||
if (!this.conquestEntitiesByPlayer[player])
|
||||
{
|
||||
if (player != 0)
|
||||
warn("ConquestAddStructure: Unknown player " + player);
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.conquestEntitiesByPlayer[player].indexOf(msg.building) >= 0)
|
||||
return;
|
||||
|
||||
this.conquestEntitiesByPlayer[player].push(msg.building);
|
||||
};
|
||||
|
||||
Trigger.prototype.ConquestTrainingFinished = function(msg)
|
||||
{
|
||||
if (msg.owner == 0 || !this.conquestClassFilter || !msg.entities.length || !msg.entities.every(elem => TriggerHelper.EntityMatchesClassList(elem, this.conquestClassFilter)))
|
||||
return;
|
||||
|
||||
let player = msg.owner;
|
||||
if (!this.conquestEntitiesByPlayer[player])
|
||||
{
|
||||
warn("ConquestTrainingFinished: Unknown player " + player);
|
||||
return;
|
||||
}
|
||||
this.conquestEntitiesByPlayer[player].push(...msg.entities);
|
||||
};
|
||||
|
||||
Trigger.prototype.ConquestStartGameCount = function()
|
||||
{
|
||||
if (!this.conquestClassFilter)
|
||||
|
|
@ -87,8 +38,7 @@ Trigger.prototype.ConquestStartGameCount = function()
|
|||
let numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers();
|
||||
for (let i = 1; i < numPlayers; ++i)
|
||||
{
|
||||
let filterEntity = ent => TriggerHelper.EntityMatchesClassList(ent, this.conquestClassFilter)
|
||||
&& !Engine.QueryInterface(ent, IID_Foundation);
|
||||
let filterEntity = ent => TriggerHelper.EntityMatchesClassList(ent, this.conquestClassFilter);
|
||||
this.conquestEntitiesByPlayer[i] = [...cmpRangeManager.GetEntitiesByPlayer(i).filter(filterEntity)];
|
||||
}
|
||||
|
||||
|
|
@ -100,4 +50,6 @@ Trigger.prototype.ConquestStartGameCount = function()
|
|||
cmpTrigger.conquestEntitiesByPlayer = {};
|
||||
cmpTrigger.conquestDataInit = false;
|
||||
cmpTrigger.conquestClassFilter = "";
|
||||
cmpTrigger.RegisterTrigger("OnOwnershipChanged", "ConquestOwnershipChanged", { "enabled": true });
|
||||
cmpTrigger.DoAfterDelay(0, "ConquestStartGameCount", null);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,10 +2,4 @@
|
|||
let cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
|
||||
cmpTrigger.conquestClassFilter = "Structure";
|
||||
cmpTrigger.conquestDefeatReason = markForTranslation("%(player)s has been defeated (lost all structures).");
|
||||
|
||||
let data = { "enabled": true };
|
||||
cmpTrigger.RegisterTrigger("OnOwnershipChanged", "ConquestHandlerOwnerShipChanged", data);
|
||||
cmpTrigger.RegisterTrigger("OnStructureBuilt", "ConquestAddStructure", data);
|
||||
|
||||
cmpTrigger.DoAfterDelay(0, "ConquestStartGameCount", null);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,5 @@
|
|||
{
|
||||
let cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
|
||||
cmpTrigger.conquestClassFilter = "Unit";
|
||||
cmpTrigger.conquestDefeatReason = markForTranslation("%(player)s has been defeated (lost all workers).");
|
||||
|
||||
let data = { "enabled": true };
|
||||
cmpTrigger.RegisterTrigger("OnOwnershipChanged", "ConquestHandlerOwnerShipChanged", data);
|
||||
cmpTrigger.RegisterTrigger("OnTrainingFinished", "ConquestTrainingFinished", data);
|
||||
|
||||
cmpTrigger.DoAfterDelay(0, "ConquestStartGameCount", null);
|
||||
cmpTrigger.conquestClassFilter = "Unit+!Animal";
|
||||
cmpTrigger.conquestDefeatReason = markForTranslation("%(player)s has been defeated (lost all units).");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
</Health>
|
||||
<Identity merge=""/>
|
||||
<Market merge=""/>
|
||||
<Minimap merge=""/>
|
||||
<!-- Foundations shouldn't initially block unit movement -->
|
||||
<Obstruction merge="">
|
||||
<DisableBlockMovement>true</DisableBlockMovement>
|
||||
|
|
|
|||
Loading…
Reference in a new issue