From 2637f994567ee834cafa475dc36b8aa9b0b9ef4f Mon Sep 17 00:00:00 2001 From: Syntriax Date: Wed, 23 Apr 2025 14:58:25 +0300 Subject: [PATCH] fix: fixed fields/properties like behaviour controllers not being explored by entity finder --- .../Converters/EntityFinder.cs | 28 +++++++++---------- Engine.Serialization/Utils.cs | 5 ---- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/Engine.Serialization/Converters/EntityFinder.cs b/Engine.Serialization/Converters/EntityFinder.cs index 5d98e8e..4349ff6 100644 --- a/Engine.Serialization/Converters/EntityFinder.cs +++ b/Engine.Serialization/Converters/EntityFinder.cs @@ -16,13 +16,16 @@ public class EntityFinder TypeData typeData = Utils.GetTypeData(@object.GetType()); if (@object is not IEntity entity) + { + if (@object is IEnumerable enumerable && @object.GetType() != typeof(string)) + foreach (object? listObject in enumerable) + FindEntitiesUnder(listObject); return; + } if (!_entities.Add(entity)) return; - FindEntitiesUnder(entity); - foreach (PropertyInfo propertyInfo in typeData.Properties) { if (propertyInfo.PropertyType?.IsPrimitive ?? true || propertyInfo.PropertyType == typeof(string)) @@ -31,12 +34,8 @@ public class EntityFinder if (propertyInfo.HasAttribute()) continue; - object? value = propertyInfo.GetValue(@object); - - if (value is IEnumerable enumerable && value.GetType() != typeof(string)) - foreach (object? listObject in enumerable) - FindEntitiesUnder(listObject); - + if (propertyInfo.GetValue(@object) is object propertyObject) + FindEntitiesUnder(propertyObject); } foreach (FieldInfo fieldInfo in typeData.Fields) @@ -47,14 +46,13 @@ public class EntityFinder if (fieldInfo.HasAttribute()) continue; - if (!fieldInfo.HasAttribute()) - continue; + // if (!fieldInfo.HasAttribute()) + // continue; - object? value = fieldInfo.GetValue(@object); - - if (value is IEnumerable enumerable && value.GetType() != typeof(string)) - foreach (object? listObject in enumerable) - FindEntitiesUnder(listObject); + if (fieldInfo.GetValue(@object) is object fieldObject) + FindEntitiesUnder(fieldObject); } + + FindEntitiesUnder(entity); } } diff --git a/Engine.Serialization/Utils.cs b/Engine.Serialization/Utils.cs index 4126f0f..65ef01c 100644 --- a/Engine.Serialization/Utils.cs +++ b/Engine.Serialization/Utils.cs @@ -15,11 +15,6 @@ internal static class Utils .Where(pi => pi.SetMethod is not null) .ToList(); - propertyInfos.AddRange( - GetPropertyInfosIncludingBaseClasses(objectType, BindingFlags.Instance | BindingFlags.FlattenHierarchy | BindingFlags.NonPublic) - .Where(pi => pi.SetMethod is not null && pi.GetCustomAttribute() is not null) - ); - return new TypeData(fieldInfos, propertyInfos); }