mirror of
https://gitea.wildfiregames.com/0ad/0ad.git
synced 2026-07-28 21:13:08 +00:00
petra: improve the way units capturing a structure react when attacked by enemy units + some code cleanup
This was SVN commit r20072.
This commit is contained in:
@@ -251,7 +251,7 @@ m.Accessibility.prototype.floodFill = function(startIndex, value, onWater)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!onWater && this.landPassMap[startIndex] !== 0) || (onWater && this.navalPassMap[startIndex] !== 0) )
|
if (!onWater && this.landPassMap[startIndex] !== 0 || onWater && this.navalPassMap[startIndex] !== 0 )
|
||||||
return false; // already painted.
|
return false; // already painted.
|
||||||
|
|
||||||
let floodFor = "land";
|
let floodFor = "land";
|
||||||
|
|||||||
@@ -1274,7 +1274,26 @@ m.AttackPlan.prototype.update = function(gameState, events)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // if units are attacked, abandon their target (if it was a structure or a support) and retaliate
|
{
|
||||||
|
// Look first for nearby units to help us if possible
|
||||||
|
let collec = this.unitCollection.filterNearest(ourUnit.position(), 2);
|
||||||
|
for (let ent of collec.values())
|
||||||
|
{
|
||||||
|
if (m.isSiegeUnit(ent))
|
||||||
|
continue;
|
||||||
|
let orderData = ent.unitAIOrderData();
|
||||||
|
if (orderData && orderData.length && orderData[0].target)
|
||||||
|
{
|
||||||
|
if (orderData[0].target === attacker.id())
|
||||||
|
continue;
|
||||||
|
let target = gameState.getEntityById(orderData[0].target);
|
||||||
|
if (target && !target.hasClass("Structure") && !target.hasClass("Support"))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ent.attack(attacker.id(), m.allowCapture(gameState, ent, attacker));
|
||||||
|
ent.setMetadata(PlayerID, "lastAttackPlanUpdateTime", time);
|
||||||
|
}
|
||||||
|
// Then the unit under attack: abandon its target (if it was a structure or a support) and retaliate
|
||||||
// also if our unit is attacking a range unit and the attacker is a melee unit, retaliate
|
// also if our unit is attacking a range unit and the attacker is a melee unit, retaliate
|
||||||
let orderData = ourUnit.unitAIOrderData();
|
let orderData = ourUnit.unitAIOrderData();
|
||||||
if (orderData && orderData.length && orderData[0].target)
|
if (orderData && orderData.length && orderData[0].target)
|
||||||
|
|||||||
@@ -1444,8 +1444,6 @@ m.HQ.prototype.buildWonder = function(gameState, queues, force = false)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.Config.debug > 0)
|
|
||||||
API3.warn(" civ " + gameState.getPlayerCiv() + " starts a plan for Wonder");
|
|
||||||
queues.wonder.addPlan(new m.ConstructionPlan(gameState, "structures/{civ}_wonder"));
|
queues.wonder.addPlan(new m.ConstructionPlan(gameState, "structures/{civ}_wonder"));
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2253,7 +2251,7 @@ m.HQ.prototype.updateCaptureStrength = function(gameState)
|
|||||||
let orderData = ent.unitAIOrderData();
|
let orderData = ent.unitAIOrderData();
|
||||||
if (!orderData || !orderData.length || !orderData[0].attackType)
|
if (!orderData || !orderData.length || !orderData[0].attackType)
|
||||||
continue;
|
continue;
|
||||||
if ((orderData[0].attackType === "Capture") !== allowCapture)
|
if (orderData[0].attackType === "Capture" !== allowCapture)
|
||||||
ent.attack(targetId, allowCapture);
|
ent.attack(targetId, allowCapture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ m.TradeManager.prototype.trainMoreTraders = function(gameState, queues)
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (numTraders >= this.targetNumTraders &&
|
if (numTraders >= this.targetNumTraders &&
|
||||||
((!this.tradeRoute.sea && numLandTraders >= Math.floor(this.targetNumTraders/2)) ||
|
(!this.tradeRoute.sea && numLandTraders >= Math.floor(this.targetNumTraders/2) ||
|
||||||
(this.tradeRoute.sea && numSeaTraders >= Math.floor(this.targetNumTraders/2))))
|
this.tradeRoute.sea && numSeaTraders >= Math.floor(this.targetNumTraders/2)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let template;
|
let template;
|
||||||
@@ -536,8 +536,8 @@ m.TradeManager.prototype.checkTrader = function(gameState, ent)
|
|||||||
let possibleRoute = this.checkRoutes(gameState, access);
|
let possibleRoute = this.checkRoutes(gameState, access);
|
||||||
// Warning: presentRoute is from metadata, so contains entity ids
|
// Warning: presentRoute is from metadata, so contains entity ids
|
||||||
if (!possibleRoute ||
|
if (!possibleRoute ||
|
||||||
(possibleRoute.source.id() != presentRoute.source && possibleRoute.source.id() != presentRoute.target) ||
|
possibleRoute.source.id() != presentRoute.source && possibleRoute.source.id() != presentRoute.target ||
|
||||||
(possibleRoute.target.id() != presentRoute.source && possibleRoute.target.id() != presentRoute.target))
|
possibleRoute.target.id() != presentRoute.source && possibleRoute.target.id() != presentRoute.target)
|
||||||
{
|
{
|
||||||
// Trader will be assigned in updateTrader
|
// Trader will be assigned in updateTrader
|
||||||
ent.setMetadata(PlayerID, "route", undefined);
|
ent.setMetadata(PlayerID, "route", undefined);
|
||||||
|
|||||||
Reference in New Issue
Block a user