From b508f7c300986521cd168bfcb78dd5f837595166 Mon Sep 17 00:00:00 2001 From: alzeih Date: Sun, 11 Dec 2011 22:19:59 +1300 Subject: [PATCH] Fix #1269 - Transport Helicopter Loading while in the Air Note that weight is now checked for cargo (this might break things) --- OpenRA.Mods.RA/Activities/EnterTransport.cs | 3 +-- OpenRA.Mods.RA/Cargo.cs | 10 ++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.RA/Activities/EnterTransport.cs b/OpenRA.Mods.RA/Activities/EnterTransport.cs index 3ccf076ca6..f79b13c51c 100644 --- a/OpenRA.Mods.RA/Activities/EnterTransport.cs +++ b/OpenRA.Mods.RA/Activities/EnterTransport.cs @@ -27,10 +27,9 @@ namespace OpenRA.Mods.RA.Activities if (transport == null || !transport.IsInWorld) return NextActivity; var cargo = transport.Trait(); - if (!cargo.HasSpace(1)) + if (!cargo.CanLoad(transport, self)) return NextActivity; - // Todo: Queue a move order to the transport? need to be // careful about units that can't path to the transport if ((transport.Location - self.Location).LengthSquared > 2) diff --git a/OpenRA.Mods.RA/Cargo.cs b/OpenRA.Mods.RA/Cargo.cs index a382276248..338164558e 100644 --- a/OpenRA.Mods.RA/Cargo.cs +++ b/OpenRA.Mods.RA/Cargo.cs @@ -87,6 +87,16 @@ namespace OpenRA.Mods.RA return true; } + public bool CanLoad(Actor self, Actor a) + { + if (!HasSpace(GetWeight(a))) + return false; + + // Cannot load mid-air + var move = self.TraitOrDefault(); + return move == null || move.Altitude == 0; + } + public string CursorForOrder(Actor self, Order order) { if (order.OrderString != "Unload") return null;