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,38 +16,38 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common
{
public class FacingInit : ValueActorInit<int>
public class FacingInit : ValueActorInit<int>, ISingleInstanceInit
{
public FacingInit(int value)
: base(value) { }
}
public class CreationActivityDelayInit : ValueActorInit<int>
public class CreationActivityDelayInit : ValueActorInit<int>, ISingleInstanceInit
{
public CreationActivityDelayInit(int value)
: base(value) { }
}
public class DynamicFacingInit : ValueActorInit<Func<int>>
public class DynamicFacingInit : ValueActorInit<Func<int>>, ISingleInstanceInit
{
public DynamicFacingInit(Func<int> value)
: base(value) { }
}
public class SubCellInit : ValueActorInit<SubCell>
public class SubCellInit : ValueActorInit<SubCell>, ISingleInstanceInit
{
public SubCellInit(SubCell value)
: base(value) { }
}
public class CenterPositionInit : ValueActorInit<WPos>
public class CenterPositionInit : ValueActorInit<WPos>, ISingleInstanceInit
{
public CenterPositionInit(WPos value)
: base(value) { }
}
// Allows maps / transformations to specify the faction variant of an actor.
public class FactionInit : ValueActorInit<string>
public class FactionInit : ValueActorInit<string>, ISingleInstanceInit
{
public FactionInit(string value)
: base(value) { }