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

@@ -37,8 +37,8 @@ namespace OpenRA.Mods.Common.Traits.Render
yield break;
var adjacent = 0;
var locationInit = init.GetOrDefault<LocationInit>(this);
var neighbourInit = init.GetOrDefault<RuntimeNeighbourInit>(this);
var locationInit = init.GetOrDefault<LocationInit>();
var neighbourInit = init.GetOrDefault<RuntimeNeighbourInit>();
if (locationInit != null && neighbourInit != null)
{
@@ -168,7 +168,7 @@ namespace OpenRA.Mods.Common.Traits.Render
}
}
public class RuntimeNeighbourInit : ValueActorInit<Dictionary<CPos, string[]>>, ISuppressInitExport
public class RuntimeNeighbourInit : ValueActorInit<Dictionary<CPos, string[]>>, ISuppressInitExport, ISingleInstanceInit
{
public RuntimeNeighbourInit(Dictionary<CPos, string[]> value)
: base(value) { }