Add replace init function

This commit is contained in:
Gustas
2025-01-08 16:27:27 +02:00
committed by Paul Chote
parent cccd40ca13
commit 9da921756d
4 changed files with 12 additions and 11 deletions

View File

@@ -125,6 +125,15 @@ namespace OpenRA
InitDict.Add(init); InitDict.Add(init);
} }
public void Replace<T>(T init) where T : ActorInit, ISingleInstanceInit
{
var original = GetOrDefault<T>();
if (original != null)
Remove(original);
Add(init);
}
public void Remove(ActorInit o) { initDict.Value.Remove(o); } public void Remove(ActorInit o) { initDict.Value.Remove(o); }
public int RemoveAll<T>() where T : ActorInit public int RemoveAll<T>() where T : ActorInit

View File

@@ -144,8 +144,7 @@ namespace OpenRA.Mods.Common.Traits
if (!Players.Players.TryGetValue(ownerInit.InternalName, out var owner)) if (!Players.Players.TryGetValue(ownerInit.InternalName, out var owner))
{ {
owner = worldOwner; owner = worldOwner;
reference.Remove(ownerInit); reference.Replace(new OwnerInit(worldOwner.Name));
reference.Add(new OwnerInit(worldOwner.Name));
} }
return owner; return owner;

View File

@@ -245,11 +245,7 @@ namespace OpenRA.Mods.Common.Traits
public void ReplaceInit<T>(T init) where T : ActorInit, ISingleInstanceInit public void ReplaceInit<T>(T init) where T : ActorInit, ISingleInstanceInit
{ {
var original = reference.GetOrDefault<T>(); reference.Replace(init);
if (original != null)
reference.Remove(original);
reference.Add(init);
GeneratePreviews(); GeneratePreviews();
UpdateRadarColor(); UpdateRadarColor();
} }

View File

@@ -38,10 +38,7 @@ namespace OpenRA.Mods.Common.Traits
// If an actor's doesn't have a valid owner transfer ownership to neutral // If an actor's doesn't have a valid owner transfer ownership to neutral
var ownerInit = actorReference.Get<OwnerInit>(); var ownerInit = actorReference.Get<OwnerInit>();
if (!world.Players.Any(p => p.InternalName == ownerInit.InternalName)) if (!world.Players.Any(p => p.InternalName == ownerInit.InternalName))
{ actorReference.Replace(new OwnerInit(world.WorldActor.Owner));
actorReference.Remove(ownerInit);
actorReference.Add(new OwnerInit(world.WorldActor.Owner));
}
actorReference.Add(new SkipMakeAnimsInit()); actorReference.Add(new SkipMakeAnimsInit());
actorReference.Add(new SpawnedByMapInit()); actorReference.Add(new SpawnedByMapInit());