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:
bb 2017-11-17 11:38:51 +00:00
parent b0bd645fbb
commit 722578fdcd
5 changed files with 14 additions and 80 deletions

View file

@ -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).");
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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).");
}

View file

@ -17,6 +17,7 @@
</Health>
<Identity merge=""/>
<Market merge=""/>
<Minimap merge=""/>
<!-- Foundations shouldn't initially block unit movement -->
<Obstruction merge="">
<DisableBlockMovement>true</DisableBlockMovement>