Add replace init function
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user