Add ISingleInstanceInit interface.

Inits that are logically singletons (e.g. actor
location or owner) should implement this interface
to avoid runtime inconsistencies.

Duplicate instances are rejected at init-time,
allowing simpler queries when they are used.
This commit is contained in:
Paul Chote
2020-05-30 16:48:35 +01:00
committed by reaperrr
parent 86305879cb
commit b856613194
45 changed files with 169 additions and 95 deletions

View File

@@ -16,13 +16,13 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
public enum LineBuildDirection { Unset, X, Y }
public class LineBuildDirectionInit : ValueActorInit<LineBuildDirection>
public class LineBuildDirectionInit : ValueActorInit<LineBuildDirection>, ISingleInstanceInit
{
public LineBuildDirectionInit(LineBuildDirection value)
: base(value) { }
}
public class LineBuildParentInit : ValueActorInit<string[]>
public class LineBuildParentInit : ValueActorInit<string[]>, ISingleInstanceInit
{
readonly Actor[] parents = null;
@@ -76,7 +76,7 @@ namespace OpenRA.Mods.Common.Traits
public LineBuild(ActorInitializer init, LineBuildInfo info)
{
this.info = info;
var lineBuildParentInit = init.GetOrDefault<LineBuildParentInit>(info);
var lineBuildParentInit = init.GetOrDefault<LineBuildParentInit>();
if (lineBuildParentInit != null)
parentNodes = lineBuildParentInit.ActorValue(init.World);
}