diff --git a/Robust.Shared/Serialization/Manager/ISerializationManager.cs b/Robust.Shared/Serialization/Manager/ISerializationManager.cs index 1407e32bc4..22fd2c56e1 100644 --- a/Robust.Shared/Serialization/Manager/ISerializationManager.cs +++ b/Robust.Shared/Serialization/Manager/ISerializationManager.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; using Robust.Shared.Reflection; using Robust.Shared.Serialization.Markdown; @@ -440,5 +441,7 @@ namespace Robust.Shared.Serialization.Manager } #endregion + + public bool TryGetVariableType(Type type, string variableName, [NotNullWhen(true)] out Type? variableType); } } diff --git a/Robust.Shared/Serialization/Manager/SerializationManager.cs b/Robust.Shared/Serialization/Manager/SerializationManager.cs index 54410610da..d2f27ba960 100644 --- a/Robust.Shared/Serialization/Manager/SerializationManager.cs +++ b/Robust.Shared/Serialization/Manager/SerializationManager.cs @@ -264,6 +264,26 @@ namespace Robust.Shared.Serialization.Manager return dataDefinition != null; } + public bool TryGetVariableType(Type type, string variableName, [NotNullWhen(true)] out Type? variableType) + { + if (!TryGetDefinition(type, out var definition)) + { + variableType = null; + return false; + } + var foundFieldDef = definition.BaseFieldDefinitions.FirstOrDefault(fieldDef => fieldDef?.BackingField.Name==variableName, null); + if(foundFieldDef != null) + { + variableType = foundFieldDef.BackingField.FieldType; + return true; + } + else + { + variableType = null; + return false; + } + } + private Type ResolveConcreteType(Type baseType, string typeName) { var type = ReflectionManager.YamlTypeTagLookup(baseType, typeName);