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)] [AttributeUsage(AttributeTargets.Field)]
public sealed class ActorReferenceAttribute : Attribute public sealed class ActorReferenceAttribute : Attribute
{ {
public Type[] RequiredTraits; public readonly Type[] RequiredTraits;
public ActorReferenceAttribute(params Type[] requiredTraits) public readonly LintDictionaryReference DictionaryReference;
public ActorReferenceAttribute(Type[] requiredTraits,
LintDictionaryReference dictionaryReference = LintDictionaryReference.None)
{ {
RequiredTraits = requiredTraits; 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] [FieldLoader.Require]
[Desc("Drop pod unit")] [Desc("Drop pod unit")]
[ActorReference(typeof(AircraftInfo), typeof(FallsToEarthInfo))] [ActorReference(new[] { typeof(AircraftInfo), typeof(FallsToEarthInfo) })]
public readonly string[] UnitTypes = null; public readonly string[] UnitTypes = null;
[Desc("Number of drop pods spawned.")] [Desc("Number of drop pods spawned.")]

View File

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