From 5abbdc37cb0442b37a01f4826bbe65db563cd213 Mon Sep 17 00:00:00 2001 From: Gustas <37534529+PunkPun@users.noreply.github.com> Date: Mon, 26 Sep 2022 15:39:28 +0300 Subject: [PATCH] Revert "Fix crushables and crates causing HPF to crash." This reverts commit 5765e51c56aa7bc99646474ddf3fbe9f10e69d27. --- OpenRA.Mods.Common/Activities/UnloadCargo.cs | 5 +---- .../Scripting/Properties/MobileProperties.cs | 5 +---- OpenRA.Mods.Common/Traits/Crates/Crate.cs | 10 ++-------- OpenRA.Mods.Common/Traits/Mobile.cs | 15 +++------------ OpenRA.Mods.Common/Traits/ParaDrop.cs | 6 ++---- 5 files changed, 9 insertions(+), 32 deletions(-) diff --git a/OpenRA.Mods.Common/Activities/UnloadCargo.cs b/OpenRA.Mods.Common/Activities/UnloadCargo.cs index 9723c8d040..b76e16551a 100644 --- a/OpenRA.Mods.Common/Activities/UnloadCargo.cs +++ b/OpenRA.Mods.Common/Activities/UnloadCargo.cs @@ -120,11 +120,8 @@ namespace OpenRA.Mods.Common.Activities var move = actor.Trait(); var pos = actor.Trait(); - // HACK: Call SetCenterPosition before SetPosition - // So when SetPosition calls ActorMap.CellUpdated - // the listeners see the new CenterPosition. - pos.SetCenterPosition(actor, spawn); pos.SetPosition(actor, exitSubCell.Value.Cell, exitSubCell.Value.SubCell); + pos.SetCenterPosition(actor, spawn); actor.CancelActivity(); w.Add(actor); diff --git a/OpenRA.Mods.Common/Scripting/Properties/MobileProperties.cs b/OpenRA.Mods.Common/Scripting/Properties/MobileProperties.cs index 702e6b5310..1e718cf4bf 100644 --- a/OpenRA.Mods.Common/Scripting/Properties/MobileProperties.cs +++ b/OpenRA.Mods.Common/Scripting/Properties/MobileProperties.cs @@ -46,12 +46,9 @@ namespace OpenRA.Mods.Common.Scripting [Desc("Moves from outside the world into the cell grid.")] public void MoveIntoWorld(CPos cell) { - // HACK: Call SetCenterPosition before SetPosition - // So when SetPosition calls ActorMap.CellUpdated - // the listeners see the new CenterPosition. var pos = Self.CenterPosition; - mobile.SetCenterPosition(Self, pos); mobile.SetPosition(Self, cell); + mobile.SetCenterPosition(Self, pos); Self.QueueActivity(mobile.ReturnToCell(Self)); } diff --git a/OpenRA.Mods.Common/Traits/Crates/Crate.cs b/OpenRA.Mods.Common/Traits/Crates/Crate.cs index 4e5f888246..e591880566 100644 --- a/OpenRA.Mods.Common/Traits/Crates/Crate.cs +++ b/OpenRA.Mods.Common/Traits/Crates/Crate.cs @@ -183,22 +183,16 @@ namespace OpenRA.Mods.Common.Traits // Sets the location (Location) and position (CenterPosition) public void SetPosition(Actor self, WPos pos) { - // HACK: Call SetCenterPosition before SetLocation - // So when SetLocation calls ActorMap.CellUpdated - // the listeners see the new CenterPosition. var cell = self.World.Map.CellContaining(pos); - SetCenterPosition(self, self.World.Map.CenterOfCell(cell) + new WVec(WDist.Zero, WDist.Zero, self.World.Map.DistanceAboveTerrain(pos))); SetLocation(self, cell); + SetCenterPosition(self, self.World.Map.CenterOfCell(cell) + new WVec(WDist.Zero, WDist.Zero, self.World.Map.DistanceAboveTerrain(pos))); } // Sets the location (Location) and position (CenterPosition) public void SetPosition(Actor self, CPos cell, SubCell subCell = SubCell.Any) { - // HACK: Call SetCenterPosition before SetLocation - // So when SetLocation calls ActorMap.CellUpdated - // the listeners see the new CenterPosition. - SetCenterPosition(self, self.World.Map.CenterOfCell(cell)); SetLocation(self, cell); + SetCenterPosition(self, self.World.Map.CenterOfCell(cell)); } // Sets only the CenterPosition diff --git a/OpenRA.Mods.Common/Traits/Mobile.cs b/OpenRA.Mods.Common/Traits/Mobile.cs index b629934e98..f776b1703a 100644 --- a/OpenRA.Mods.Common/Traits/Mobile.cs +++ b/OpenRA.Mods.Common/Traits/Mobile.cs @@ -468,28 +468,22 @@ namespace OpenRA.Mods.Common.Traits public void SetPosition(Actor self, CPos cell, SubCell subCell = SubCell.Any) { subCell = GetValidSubCell(subCell); + SetLocation(cell, subCell, cell, subCell); var position = cell.Layer == 0 ? self.World.Map.CenterOfCell(cell) : self.World.GetCustomMovementLayers()[cell.Layer].CenterOfCell(cell); - // HACK: Call SetCenterPosition before SetLocation - // So when SetLocation calls ActorMap.CellUpdated - // the listeners see the new CenterPosition. var subcellOffset = self.World.Map.Grid.OffsetOfSubCell(subCell); SetCenterPosition(self, position + subcellOffset); - SetLocation(cell, subCell, cell, subCell); FinishedMoving(self); } // Sets the location (fromCell, toCell, FromSubCell, ToSubCell) and CenterPosition public void SetPosition(Actor self, WPos pos) { - // HACK: Call SetCenterPosition before SetLocation - // So when SetLocation calls ActorMap.CellUpdated - // the listeners see the new CenterPosition. var cell = self.World.Map.CellContaining(pos); - SetCenterPosition(self, self.World.Map.CenterOfSubCell(cell, FromSubCell) + new WVec(0, 0, self.World.Map.DistanceAboveTerrain(pos).Length)); SetLocation(cell, FromSubCell, cell, FromSubCell); + SetCenterPosition(self, self.World.Map.CenterOfSubCell(cell, FromSubCell) + new WVec(0, 0, self.World.Map.DistanceAboveTerrain(pos).Length)); FinishedMoving(self); } @@ -692,11 +686,8 @@ namespace OpenRA.Mods.Common.Traits subCell = self.World.Map.Grid.DefaultSubCell; // Reserve the exit cell - // HACK: Call SetCenterPosition before SetPosition - // So when SetPosition calls ActorMap.CellUpdated - // the listeners see the new CenterPosition. - mobile.SetCenterPosition(self, pos); mobile.SetPosition(self, cell, subCell); + mobile.SetCenterPosition(self, pos); if (delay > 0) QueueChild(new Wait(delay)); diff --git a/OpenRA.Mods.Common/Traits/ParaDrop.cs b/OpenRA.Mods.Common/Traits/ParaDrop.cs index 049f70ba9b..7cef409f62 100644 --- a/OpenRA.Mods.Common/Traits/ParaDrop.cs +++ b/OpenRA.Mods.Common/Traits/ParaDrop.cs @@ -102,12 +102,10 @@ namespace OpenRA.Mods.Common.Traits self.World.AddFrameEndTask(w => { - // HACK: Call SetCenterPosition before SetPosition - // So when SetPosition calls ActorMap.CellUpdated - // the listeners see the new CenterPosition. + dropPositionable.SetPosition(dropActor, dropCell, dropSubCell); + var dropPosition = dropActor.CenterPosition + new WVec(0, 0, self.CenterPosition.Z - dropActor.CenterPosition.Z); dropPositionable.SetCenterPosition(dropActor, dropPosition); - dropPositionable.SetPosition(dropActor, dropCell, dropSubCell); w.Add(dropActor); });