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);
}
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 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))
{
owner = worldOwner;
reference.Remove(ownerInit);
reference.Add(new OwnerInit(worldOwner.Name));
reference.Replace(new OwnerInit(worldOwner.Name));
}
return owner;

View File

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