diff --git a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs index c6b9a08a77..a64d9f9832 100644 --- a/OpenRA.Mods.Common/Traits/Air/Aircraft.cs +++ b/OpenRA.Mods.Common/Traits/Air/Aircraft.cs @@ -135,7 +135,10 @@ namespace OpenRA.Mods.Common.Traits { self.World.ActorMap.AddInfluence(self, this); self.World.ActorMap.AddPosition(self, this); - self.World.ScreenMap.Add(self); + + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Add(self); + var altitude = self.World.Map.DistanceAboveTerrain(CenterPosition); if (altitude.Length >= Info.MinAirborneAltitude) OnAirborneAltitudeReached(); @@ -352,7 +355,9 @@ namespace OpenRA.Mods.Common.Traits if (!self.IsInWorld) return; - self.World.ScreenMap.Update(self); + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Update(self); + self.World.ActorMap.UpdatePosition(self, this); var altitude = self.World.Map.DistanceAboveTerrain(CenterPosition); var isAirborne = altitude.Length >= Info.MinAirborneAltitude; @@ -604,7 +609,10 @@ namespace OpenRA.Mods.Common.Traits UnReserve(); self.World.ActorMap.RemoveInfluence(self, this); self.World.ActorMap.RemovePosition(self, this); - self.World.ScreenMap.Remove(self); + + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Remove(self); + OnCruisingAltitudeLeft(); OnAirborneAltitudeLeft(); } diff --git a/OpenRA.Mods.Common/Traits/Crates/Crate.cs b/OpenRA.Mods.Common/Traits/Crates/Crate.cs index 6b175539e0..1d3d960b4c 100644 --- a/OpenRA.Mods.Common/Traits/Crates/Crate.cs +++ b/OpenRA.Mods.Common/Traits/Crates/Crate.cs @@ -208,7 +208,9 @@ namespace OpenRA.Mods.Common.Traits { self.World.ActorMap.AddInfluence(self, this); self.World.ActorMap.AddPosition(self, this); - self.World.ScreenMap.Add(self); + + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Add(self); var cs = self.World.WorldActor.TraitOrDefault(); if (cs != null) @@ -219,7 +221,9 @@ namespace OpenRA.Mods.Common.Traits { self.World.ActorMap.RemoveInfluence(self, this); self.World.ActorMap.RemovePosition(self, this); - self.World.ScreenMap.Remove(self); + + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Remove(self); var cs = self.World.WorldActor.TraitOrDefault(); if (cs != null) diff --git a/OpenRA.Mods.Common/Traits/Husk.cs b/OpenRA.Mods.Common/Traits/Husk.cs index 1002b01d55..ab4bc339b5 100644 --- a/OpenRA.Mods.Common/Traits/Husk.cs +++ b/OpenRA.Mods.Common/Traits/Husk.cs @@ -106,21 +106,27 @@ namespace OpenRA.Mods.Common.Traits TopLeft = self.World.Map.CellContaining(pos); self.World.ActorMap.AddInfluence(self, this); self.World.ActorMap.UpdatePosition(self, this); - self.World.ScreenMap.Update(self); + + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Update(self); } public void AddedToWorld(Actor self) { self.World.ActorMap.AddInfluence(self, this); self.World.ActorMap.AddPosition(self, this); - self.World.ScreenMap.Add(self); + + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Add(self); } public void RemovedFromWorld(Actor self) { self.World.ActorMap.RemoveInfluence(self, this); self.World.ActorMap.RemovePosition(self, this); - self.World.ScreenMap.Remove(self); + + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Remove(self); } public bool Disabled diff --git a/OpenRA.Mods.Common/Traits/Mobile.cs b/OpenRA.Mods.Common/Traits/Mobile.cs index 11c6aeacf5..d00521fbfd 100644 --- a/OpenRA.Mods.Common/Traits/Mobile.cs +++ b/OpenRA.Mods.Common/Traits/Mobile.cs @@ -431,7 +431,9 @@ namespace OpenRA.Mods.Common.Traits CenterPosition = pos; if (self.IsInWorld) { - self.World.ScreenMap.Update(self); + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Update(self); + self.World.ActorMap.UpdatePosition(self, this); } } @@ -440,14 +442,18 @@ namespace OpenRA.Mods.Common.Traits { self.World.ActorMap.AddInfluence(self, this); self.World.ActorMap.AddPosition(self, this); - self.World.ScreenMap.Add(self); + + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Add(self); } public void RemovedFromWorld(Actor self) { self.World.ActorMap.RemoveInfluence(self, this); self.World.ActorMap.RemovePosition(self, this); - self.World.ScreenMap.Remove(self); + + if (!self.Bounds.Size.IsEmpty) + self.World.ScreenMap.Remove(self); } public IEnumerable Orders { get { yield return new MoveOrderTargeter(self, this); } }