From 9201b1cced627df2667ec97af4a5cebfa6abcb29 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Sun, 1 Jul 2012 09:04:49 +1200 Subject: [PATCH] fixed #2198 - crates are collected when landing on top of a unit --- OpenRA.Mods.RA/Crate.cs | 11 ++++++++++- OpenRA.Mods.RA/Effects/Parachute.cs | 3 +++ OpenRA.Mods.RA/TraitsInterfaces.cs | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/OpenRA.Mods.RA/Crate.cs b/OpenRA.Mods.RA/Crate.cs index ab70385f22..6ccbc9f274 100644 --- a/OpenRA.Mods.RA/Crate.cs +++ b/OpenRA.Mods.RA/Crate.cs @@ -24,7 +24,7 @@ namespace OpenRA.Mods.RA } // ITeleportable is required for paradrop - class Crate : ITick, IOccupySpace, ITeleportable, ICrushable, ISync + class Crate : ITick, IOccupySpace, ITeleportable, ICrushable, ISync, INotifyParachuteLanded { readonly Actor self; [Sync] int ticks; @@ -62,6 +62,15 @@ namespace OpenRA.Mods.RA n -= s.Second; } + public void OnLanded() + { + var landedOn = self.World.ActorMap.GetUnitsAt(self.Location) + .FirstOrDefault(a => a != self); + + if (landedOn != null) + OnCrush(landedOn); + } + public void Tick(Actor self) { if( ++ticks >= Info.Lifetime * 25 ) diff --git a/OpenRA.Mods.RA/Effects/Parachute.cs b/OpenRA.Mods.RA/Effects/Parachute.cs index 318bce35ee..eede52a569 100644 --- a/OpenRA.Mods.RA/Effects/Parachute.cs +++ b/OpenRA.Mods.RA/Effects/Parachute.cs @@ -67,6 +67,9 @@ namespace OpenRA.Mods.RA.Effects cargo.CancelActivity(); cargo.Trait().SetPosition(cargo, loc); w.Add(cargo); + + foreach( var npl in cargo.TraitsImplementing() ) + npl.OnLanded(); }); } diff --git a/OpenRA.Mods.RA/TraitsInterfaces.cs b/OpenRA.Mods.RA/TraitsInterfaces.cs index e4f4f2d32d..18b2619777 100755 --- a/OpenRA.Mods.RA/TraitsInterfaces.cs +++ b/OpenRA.Mods.RA/TraitsInterfaces.cs @@ -42,4 +42,6 @@ namespace OpenRA.Mods.RA { void OnNotifyResourceClaimLost(Actor self, ResourceClaim claim, Actor claimer); } + + public interface INotifyParachuteLanded { void OnLanded(); } }