Convert mission scripts to world coords.
This commit is contained in:
@@ -148,7 +148,7 @@ namespace OpenRA.Mods.Cnc.Missions
|
|||||||
|
|
||||||
IEnumerable<Actor> UnitsNearActor(Actor actor, int range)
|
IEnumerable<Actor> UnitsNearActor(Actor actor, int range)
|
||||||
{
|
{
|
||||||
return world.FindUnitsInCircle(actor.CenterLocation, Game.CellSize * range)
|
return world.FindUnitsInCircle(actor.CenterPosition, WRange.FromCells(range))
|
||||||
.Where(a => a.IsInWorld && a != world.WorldActor && !a.Destroyed && a.HasTrait<IMove>() && !a.Owner.NonCombatant);
|
.Where(a => a.IsInWorld && a != world.WorldActor && !a.Destroyed && a.HasTrait<IMove>() && !a.Owner.NonCombatant);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
bool AlliesControlLab()
|
bool AlliesControlLab()
|
||||||
{
|
{
|
||||||
return MissionUtils.AreaSecuredWithUnits(world, allies, lab.CenterLocation, LabClearRange);
|
return MissionUtils.AreaSecuredWithUnits(world, allies, lab.CenterPosition, WRange.FromCells(LabClearRange));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpawnEinsteinAtLab()
|
void SpawnEinsteinAtLab()
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
if (yak == null || (yak != null && !yak.IsDead() && (yak.GetCurrentActivity() is FlyCircle || yak.IsIdle)))
|
if (yak == null || (yak != null && !yak.IsDead() && (yak.GetCurrentActivity() is FlyCircle || yak.IsIdle)))
|
||||||
{
|
{
|
||||||
var alliedUnitsNearYakPoint = world.FindAliveCombatantActorsInCircle(yakAttackPoint.CenterLocation, 10)
|
var alliedUnitsNearYakPoint = world.FindAliveCombatantActorsInCircle(yakAttackPoint.CenterPosition, WRange.FromCells(10))
|
||||||
.Where(a => a.Owner != soviets && a.HasTrait<IMove>() && a != tanya && a != einstein && a != engineer);
|
.Where(a => a.Owner != soviets && a.HasTrait<IMove>() && a != tanya && a != einstein && a != engineer);
|
||||||
if (alliedUnitsNearYakPoint.Any())
|
if (alliedUnitsNearYakPoint.Any())
|
||||||
YakStrafe(alliedUnitsNearYakPoint);
|
YakStrafe(alliedUnitsNearYakPoint);
|
||||||
@@ -240,7 +240,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
world.AddFrameEndTask(w =>
|
world.AddFrameEndTask(w =>
|
||||||
{
|
{
|
||||||
if (!w.FindAliveCombatantActorsInBox(alliedBaseTopLeft.ToPPos(), alliedBaseBottomRight.ToPPos())
|
if (!w.FindAliveCombatantActorsInBox(alliedBaseTopLeft, alliedBaseBottomRight)
|
||||||
.Any(a => (a.Owner == allies || a.Owner == allies2) && (a.HasTrait<Building>() && !a.HasTrait<Wall>()) || a.HasTrait<BaseBuilding>()))
|
.Any(a => (a.Owner == allies || a.Owner == allies2) && (a.HasTrait<Building>() && !a.HasTrait<Wall>()) || a.HasTrait<BaseBuilding>()))
|
||||||
{
|
{
|
||||||
maintainPresence.Status = ObjectiveStatus.Failed;
|
maintainPresence.Status = ObjectiveStatus.Failed;
|
||||||
@@ -299,7 +299,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
void ManageSovietUnits()
|
void ManageSovietUnits()
|
||||||
{
|
{
|
||||||
var units = world.FindAliveCombatantActorsInCircle(sovietRallyPoint.CenterLocation, 10)
|
var units = world.FindAliveCombatantActorsInCircle(sovietRallyPoint.CenterPosition, WRange.FromCells(10))
|
||||||
.Where(u => u.IsIdle && u.HasTrait<Mobile>() && u.HasTrait<AttackBase>() && u.Owner == soviets)
|
.Where(u => u.IsIdle && u.HasTrait<Mobile>() && u.HasTrait<AttackBase>() && u.Owner == soviets)
|
||||||
.Except(world.WorldActor.Trait<SpawnMapActors>().Actors.Values);
|
.Except(world.WorldActor.Trait<SpawnMapActors>().Actors.Values);
|
||||||
if (units.Count() >= SovietGroupSize)
|
if (units.Count() >= SovietGroupSize)
|
||||||
@@ -383,22 +383,22 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
bool AlliesNearTown()
|
bool AlliesNearTown()
|
||||||
{
|
{
|
||||||
return world.FindAliveCombatantActorsInCircle(townPoint.CenterLocation, AlliedTownTransferRange)
|
return world.FindAliveCombatantActorsInCircle(townPoint.CenterPosition, WRange.FromCells(AlliedTownTransferRange))
|
||||||
.Any(a => a.Owner == allies1 && a.HasTrait<IMove>());
|
.Any(a => a.Owner == allies1 && a.HasTrait<IMove>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransferTownUnitsToAllies()
|
void TransferTownUnitsToAllies()
|
||||||
{
|
{
|
||||||
foreach (var unit in world.FindAliveNonCombatantActorsInCircle(townPoint.CenterLocation, AlliedTownTransferRange)
|
foreach (var unit in world.FindAliveNonCombatantActorsInCircle(townPoint.CenterPosition, WRange.FromCells(AlliedTownTransferRange))
|
||||||
.Where(a => a.HasTrait<Mobile>()))
|
.Where(a => a.HasTrait<Mobile>()))
|
||||||
unit.ChangeOwner(allies1);
|
unit.ChangeOwner(allies1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SovietsAttackTown()
|
void SovietsAttackTown()
|
||||||
{
|
{
|
||||||
var sovietAttackUnits = world.FindAliveCombatantActorsInCircle(sovietTownAttackPoint1.CenterLocation, SovietTownAttackGroupRange)
|
var sovietAttackUnits = world.FindAliveCombatantActorsInCircle(sovietTownAttackPoint1.CenterPosition, WRange.FromCells(SovietTownAttackGroupRange))
|
||||||
.Union(world.FindAliveCombatantActorsInCircle(sovietTownAttackPoint2.CenterLocation, SovietTownAttackGroupRange))
|
.Union(world.FindAliveCombatantActorsInCircle(sovietTownAttackPoint2.CenterPosition, WRange.FromCells(SovietTownAttackGroupRange)))
|
||||||
.Union(world.FindAliveCombatantActorsInCircle(townPoint.CenterLocation, AlliedTownTransferRange))
|
.Union(world.FindAliveCombatantActorsInCircle(townPoint.CenterPosition, WRange.FromCells(AlliedTownTransferRange)))
|
||||||
.Where(a => a.HasTrait<IMove>() && a.Owner == soviets);
|
.Where(a => a.HasTrait<IMove>() && a.Owner == soviets);
|
||||||
|
|
||||||
foreach (var unit in sovietAttackUnits)
|
foreach (var unit in sovietAttackUnits)
|
||||||
|
|||||||
@@ -187,8 +187,8 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
ManageSovietAircraft();
|
ManageSovietAircraft();
|
||||||
}
|
}
|
||||||
|
|
||||||
EvacuateAlliedUnits(exit1TopLeft.CenterLocation, exit1BottomRight.CenterLocation, exit1ExitPoint.Location);
|
EvacuateAlliedUnits(exit1TopLeft.Location, exit1BottomRight.Location, exit1ExitPoint.Location);
|
||||||
EvacuateAlliedUnits(exit2TopLeft.CenterLocation, exit2BottomRight.CenterLocation, exit2ExitPoint.Location);
|
EvacuateAlliedUnits(exit2TopLeft.Location, exit2BottomRight.Location, exit2ExitPoint.Location);
|
||||||
|
|
||||||
CheckSovietAirbases();
|
CheckSovietAirbases();
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
Actor FirstUnshroudedOrDefault(IEnumerable<Actor> actors, World world, int shroudRange)
|
Actor FirstUnshroudedOrDefault(IEnumerable<Actor> actors, World world, int shroudRange)
|
||||||
{
|
{
|
||||||
return actors.FirstOrDefault(u => world.FindAliveCombatantActorsInCircle(u.CenterLocation, shroudRange).All(a => !a.HasTrait<CreatesShroud>()));
|
return actors.FirstOrDefault(u => world.FindAliveCombatantActorsInCircle(u.CenterPosition, WRange.FromCells(shroudRange)).All(a => !a.HasTrait<CreatesShroud>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ManageSovietAircraft()
|
void ManageSovietAircraft()
|
||||||
@@ -219,7 +219,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
var ammo = aircraft.Trait<LimitedAmmo>();
|
var ammo = aircraft.Trait<LimitedAmmo>();
|
||||||
if ((plane.Altitude == 0 && ammo.FullAmmo()) || (plane.Altitude != 0 && ammo.HasAmmo()))
|
if ((plane.Altitude == 0 && ammo.FullAmmo()) || (plane.Altitude != 0 && ammo.HasAmmo()))
|
||||||
{
|
{
|
||||||
var enemy = FirstUnshroudedOrDefault(enemies.OrderBy(u => (aircraft.CenterLocation - u.CenterLocation).LengthSquared), world, 10);
|
var enemy = FirstUnshroudedOrDefault(enemies.OrderBy(u => (aircraft.CenterPosition - u.CenterPosition).LengthSquared), world, 10);
|
||||||
if (enemy != null)
|
if (enemy != null)
|
||||||
{
|
{
|
||||||
if (!aircraft.IsIdle && aircraft.GetCurrentActivity().GetType() != typeof(FlyAttack))
|
if (!aircraft.IsIdle && aircraft.GetCurrentActivity().GetType() != typeof(FlyAttack))
|
||||||
@@ -295,7 +295,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
var enemies = world.Actors.Where(u => u.AppearsHostileTo(self) && (u.Owner == allies1 || u.Owner == allies2)
|
var enemies = world.Actors.Where(u => u.AppearsHostileTo(self) && (u.Owner == allies1 || u.Owner == allies2)
|
||||||
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>()) || u.HasTrait<Mobile>()) && u.IsInWorld && !u.IsDead());
|
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>()) || u.HasTrait<Mobile>()) && u.IsInWorld && !u.IsDead());
|
||||||
|
|
||||||
var enemy = FirstUnshroudedOrDefault(enemies.OrderBy(u => (self.CenterLocation - u.CenterLocation).LengthSquared), world, 10);
|
var enemy = FirstUnshroudedOrDefault(enemies.OrderBy(u => (self.CenterPosition - u.CenterPosition).LengthSquared), world, 10);
|
||||||
if (enemy != null)
|
if (enemy != null)
|
||||||
self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(enemy), WRange.FromCells(3))));
|
self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(enemy), WRange.FromCells(3))));
|
||||||
}
|
}
|
||||||
@@ -304,7 +304,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
foreach (var rallyPoint in sovietRallyPoints)
|
foreach (var rallyPoint in sovietRallyPoints)
|
||||||
{
|
{
|
||||||
var units = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(rallyPoint), 10)
|
var units = world.FindAliveCombatantActorsInCircle(rallyPoint.CenterPosition, WRange.FromCells(10))
|
||||||
.Where(u => u.IsIdle && u.HasTrait<Mobile>() && u.HasTrait<AttackBase>() && u.Owner == soviets);
|
.Where(u => u.IsIdle && u.HasTrait<Mobile>() && u.HasTrait<AttackBase>() && u.Owner == soviets);
|
||||||
if (units.Count() >= SovietGroupSize)
|
if (units.Count() >= SovietGroupSize)
|
||||||
{
|
{
|
||||||
@@ -315,7 +315,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
var scatteredUnits = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && u.HasTrait<Mobile>() && u.IsIdle && u.Owner == soviets)
|
var scatteredUnits = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && u.HasTrait<Mobile>() && u.IsIdle && u.Owner == soviets)
|
||||||
.Except(world.WorldActor.Trait<SpawnMapActors>().Actors.Values)
|
.Except(world.WorldActor.Trait<SpawnMapActors>().Actors.Values)
|
||||||
.Except(sovietRallyPoints.SelectMany(rp => world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(rp), 10)));
|
.Except(sovietRallyPoints.SelectMany(rp => world.FindAliveCombatantActorsInCircle(rp.CenterPosition, WRange.FromCells(10))));
|
||||||
|
|
||||||
foreach (var unit in scatteredUnits)
|
foreach (var unit in scatteredUnits)
|
||||||
AttackNearestAlliedActor(unit);
|
AttackNearestAlliedActor(unit);
|
||||||
@@ -351,9 +351,9 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EvacuateAlliedUnits(PPos a, PPos b, CPos exit)
|
void EvacuateAlliedUnits(CPos tl, CPos br, CPos exit)
|
||||||
{
|
{
|
||||||
var units = world.FindAliveCombatantActorsInBox(a, b)
|
var units = world.FindAliveCombatantActorsInBox(tl, br)
|
||||||
.Where(u => u.HasTrait<Mobile>() && !u.HasTrait<Aircraft>() && (u.Owner == allies1 || u.Owner == allies2));
|
.Where(u => u.HasTrait<Mobile>() && !u.HasTrait<Aircraft>() && (u.Owner == allies1 || u.Owner == allies2));
|
||||||
|
|
||||||
foreach (var unit in units)
|
foreach (var unit in units)
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
var enemies = world.Actors.Where(u => u.Owner == creeps && u.HasTrait<ITargetable>()
|
var enemies = world.Actors.Where(u => u.Owner == creeps && u.HasTrait<ITargetable>()
|
||||||
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>() && !u.HasTrait<Bridge>()) || u.HasTrait<Mobile>()) && !u.IsDead() && u.IsInWorld);
|
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>() && !u.HasTrait<Bridge>()) || u.HasTrait<Mobile>()) && !u.IsDead() && u.IsInWorld);
|
||||||
|
|
||||||
var enemy = enemies.OrderBy(u => (attacker.CenterLocation - u.CenterLocation).LengthSquared).FirstOrDefault();
|
var enemy = enemies.OrderBy(u => (attacker.CenterPosition - u.CenterPosition).LengthSquared).FirstOrDefault();
|
||||||
if (enemy != null)
|
if (enemy != null)
|
||||||
attacker.QueueActivity(new AttackMove.AttackMoveActivity(attacker, new Attack(Target.FromActor(enemy), WRange.FromCells(3))));
|
attacker.QueueActivity(new AttackMove.AttackMoveActivity(attacker, new Attack(Target.FromActor(enemy), WRange.FromCells(3))));
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
var enemies = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == multi0)
|
var enemies = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == multi0)
|
||||||
&& ((u.HasTrait<Building>() && !u.HasTrait<Mobile>())));
|
&& ((u.HasTrait<Building>() && !u.HasTrait<Mobile>())));
|
||||||
var targetEnemy = enemies.OrderBy(u => (self.CenterLocation - u.CenterLocation).LengthSquared).FirstOrDefault();
|
var targetEnemy = enemies.OrderBy(u => (self.CenterPosition - u.CenterPosition).LengthSquared).FirstOrDefault();
|
||||||
if (targetEnemy != null)
|
if (targetEnemy != null)
|
||||||
{
|
{
|
||||||
self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(targetEnemy), WRange.FromCells(6))));
|
self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(targetEnemy), WRange.FromCells(6))));
|
||||||
@@ -127,7 +127,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
new OwnerInit(soviets)
|
new OwnerInit(soviets)
|
||||||
});
|
});
|
||||||
squad.QueueActivity(new AttackMove.AttackMoveActivity(squad, new Move.Move(paradrop1.Location, 3)));
|
squad.QueueActivity(new AttackMove.AttackMoveActivity(squad, new Move.Move(paradrop1.Location, 3)));
|
||||||
var scatteredUnits = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(paradrop1.Location), 15)
|
var scatteredUnits = world.FindAliveCombatantActorsInCircle(paradrop1.Location.CenterPosition, WRange.FromCells(15))
|
||||||
.Where(unit => unit.IsIdle && unit.HasTrait<Mobile>() && unit.Owner == soviets);
|
.Where(unit => unit.IsIdle && unit.HasTrait<Mobile>() && unit.Owner == soviets);
|
||||||
foreach (var unit in scatteredUnits)
|
foreach (var unit in scatteredUnits)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,20 +24,21 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
public static class MissionUtils
|
public static class MissionUtils
|
||||||
{
|
{
|
||||||
public static IEnumerable<Actor> FindAliveCombatantActorsInCircle(this World world, PPos location, int range)
|
public static IEnumerable<Actor> FindAliveCombatantActorsInCircle(this World world, WPos location, WRange range)
|
||||||
{
|
{
|
||||||
return world.FindUnitsInCircle(location, Game.CellSize * range)
|
return world.FindUnitsInCircle(location, range)
|
||||||
.Where(u => u.IsInWorld && u != world.WorldActor && !u.IsDead() && !u.Owner.NonCombatant);
|
.Where(u => u.IsInWorld && u != world.WorldActor && !u.IsDead() && !u.Owner.NonCombatant);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<Actor> FindAliveCombatantActorsInBox(this World world, PPos a, PPos b)
|
public static IEnumerable<Actor> FindAliveCombatantActorsInBox(this World world, CPos a, CPos b)
|
||||||
{
|
{
|
||||||
return world.FindUnits(a, b).Where(u => u.IsInWorld && u != world.WorldActor && !u.IsDead() && !u.Owner.NonCombatant);
|
return world.FindUnits(a, b)
|
||||||
|
.Where(u => u.IsInWorld && u != world.WorldActor && !u.IsDead() && !u.Owner.NonCombatant);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<Actor> FindAliveNonCombatantActorsInCircle(this World world, PPos location, int range)
|
public static IEnumerable<Actor> FindAliveNonCombatantActorsInCircle(this World world, WPos location, WRange range)
|
||||||
{
|
{
|
||||||
return world.FindUnitsInCircle(location, Game.CellSize * range)
|
return world.FindUnitsInCircle(location, range)
|
||||||
.Where(u => u.IsInWorld && u != world.WorldActor && !u.IsDead() && u.Owner.NonCombatant);
|
.Where(u => u.IsInWorld && u != world.WorldActor && !u.IsDead() && u.Owner.NonCombatant);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +104,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
badger.QueueActivity(new RemoveSelf());
|
badger.QueueActivity(new RemoveSelf());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool AreaSecuredWithUnits(World world, Player player, PPos location, int range)
|
public static bool AreaSecuredWithUnits(World world, Player player, WPos location, WRange range)
|
||||||
{
|
{
|
||||||
var units = world.FindAliveCombatantActorsInCircle(location, range).Where(a => a.HasTrait<IMove>());
|
var units = world.FindAliveCombatantActorsInCircle(location, range).Where(a => a.HasTrait<IMove>());
|
||||||
return units.Any() && units.All(a => a.Owner == player);
|
return units.Any() && units.All(a => a.Owner == player);
|
||||||
@@ -211,7 +212,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
var enemies = self.World.Actors.Where(u => u.AppearsHostileTo(self) && u.Owner == enemyPlayer
|
var enemies = self.World.Actors.Where(u => u.AppearsHostileTo(self) && u.Owner == enemyPlayer
|
||||||
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>()) || (u.HasTrait<Mobile>() && !u.HasTrait<Aircraft>())) && u.IsInWorld && !u.IsDead());
|
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>()) || (u.HasTrait<Mobile>() && !u.HasTrait<Aircraft>())) && u.IsInWorld && !u.IsDead());
|
||||||
|
|
||||||
var enemy = enemies.OrderBy(u => (self.CenterLocation - u.CenterLocation).LengthSquared).FirstOrDefault();
|
var enemy = enemies.OrderBy(u => (self.CenterPosition - u.CenterPosition).LengthSquared).FirstOrDefault();
|
||||||
if (enemy != null)
|
if (enemy != null)
|
||||||
self.QueueActivity(queued, new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(enemy), WRange.FromCells(3))));
|
self.QueueActivity(queued, new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(enemy), WRange.FromCells(3))));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
MissionUtils.CapOre(ussr);
|
MissionUtils.CapOre(ussr);
|
||||||
|
|
||||||
if (!hospitalEvacuated && !hospital.IsDead() && MissionUtils.AreaSecuredWithUnits(world, greece, hospital.CenterLocation, 5))
|
if (!hospitalEvacuated && !hospital.IsDead() && MissionUtils.AreaSecuredWithUnits(world, greece, hospital.CenterPosition, WRange.FromCells(5)))
|
||||||
{
|
{
|
||||||
EvacuateCivilians();
|
EvacuateCivilians();
|
||||||
hospitalEvacuated = true;
|
hospitalEvacuated = true;
|
||||||
@@ -129,7 +129,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
if (baseTransferredTick == -1)
|
if (baseTransferredTick == -1)
|
||||||
{
|
{
|
||||||
var actorsInBase = world.FindUnits(alliedBaseTopLeft.CenterLocation, alliedBaseBottomRight.CenterLocation).Where(a => a != a.Owner.PlayerActor);
|
var actorsInBase = world.FindUnits(alliedBaseTopLeft.Location, alliedBaseBottomRight.Location).Where(a => a != a.Owner.PlayerActor);
|
||||||
if (actorsInBase.Any(a => a.Owner == greece))
|
if (actorsInBase.Any(a => a.Owner == greece))
|
||||||
{
|
{
|
||||||
SetupAlliedBase(actorsInBase);
|
SetupAlliedBase(actorsInBase);
|
||||||
@@ -184,7 +184,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
MissionFailed("Dr. Demitri was killed.");
|
MissionFailed("Dr. Demitri was killed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (MissionUtils.AreaSecuredWithUnits(world, greece, demitriTriggerAreaCenter.CenterLocation, 3))
|
else if (MissionUtils.AreaSecuredWithUnits(world, greece, demitriTriggerAreaCenter.CenterPosition, WRange.FromCells(3)))
|
||||||
{
|
{
|
||||||
demitri = world.CreateActor("demitri", greece, demitriChurchSpawnPoint.Location, null);
|
demitri = world.CreateActor("demitri", greece, demitriChurchSpawnPoint.Location, null);
|
||||||
demitri.QueueActivity(new Move.Move(demitriTriggerAreaCenter.Location, 0));
|
demitri.QueueActivity(new Move.Move(demitriTriggerAreaCenter.Location, 0));
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
var bridge = world.Actors
|
var bridge = world.Actors
|
||||||
.Where(a => a.HasTrait<Bridge>() && !a.IsDead())
|
.Where(a => a.HasTrait<Bridge>() && !a.IsDead())
|
||||||
.OrderBy(a => (startJeep.CenterLocation - a.CenterLocation).LengthSquared)
|
.OrderBy(a => (startJeep.CenterPosition - a.CenterPosition).LengthSquared)
|
||||||
.First();
|
.First();
|
||||||
Combat.DoExplosion(bridge, "Demolish", bridge.CenterPosition);
|
Combat.DoExplosion(bridge, "Demolish", bridge.CenterPosition);
|
||||||
world.WorldActor.Trait<ScreenShaker>().AddEffect(15, bridge.CenterLocation.ToFloat2(), 6);
|
world.WorldActor.Trait<ScreenShaker>().AddEffect(15, bridge.CenterLocation.ToFloat2(), 6);
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
var units = world.CreateActor((sovietInfantry).Random(world.SharedRandom), new TypeDictionary { new LocationInit(sovietinfantryentry1.Location), new OwnerInit(soviets) });
|
var units = world.CreateActor((sovietInfantry).Random(world.SharedRandom), new TypeDictionary { new LocationInit(sovietinfantryentry1.Location), new OwnerInit(soviets) });
|
||||||
units.QueueActivity(new Move.Move(sovietinfantryrally1.Location, 3));
|
units.QueueActivity(new Move.Move(sovietinfantryrally1.Location, 3));
|
||||||
var unitsincircle = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(sovietinfantryrally1.Location), 10)
|
var unitsincircle = world.FindAliveCombatantActorsInCircle(sovietinfantryrally1.CenterPosition, WRange.FromCells(10))
|
||||||
.Where(a => a.Owner == soviets && a.IsIdle && a.HasTrait<IMove>());
|
.Where(a => a.Owner == soviets && a.IsIdle && a.HasTrait<IMove>());
|
||||||
if (unitsincircle.Count() >= sovietInfantryGroupSize)
|
if (unitsincircle.Count() >= sovietInfantryGroupSize)
|
||||||
{
|
{
|
||||||
@@ -211,7 +211,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
var enemies = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == allies)
|
var enemies = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && (u.Owner == allies)
|
||||||
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>()) || u.HasTrait<Mobile>()));
|
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>()) || u.HasTrait<Mobile>()));
|
||||||
var targetEnemy = enemies.OrderBy(u => (self.CenterLocation - u.CenterLocation).LengthSquared).FirstOrDefault();
|
var targetEnemy = enemies.OrderBy(u => (self.CenterPosition - u.CenterPosition).LengthSquared).FirstOrDefault();
|
||||||
if (targetEnemy != null)
|
if (targetEnemy != null)
|
||||||
{
|
{
|
||||||
self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(targetEnemy), WRange.FromCells(3))));
|
self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(targetEnemy), WRange.FromCells(3))));
|
||||||
@@ -222,7 +222,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
foreach (var rallyPoint in sovietRallyPoints)
|
foreach (var rallyPoint in sovietRallyPoints)
|
||||||
{
|
{
|
||||||
var units = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(rallyPoint), 4)
|
var units = world.FindAliveCombatantActorsInCircle(rallyPoint.CenterPosition, WRange.FromCells(4))
|
||||||
.Where(u => u.IsIdle && u.HasTrait<Mobile>() && u.Owner == soviets);
|
.Where(u => u.IsIdle && u.HasTrait<Mobile>() && u.Owner == soviets);
|
||||||
if (units.Count() >= sovietAttackGroupSize)
|
if (units.Count() >= sovietAttackGroupSize)
|
||||||
{
|
{
|
||||||
@@ -234,7 +234,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
}
|
}
|
||||||
var scatteredUnits = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && u.HasTrait<Mobile>() && u.IsIdle && u.Owner == soviets)
|
var scatteredUnits = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && u.HasTrait<Mobile>() && u.IsIdle && u.Owner == soviets)
|
||||||
.Except(world.WorldActor.Trait<SpawnMapActors>().Actors.Values)
|
.Except(world.WorldActor.Trait<SpawnMapActors>().Actors.Values)
|
||||||
.Except(sovietRallyPoints.SelectMany(rp => world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(rp), 4)));
|
.Except(sovietRallyPoints.SelectMany(rp => world.FindAliveCombatantActorsInCircle(rp.CenterPosition, WRange.FromCells(4))));
|
||||||
foreach (var unit in scatteredUnits)
|
foreach (var unit in scatteredUnits)
|
||||||
{
|
{
|
||||||
AttackNearestAlliedActor(unit);
|
AttackNearestAlliedActor(unit);
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
Actor FirstUnshroudedOrDefault(IEnumerable<Actor> actors, World world, int shroudRange)
|
Actor FirstUnshroudedOrDefault(IEnumerable<Actor> actors, World world, int shroudRange)
|
||||||
{
|
{
|
||||||
return actors.FirstOrDefault(u => world.FindAliveCombatantActorsInCircle(u.CenterLocation, shroudRange).All(a => !a.HasTrait<CreatesShroud>()));
|
return actors.FirstOrDefault(u => world.FindAliveCombatantActorsInCircle(u.CenterPosition, WRange.FromCells(shroudRange)).All(a => !a.HasTrait<CreatesShroud>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AttackNearestAlliedActor(Actor self)
|
void AttackNearestAlliedActor(Actor self)
|
||||||
@@ -137,7 +137,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
var enemies = world.Actors.Where(u => u.AppearsHostileTo(self) && (u.Owner == allies)
|
var enemies = world.Actors.Where(u => u.AppearsHostileTo(self) && (u.Owner == allies)
|
||||||
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>()) || u.HasTrait<Mobile>()) && u.IsInWorld && !u.IsDead());
|
&& ((u.HasTrait<Building>() && !u.HasTrait<Wall>()) || u.HasTrait<Mobile>()) && u.IsInWorld && !u.IsDead());
|
||||||
|
|
||||||
var enemy = FirstUnshroudedOrDefault(enemies.OrderBy(u => (self.CenterLocation - u.CenterLocation).LengthSquared), world, 20);
|
var enemy = FirstUnshroudedOrDefault(enemies.OrderBy(u => (self.CenterPosition - u.CenterPosition).LengthSquared), world, 20);
|
||||||
if (enemy != null)
|
if (enemy != null)
|
||||||
self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(enemy), WRange.FromCells(3))));
|
self.QueueActivity(new AttackMove.AttackMoveActivity(self, new Attack(Target.FromActor(enemy), WRange.FromCells(3))));
|
||||||
}
|
}
|
||||||
@@ -298,7 +298,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
void ManageSovietUnits()
|
void ManageSovietUnits()
|
||||||
{
|
{
|
||||||
var units = world.FindAliveCombatantActorsInCircle(sovietrally.CenterLocation, 3)
|
var units = world.FindAliveCombatantActorsInCircle(sovietrally.CenterPosition, WRange.FromCells(3))
|
||||||
.Where(u => u.IsIdle && u.HasTrait<IMove>() && u.HasTrait<AttackBase>() && u.Owner == soviets);
|
.Where(u => u.IsIdle && u.HasTrait<IMove>() && u.HasTrait<AttackBase>() && u.Owner == soviets);
|
||||||
if (units.Count() >= sovietAttackGroupSize)
|
if (units.Count() >= sovietAttackGroupSize)
|
||||||
{
|
{
|
||||||
@@ -332,7 +332,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
{
|
{
|
||||||
foreach (var rallyPoint in sovietrallypoints)
|
foreach (var rallyPoint in sovietrallypoints)
|
||||||
{
|
{
|
||||||
var units = world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(rallyPoint), 10)
|
var units = world.FindAliveCombatantActorsInCircle(rallyPoint.CenterPosition, WRange.FromCells(10))
|
||||||
.Where(u => u.IsIdle && u.HasTrait<Mobile>() && u.HasTrait<AttackBase>() && u.Owner == soviets);
|
.Where(u => u.IsIdle && u.HasTrait<Mobile>() && u.HasTrait<AttackBase>() && u.Owner == soviets);
|
||||||
if (units.Count() >= SovietGroupSize)
|
if (units.Count() >= SovietGroupSize)
|
||||||
{
|
{
|
||||||
@@ -343,7 +343,7 @@ namespace OpenRA.Mods.RA.Missions
|
|||||||
|
|
||||||
var scatteredUnits = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && u.HasTrait<Mobile>() && u.IsIdle && u.Owner == soviets)
|
var scatteredUnits = world.Actors.Where(u => u.IsInWorld && !u.IsDead() && u.HasTrait<Mobile>() && u.IsIdle && u.Owner == soviets)
|
||||||
.Except(world.WorldActor.Trait<SpawnMapActors>().Actors.Values)
|
.Except(world.WorldActor.Trait<SpawnMapActors>().Actors.Values)
|
||||||
.Except(sovietrallypoints.SelectMany(rp => world.FindAliveCombatantActorsInCircle(Util.CenterOfCell(rp), 10)));
|
.Except(sovietrallypoints.SelectMany(rp => world.FindAliveCombatantActorsInCircle(rp.CenterPosition, WRange.FromCells(10))));
|
||||||
|
|
||||||
foreach (var unit in scatteredUnits)
|
foreach (var unit in scatteredUnits)
|
||||||
AttackNearestAlliedActor(unit);
|
AttackNearestAlliedActor(unit);
|
||||||
|
|||||||
Reference in New Issue
Block a user