diff --git a/OpenRA.Game/Traits/Mobile.cs b/OpenRA.Game/Traits/Mobile.cs index 6945f7535c..0f2d576e36 100644 --- a/OpenRA.Game/Traits/Mobile.cs +++ b/OpenRA.Game/Traits/Mobile.cs @@ -10,12 +10,10 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; using OpenRA.Effects; using OpenRA.Traits.Activities; -using OpenRA.FileFormats; -using System.Drawing; -using OpenRA.Support; namespace OpenRA.Traits { diff --git a/OpenRA.Mods.RA/Crate.cs b/OpenRA.Mods.RA/Crate.cs index d5f47cb5c5..3ba660829f 100644 --- a/OpenRA.Mods.RA/Crate.cs +++ b/OpenRA.Mods.RA/Crate.cs @@ -36,7 +36,7 @@ namespace OpenRA.Mods.RA } // ITeleportable is required for paradrop - class Crate : ITick, IOccupySpace, ITeleportable + class Crate : ITick, IOccupySpace, ITeleportable, ICrushable { readonly Actor self; [Sync] @@ -53,9 +53,10 @@ namespace OpenRA.Mods.RA this.Info = info; } - public void OnCollected(Actor crusher) + public void OnCrush(Actor crusher) { - var shares = self.traits.WithInterface().Select(a => Pair.New(a, a.GetSelectionShares(crusher))); + var shares = self.traits.WithInterface().Select( + a => Pair.New(a, a.GetSelectionShares(crusher))); var totalShares = shares.Sum(a => a.Second); var n = self.World.SharedRandom.Next(totalShares); @@ -73,13 +74,6 @@ namespace OpenRA.Mods.RA public void Tick(Actor self) { var cell = Util.CellContaining(self.CenterLocation); - var collector = self.World.WorldActor.traits.Get().GetUnitsAt(cell).FirstOrDefault(); - if (collector != null) - { - OnCollected(collector); - return; - } - if (++ticks >= self.Info.Traits.Get().Lifetime * 25) self.World.AddFrameEndTask(w => w.Remove(self)); @@ -89,8 +83,7 @@ namespace OpenRA.Mods.RA } public int2 TopLeft { get { return Location; } } - int2[] noCells = new int2[] { }; - public IEnumerable OccupiedCells() { return noCells; } + public IEnumerable OccupiedCells() { return new int2[] { Location }; } public bool CanEnterCell(int2 cell) { @@ -104,5 +97,7 @@ namespace OpenRA.Mods.RA Location = cell; self.CenterLocation = Util.CenterOfCell(cell); } + + public IEnumerable CrushClasses { get { yield return "crate"; } } } } diff --git a/mods/cnc/defaults.yaml b/mods/cnc/defaults.yaml index a154f8d657..0ed0421a21 100644 --- a/mods/cnc/defaults.yaml +++ b/mods/cnc/defaults.yaml @@ -3,6 +3,7 @@ Unit: ROT: 5 Mobile: + Crushes: crate TerrainTypes: Clear, Rough, Road, Tree, Water, Rock, Wall, Ore, Beach, River TerrainSpeeds: 60%, 40%, 100%, 0%, 0%, 0%, 0%, 50%, 40%, 0% Selectable: @@ -23,7 +24,7 @@ Unit: ROT: 5 Mobile: - Crushes: wall + Crushes: wall, crate TerrainTypes: Clear, Rough, Road, Tree, Water, Rock, Wall, Ore, Beach, River TerrainSpeeds: 80%, 70%, 100%, 0%, 0%, 0%, 0%, 70%, 70%, 0% Selectable: @@ -61,6 +62,7 @@ RevealsShroud: Range: 4 Mobile: + Crushes: crate TerrainTypes: Clear, Rough, Road, Tree, Water, Rock, Wall, Ore, Beach, River TerrainSpeeds: 90%, 80%, 100%, 0%, 0%, 0%, 0%, 90%, 80%, 0% Selectable: diff --git a/mods/ra/defaults.yaml b/mods/ra/defaults.yaml index 7c0b8be043..0dd56c5636 100644 --- a/mods/ra/defaults.yaml +++ b/mods/ra/defaults.yaml @@ -3,7 +3,7 @@ Unit: ROT: 5 Mobile: - Crushes: atmine + Crushes: atmine, crate TerrainTypes: Clear, Rough, Road, Tree, Water, Rock, Wall, Ore, Beach, River TerrainSpeeds: 60%, 40%, 100%, 0%, 0%, 0%, 0%, 90%, 40%, 0% Selectable: @@ -24,7 +24,7 @@ Unit: ROT: 5 Mobile: - Crushes: wall, atmine + Crushes: wall, atmine, crate TerrainTypes: Clear, Rough, Road, Tree, Water, Rock, Wall, Ore, Beach, River TerrainSpeeds: 80%, 70%, 100%, 0%, 0%, 0%, 0%, 90%, 70%, 0% Selectable: @@ -47,7 +47,7 @@ RevealsShroud: Range: 4 Mobile: - Crushes: apmine + Crushes: apmine, crate TerrainTypes: Clear, Rough, Road, Tree, Water, Rock, Wall, Ore, Beach, River TerrainSpeeds: 90%, 80%, 100%, 0%, 0%, 0%, 0%, 100%, 80%, 0% Selectable: @@ -67,6 +67,7 @@ Category: Ship Unit: Mobile: + Crushes: crate TerrainTypes: Clear, Rough, Road, Tree, Water, Rock, Wall, Ore, Beach, River TerrainSpeeds: 0%, 0%, 0%, 0%, 100%, 0%, 0%, 0%, 0%, 0% Selectable: