mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-07-16 08:13:23 +00:00
fix warship targetting range (#938)
## Description: A warship refactor caused a regressions where warships could attack at any distance. Also refactored & simplified the trade ship logic. ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced - [x] I understand that submitting code with bugs that could have been caught through manual testing blocks releases and new features for all contributors ## Please put your Discord username so you can be contacted if a bug or regression is found: <DISCORD USERNAME>
This commit is contained in:
@@ -79,28 +79,45 @@ export class WarshipExecution implements Execution {
|
|||||||
const hasPort = this.warship.owner().units(UnitType.Port).length > 0;
|
const hasPort = this.warship.owner().units(UnitType.Port).length > 0;
|
||||||
const patrolRangeSquared = this.mg.config().warshipPatrolRange() ** 2;
|
const patrolRangeSquared = this.mg.config().warshipPatrolRange() ** 2;
|
||||||
|
|
||||||
const ships = this.mg
|
const ships = this.mg.nearbyUnits(
|
||||||
.nearbyUnits(
|
this.warship.tile()!,
|
||||||
this.warship.patrolTile()!,
|
this.mg.config().warshipTargettingRange(),
|
||||||
this.mg.config().warshipTargettingRange(),
|
[UnitType.TransportShip, UnitType.Warship, UnitType.TradeShip],
|
||||||
[UnitType.TransportShip, UnitType.Warship, UnitType.TradeShip],
|
);
|
||||||
)
|
const potentialTargets: { unit: Unit; distSquared: number }[] = [];
|
||||||
.filter(
|
for (const { unit, distSquared } of ships) {
|
||||||
({ unit }) =>
|
if (
|
||||||
unit.owner() !== this.warship.owner() &&
|
unit.owner() === this.warship.owner() ||
|
||||||
unit !== this.warship &&
|
unit === this.warship ||
|
||||||
!unit.owner().isFriendly(this.warship.owner()) &&
|
unit.owner().isFriendly(this.warship.owner()) ||
|
||||||
!this.alreadySentShell.has(unit) &&
|
this.alreadySentShell.has(unit)
|
||||||
(unit.type() !== UnitType.TradeShip ||
|
) {
|
||||||
(hasPort &&
|
continue;
|
||||||
this.mg.euclideanDistSquared(this.warship.tile(), unit.tile()) <=
|
}
|
||||||
patrolRangeSquared &&
|
if (unit.type() === UnitType.TradeShip) {
|
||||||
unit.targetUnit()?.owner() !== this.warship.owner() &&
|
if (
|
||||||
!unit.targetUnit()?.owner().isFriendly(this.warship.owner()) &&
|
!hasPort ||
|
||||||
unit.isSafeFromPirates() !== true)),
|
unit.isSafeFromPirates() ||
|
||||||
);
|
unit.targetUnit()?.owner() === this.warship.owner() || // trade ship is coming to my port
|
||||||
|
unit.targetUnit()?.owner().isFriendly(this.warship.owner()) // trade ship is coming to my ally
|
||||||
|
) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
this.mg.euclideanDistSquared(
|
||||||
|
this.warship.patrolTile()!,
|
||||||
|
unit.tile(),
|
||||||
|
) > patrolRangeSquared
|
||||||
|
) {
|
||||||
|
// Prevent warship from chasing trade ship that is too far away from
|
||||||
|
// the patrol tile to prevent warships from wandering around the map.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
potentialTargets.push({ unit: unit, distSquared });
|
||||||
|
}
|
||||||
|
|
||||||
return ships.sort((a, b) => {
|
return potentialTargets.sort((a, b) => {
|
||||||
const { unit: unitA, distSquared: distA } = a;
|
const { unit: unitA, distSquared: distA } = a;
|
||||||
const { unit: unitB, distSquared: distB } = b;
|
const { unit: unitB, distSquared: distB } = b;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user