Add dictionary support for ActorReference.

This commit is contained in:
Paul Chote
2020-08-28 21:37:56 +01:00
committed by reaperrr
parent 290e214638
commit 7f7bce50dc
3 changed files with 15 additions and 4 deletions

View File

@@ -23,10 +23,21 @@ namespace OpenRA.Traits
[AttributeUsage(AttributeTargets.Field)]
public sealed class ActorReferenceAttribute : Attribute
{
public Type[] RequiredTraits;
public ActorReferenceAttribute(params Type[] requiredTraits)
public readonly Type[] RequiredTraits;
public readonly LintDictionaryReference DictionaryReference;
public ActorReferenceAttribute(Type[] requiredTraits,
LintDictionaryReference dictionaryReference = LintDictionaryReference.None)
{
RequiredTraits = requiredTraits;
DictionaryReference = dictionaryReference;
}
public ActorReferenceAttribute(Type requiredTrait = null,
LintDictionaryReference dictionaryReference = LintDictionaryReference.None)
{
RequiredTraits = requiredTrait != null ? new[] { requiredTrait } : new Type[0];
DictionaryReference = dictionaryReference;
}
}

View File

@@ -24,7 +24,7 @@ namespace OpenRA.Mods.Cnc.Traits
{
[FieldLoader.Require]
[Desc("Drop pod unit")]
[ActorReference(typeof(AircraftInfo), typeof(FallsToEarthInfo))]
[ActorReference(new[] { typeof(AircraftInfo), typeof(FallsToEarthInfo) })]
public readonly string[] UnitTypes = null;
[Desc("Number of drop pods spawned.")]

View File

@@ -56,7 +56,7 @@ namespace OpenRA.Mods.Common.Lint
IReadOnlyDictionary<string, ActorInfo> dict,
ActorReferenceAttribute attribute)
{
var values = LintExts.GetFieldValues(traitInfo, fieldInfo, emitError);
var values = LintExts.GetFieldValues(traitInfo, fieldInfo, emitError, attribute.DictionaryReference);
foreach (var value in values)
{
if (value == null)