From 9da921756db0ceaec85a6fbd8883960033d92e67 Mon Sep 17 00:00:00 2001 From: Gustas <37534529+PunkPun@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:27:27 +0200 Subject: [PATCH] Add replace init function --- OpenRA.Game/Map/ActorReference.cs | 9 +++++++++ OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs | 3 +-- OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs | 6 +----- OpenRA.Mods.Common/Traits/World/SpawnMapActors.cs | 5 +---- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/OpenRA.Game/Map/ActorReference.cs b/OpenRA.Game/Map/ActorReference.cs index 35c45cb968..3e2f7e92fb 100644 --- a/OpenRA.Game/Map/ActorReference.cs +++ b/OpenRA.Game/Map/ActorReference.cs @@ -125,6 +125,15 @@ namespace OpenRA InitDict.Add(init); } + public void Replace(T init) where T : ActorInit, ISingleInstanceInit + { + var original = GetOrDefault(); + if (original != null) + Remove(original); + + Add(init); + } + public void Remove(ActorInit o) { initDict.Value.Remove(o); } public int RemoveAll() where T : ActorInit diff --git a/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs b/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs index 330cc3c538..b9ac7b8904 100644 --- a/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs +++ b/OpenRA.Mods.Common/Traits/World/EditorActorLayer.cs @@ -144,8 +144,7 @@ namespace OpenRA.Mods.Common.Traits if (!Players.Players.TryGetValue(ownerInit.InternalName, out var owner)) { owner = worldOwner; - reference.Remove(ownerInit); - reference.Add(new OwnerInit(worldOwner.Name)); + reference.Replace(new OwnerInit(worldOwner.Name)); } return owner; diff --git a/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs b/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs index 07a5cf2f56..84d0112482 100644 --- a/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs +++ b/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs @@ -245,11 +245,7 @@ namespace OpenRA.Mods.Common.Traits public void ReplaceInit(T init) where T : ActorInit, ISingleInstanceInit { - var original = reference.GetOrDefault(); - if (original != null) - reference.Remove(original); - - reference.Add(init); + reference.Replace(init); GeneratePreviews(); UpdateRadarColor(); } diff --git a/OpenRA.Mods.Common/Traits/World/SpawnMapActors.cs b/OpenRA.Mods.Common/Traits/World/SpawnMapActors.cs index 91a5ad6cca..1abf971be8 100644 --- a/OpenRA.Mods.Common/Traits/World/SpawnMapActors.cs +++ b/OpenRA.Mods.Common/Traits/World/SpawnMapActors.cs @@ -38,10 +38,7 @@ namespace OpenRA.Mods.Common.Traits // If an actor's doesn't have a valid owner transfer ownership to neutral var ownerInit = actorReference.Get(); if (!world.Players.Any(p => p.InternalName == ownerInit.InternalName)) - { - actorReference.Remove(ownerInit); - actorReference.Add(new OwnerInit(world.WorldActor.Owner)); - } + actorReference.Replace(new OwnerInit(world.WorldActor.Owner)); actorReference.Add(new SkipMakeAnimsInit()); actorReference.Add(new SpawnedByMapInit());