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