From 6fdb9e688afd30cc89a4f15aa573b489adfa8db0 Mon Sep 17 00:00:00 2001 From: Kanar Date: Tue, 10 Jun 2014 13:23:30 +0200 Subject: [PATCH] Adds RallyPoint to Airfield, queues TakeOff --- OpenRA.Mods.RA/Activities/Rearm.cs | 14 ---------- OpenRA.Mods.RA/Activities/Repair.cs | 15 +---------- OpenRA.Mods.RA/Air/Helicopter.cs | 27 +++---------------- OpenRA.Mods.RA/Air/Plane.cs | 7 +++++ OpenRA.Mods.RA/Air/TakeOff.cs | 40 ++++++++++++++++++++++++++++ OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 1 + OpenRA.Mods.RA/Production.cs | 2 +- mods/ra/rules/structures.yaml | 1 + 8 files changed, 55 insertions(+), 52 deletions(-) create mode 100644 OpenRA.Mods.RA/Air/TakeOff.cs diff --git a/OpenRA.Mods.RA/Activities/Rearm.cs b/OpenRA.Mods.RA/Activities/Rearm.cs index cf34aafc89..1084ff6cd2 100644 --- a/OpenRA.Mods.RA/Activities/Rearm.cs +++ b/OpenRA.Mods.RA/Activities/Rearm.cs @@ -39,21 +39,7 @@ namespace OpenRA.Mods.RA.Activities .FirstOrDefault(a => a.HasTrait()); if (!limitedAmmo.GiveAmmo()) - { - var helicopter = self.TraitOrDefault(); - if (helicopter != null) - { - if (helicopter.Info.RepairBuildings.Contains(hostBuilding.Info.Name) && self.HasTrait()) - { - if (self.Trait().DamageState != DamageState.Undamaged) - return NextActivity; - } - - return helicopter.TakeOff(hostBuilding); - } - return NextActivity; - } if (hostBuilding != null) hostBuilding.Trait().PlayCustomAnim(hostBuilding, "active"); diff --git a/OpenRA.Mods.RA/Activities/Repair.cs b/OpenRA.Mods.RA/Activities/Repair.cs index 5941b23ab5..9b9385cc6c 100644 --- a/OpenRA.Mods.RA/Activities/Repair.cs +++ b/OpenRA.Mods.RA/Activities/Repair.cs @@ -31,22 +31,9 @@ namespace OpenRA.Mods.RA.Activities health = self.TraitOrDefault(); if (health == null) return NextActivity; + if (health.DamageState == DamageState.Undamaged) - { - var helicopter = self.TraitOrDefault(); - if (helicopter != null) - { - if (helicopter.Info.RearmBuildings.Contains(host.Info.Name) && self.HasTrait()) - { - if (self.Trait().FullAmmo() == false) - return NextActivity; - } - - return helicopter.TakeOff(host); - } - return NextActivity; - } if (remainingTicks == 0) { diff --git a/OpenRA.Mods.RA/Air/Helicopter.cs b/OpenRA.Mods.RA/Air/Helicopter.cs index f6e22e1b98..4bf2b8740d 100755 --- a/OpenRA.Mods.RA/Air/Helicopter.cs +++ b/OpenRA.Mods.RA/Air/Helicopter.cs @@ -87,6 +87,7 @@ namespace OpenRA.Mods.RA.Air self.QueueActivity(new Turn(Info.InitialFacing)); self.QueueActivity(new HeliLand(false)); self.QueueActivity(new ResupplyAircraft()); + self.QueueActivity(new TakeOff()); } } @@ -116,11 +117,11 @@ namespace OpenRA.Mods.RA.Air if (!self.HasTrait()) // TODO: Aircraft husks don't properly unreserve. ReserveSpawnBuilding(); - var afld = GetActorBelow(); - if (afld == null) + var host = GetActorBelow(); + if (host == null) return; - self.QueueActivity(TakeOff(afld)); + self.QueueActivity(new TakeOff()); } // Repulsion only applies when we're flying! @@ -183,25 +184,5 @@ namespace OpenRA.Mods.RA.Air foreach (var b in base.GetResupplyActivities(a)) yield return b; } - - public Activity TakeOff(Actor a) - { - self.CancelActivity(); - if (Reservation != null) - { - Reservation.Dispose(); - Reservation = null; - } - - if (a != null) - { - if (a.HasTrait()) - return new HeliFly(self, Target.FromCell(a.Trait().rallyPoint)); - - return new HeliFly(self, Target.FromPos(a.CenterPosition)); - } - - return new HeliFly(self, Target.FromPos(self.CenterPosition)); - } } } diff --git a/OpenRA.Mods.RA/Air/Plane.cs b/OpenRA.Mods.RA/Air/Plane.cs index a154ecc6be..17acafee1e 100755 --- a/OpenRA.Mods.RA/Air/Plane.cs +++ b/OpenRA.Mods.RA/Air/Plane.cs @@ -43,6 +43,12 @@ namespace OpenRA.Mods.RA.Air firstTick = false; if (!self.HasTrait()) // TODO: Aircraft husks don't properly unreserve. ReserveSpawnBuilding(); + + var host = GetActorBelow(); + if (host == null) + return; + + self.QueueActivity(new TakeOff()); } } @@ -86,6 +92,7 @@ namespace OpenRA.Mods.RA.Air self.SetTargetLine(Target.FromActor(airfield), Color.Green); self.QueueActivity(new ReturnToBase(self, airfield)); self.QueueActivity(new ResupplyAircraft()); + self.QueueActivity(new TakeOff()); } else { diff --git a/OpenRA.Mods.RA/Air/TakeOff.cs b/OpenRA.Mods.RA/Air/TakeOff.cs new file mode 100644 index 0000000000..97d23ed34d --- /dev/null +++ b/OpenRA.Mods.RA/Air/TakeOff.cs @@ -0,0 +1,40 @@ +#region Copyright & License Information +/* + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using OpenRA.Traits; + +namespace OpenRA.Mods.RA.Air +{ + public class TakeOff : Activity + { + public override Activity Tick(Actor self) + { + var aircraft = self.Trait(); + + self.CancelActivity(); + + var reservation = aircraft.Reservation; + if (reservation != null) + { + reservation.Dispose(); + reservation = null; + } + + var host = aircraft.GetActorBelow(); + var hasHost = host != null; + var rp = hasHost ? host.TraitOrDefault() : null; + + var destination = rp != null ? rp.rallyPoint : + (hasHost ? host.CenterPosition.ToCPos() : self.CenterPosition.ToCPos()); + + return new AttackMove.AttackMoveActivity(self, self.Trait().MoveTo(destination, 1)); + } + } +} diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index fba7ca004f..7161cb0c93 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -94,6 +94,7 @@ + diff --git a/OpenRA.Mods.RA/Production.cs b/OpenRA.Mods.RA/Production.cs index 3ea49c4685..70b8604748 100755 --- a/OpenRA.Mods.RA/Production.cs +++ b/OpenRA.Mods.RA/Production.cs @@ -86,7 +86,7 @@ namespace OpenRA.Mods.RA } } - newUnit.SetTargetLine(target, Color.Green, false); + newUnit.SetTargetLine(target, rp.Value != null ? Color.Red : Color.Green, false); if (!self.IsDead()) foreach (var t in self.TraitsImplementing()) diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 16d004a516..f1d7b2fe18 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -968,6 +968,7 @@ AFLD: ExitCell: 1,1 Facing: 192 MoveIntoWorld: false + RallyPoint: Production: Produces: Plane Reservable: