diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs index 26f53aac3a..ef5a6e6d7f 100644 --- a/OpenRA.Game/Actor.cs +++ b/OpenRA.Game/Actor.cs @@ -38,7 +38,7 @@ namespace OpenRA public readonly uint ActorID; - public Player Owner { get; set; } + public Player Owner { get; internal set; } public bool IsInWorld { get; internal set; } public bool Disposed { get; private set; } diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index e83c9d4027..f9608dfd77 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -240,6 +240,11 @@ namespace OpenRA rc.Metadata = new ReplayMetadata(gameInfo); } + public void SetWorldOwner(Player p) + { + WorldActor.Owner = p; + } + public Actor CreateActor(string name, TypeDictionary initDict) { return CreateActor(true, name, initDict); diff --git a/OpenRA.Mods.Common/Traits/Cargo.cs b/OpenRA.Mods.Common/Traits/Cargo.cs index 854ba45bac..5e66f98e38 100644 --- a/OpenRA.Mods.Common/Traits/Cargo.cs +++ b/OpenRA.Mods.Common/Traits/Cargo.cs @@ -382,11 +382,8 @@ namespace OpenRA.Mods.Common.Traits if (cargo == null) return; - self.World.AddFrameEndTask(w => - { - foreach (var p in Passengers) - p.Owner = newOwner; - }); + foreach (var p in Passengers) + p.ChangeOwner(newOwner); } void INotifyAddedToWorld.AddedToWorld(Actor self) diff --git a/OpenRA.Mods.Common/Traits/World/CreateMPPlayers.cs b/OpenRA.Mods.Common/Traits/World/CreateMPPlayers.cs index 5842aa14ba..0150892904 100644 --- a/OpenRA.Mods.Common/Traits/World/CreateMPPlayers.cs +++ b/OpenRA.Mods.Common/Traits/World/CreateMPPlayers.cs @@ -32,7 +32,7 @@ namespace OpenRA.Mods.Common.Traits var player = new Player(w, null, kv.Value); worldPlayers.Add(player); if (kv.Value.OwnsWorld) - w.WorldActor.Owner = player; + w.SetWorldOwner(player); } Player localPlayer = null; diff --git a/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs b/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs index 563ae72598..63ec4dad20 100644 --- a/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs +++ b/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs @@ -53,7 +53,7 @@ namespace OpenRA.Mods.Common.Traits Players = new MapPlayers(w.Map.PlayerDefinitions); var worldOwner = Players.Players.Select(kvp => kvp.Value).First(p => !p.Playable && p.OwnsWorld); - w.WorldActor.Owner = new Player(w, null, worldOwner); + w.SetWorldOwner(new Player(w, null, worldOwner)); } public void WorldLoaded(World world, WorldRenderer wr)