private BaseObject ReadReference(string relativePath, Luminous.Core.Object.Object destinationObject, Xmb2Element destinationObjectElement) { if (relativePath == null) { return(null); } var type = destinationObject.GetObjectType(); var property = type.PropertyContainer.FindByName(relativePath); if (property != null) { return(destinationObject.GetPropertyValue <BaseObject>(property)); } var relativePathSegments = relativePath.Split('.'); // TODO Commented out because not all types are implemented yet, causing this to misfire Debug.Assert(relativePathSegments.Length > 1, $"[EntityPackageXmlLoader]Reference relativePath not found {relativePath}"); if (relativePathSegments.Length == 1) { return(null); } property = type.PropertyContainer.FindByName(relativePathSegments[0]); if (property == null || property.Type != Property.PrimitiveType.ClassField || property.Type != Property.PrimitiveType.PointerArray) { Debug.Fail($"[EntityPackageXmlLoader]Reference relativePath not found {relativePath}"); return(null); } var referencedPropertyValue = destinationObject.GetPropertyValue <Luminous.Core.Object.Object>(property); var referencedPropertyElement = destinationObjectElement.GetElementByName(relativePathSegments[0]); if (referencedPropertyElement == null) { Debug.Fail($"[EntityPackageXmlLoader]Reference relativePath not found {relativePath}"); return(null); } if (property.Type != Property.PrimitiveType.PointerArray) { var referencedPropertyElementTypeAttribute = referencedPropertyElement.GetAttributeByName("type"); if (referencedPropertyElementTypeAttribute == null || referencedPropertyElementTypeAttribute.GetTextValue() != "enum") { return(this.ReadReference(relativePathSegments[1], referencedPropertyValue, referencedPropertyElement)); } else { Debug.Fail($"[EntityPackageXmlLoader]Reference relativePath not found {relativePath}"); return(null); } } // TODO read pointer array item //return this.ReadReference(relativePath, destinationObject, destinationObjectElement); return(null); }
/* * new public static ObjectType ObjectType { get; private set; } * private static PropertyContainer fieldProperties; * * public string simpleName_; * public List<Luminous.Core.Object.Object> loadedObjects_ = new List<Luminous.Core.Object.Object>(); * public List<string> loadedObjectNames_ = new List<string>(); * public List<string> loadedObjectPaths_ = new List<string>(); * public int sequenceUpdateOrderPreset_; * public ushort sequenceUpdateOrderDirect_; * * new public static void SetupObjectType() * { * if (ObjectType != null) * { * return; * } * * var dummy = new EntityPackage(); * var properties = dummy.GetFieldProperties(); * * ObjectType = new ObjectType("SQEX.Ebony.Framework.Entity.EntityPackage", 0, EntityPackageReference.ObjectType, Construct, properties, 8, 592); * } * * public override ObjectType GetObjectType() * { * return ObjectType; * } * * protected override PropertyContainer GetFieldProperties() * { * if (fieldProperties != null) * { * return fieldProperties; * } * * fieldProperties = new PropertyContainer("SQEX.Ebony.Framework.Entity.EntityPackage", base.GetFieldProperties(), -1610658500, -1708356512); * fieldProperties.AddIndirectlyProperty(new Property("entities_", 798990575, "SQEX.Ebony.Std.IntrusivePointerDynamicArray< SQEX.Ebony.Framework.Entity.Entity >", 64, 16, 1, Property.PrimitiveType.IntrusivePointerArray, 0, (char)5)); * fieldProperties.AddIndirectlyProperty(new Property("hasTransform_", 3096138238, "bool", 88, 1, 1, Property.PrimitiveType.Bool, 0, (char)0)); * fieldProperties.AddIndirectlyProperty(new Property("position_", 987254735, "Luminous.Math.VectorA", 96, 16, 1, Property.PrimitiveType.Vector4, 0, (char)0)); * fieldProperties.AddIndirectlyProperty(new Property("rotation_", 36328192, "Luminous.Math.VectorA", 112, 16, 1, Property.PrimitiveType.Vector4, 0, (char)0)); * fieldProperties.AddIndirectlyProperty(new Property("scaling_", 3325430311, "float", 128, 4, 1, Property.PrimitiveType.Float, 0, (char)0)); * fieldProperties.AddIndirectlyProperty(new Property("canManipulate_", 3989276646, "bool", 132, 1, 1, Property.PrimitiveType.Bool, 0, (char)0)); * * fieldProperties.AddIndirectlyProperty(new Property("sourcePath_", 341055184, "Base.String", 208, 16, 1, Property.PrimitiveType.String, 0, (char)0)); * fieldProperties.AddIndirectlyProperty(new Property("name_", 182823483, "Base.String", 224, 16, 1, Property.PrimitiveType.String, 0, (char)0)); * fieldProperties.AddIndirectlyProperty(new Property("isTemplateTraySourceReference_", 3775626232, "bool", 240, 1, 1, Property.PrimitiveType.Bool, 0, (char)0)); * fieldProperties.AddIndirectlyProperty(new Property("isShared_", 3455118081, "bool", 241, 1, 1, Property.PrimitiveType.Bool, 0, (char)0)); * fieldProperties.AddIndirectlyProperty(new Property("startupLoad_", 3202049383, "bool", 242, 1, 1, Property.PrimitiveType.Bool, 0, (char)0)); * * fieldProperties.AddProperty(new Property("loadedObjects_", 4286216873, "SQEX.Ebony.Std.IntrusivePointerDynamicArray< Base.Object.Object, MEMORY_CATEGORY_FRAMEWORK >", 304, 16, 1, Property.PrimitiveType.IntrusivePointerArray, 0, (char)0)); * fieldProperties.AddProperty(new Property("loadedObjectNames_", 503273934, "SQEX.Ebony.Std.IntrusivePointerDynamicArray< Base.Object.String, MEMORY_CATEGORY_FRAMEWORK >", 320, 16, 1, Property.PrimitiveType.Array, 0, (char)0)); * fieldProperties.AddProperty(new Property("loadedObjectPaths_", 453683170, "SQEX.Ebony.Std.IntrusivePointerDynamicArray< Base.Object.String, MEMORY_CATEGORY_FRAMEWORK >", 336, 16, 1, Property.PrimitiveType.Array, 0, (char)0)); * fieldProperties.AddProperty(new Property("sequenceUpdateOrderPreset_", 2630853337, "SQEX.Ebony.Framework.Entity.EntityPackage.SequenceUpdateOrderPreset", 352, 4, 1, Property.PrimitiveType.Enum, 0, (char)0)); * fieldProperties.AddProperty(new Property("sequenceUpdateOrderDirect_", 3519507007, "uint16_t", 356, 2, 1, Property.PrimitiveType.UInt16, 0, (char)0)); * fieldProperties.AddProperty(new Property("entityPackageSharedChildPathList_", 1047969541, "SQEX.Ebony.Std.DynamicArray< SQEX.Ebony.Framework.Entity.EntityPackageSharedRefItem*, MEMORY_CATEGORY_FRAMEWORK >", 360, 16, 1, Property.PrimitiveType.PointerArray, 0, (char)0)); * fieldProperties.AddProperty(new Property("packageSearchLabelId_", 1572444187, "SQEX.Ebony.Std.Fixid", 376, 4, 1, Property.PrimitiveType.Fixid, 0, (char)0)); * fieldProperties.AddProperty(new Property("bUmbraBakeTarget_", 26211871, "bool", 380, 1, 1, Property.PrimitiveType.Bool, 0, (char)0)); * fieldProperties.AddProperty(new Property("bForbidDuplicatedLoad_", 2326256737, "bool", 381, 1, 1, Property.PrimitiveType.Bool, 0, (char)0)); * * return fieldProperties; * } * * private static BaseObject Construct() * { * return new EntityPackage(); * } */ public void AddLoadedObject(Luminous.Core.Object.Object obj, string loadedObjectName, string loadedObjectPath) { this.loadedObjects_.Add(obj); this.loadedObjectNames_.Add(loadedObjectName); this.loadedObjectPaths_.Add(loadedObjectPath); }