From 0bf0aeab09f631747ad18a6da5da5ff4c7ec6a77 Mon Sep 17 00:00:00 2001 From: Samuele Lorefice Date: Tue, 11 Mar 2025 18:44:48 +0100 Subject: [PATCH] Added Array specific logic to Reader. **NOTE: This doesn't use the new attribute yet** --- BlendFile/Reader.cs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/BlendFile/Reader.cs b/BlendFile/Reader.cs index 1192580..3d79758 100644 --- a/BlendFile/Reader.cs +++ b/BlendFile/Reader.cs @@ -222,9 +222,23 @@ public class Reader { var data = new byte[size]; Array.Copy((byte[])block.Body, offset, data, 0, size); - //Convert the data to the correct type if it's a base type - object? value = ConvertFieldData(data, attrib.OriginalType); - if (value != null) return value; + + + //Check if it's an array + if (Type.GetType(attrib.UnderlyingType) is { IsArray: true }) { + int itemLenght = attrib.OriginalType.ParseFSize(); + var array = new object?[attrib.Size / itemLenght]; + for (int i = 0; i < attrib.Size; i += itemLenght) { + var itemData = new byte[itemLenght]; + Array.Copy(data, i, itemData, 0, itemLenght); + array[i / itemLenght] = ConvertFieldData(itemData, attrib.OriginalType); + } + return array; + } else { + //Convert the data to the correct type if it's a base type + object? value = ConvertFieldData(data, attrib.OriginalType); + if (value != null) return value; + } //Check if the field is a pointer to another DNA structure if (dnaTypesDb.ContainsKey(attrib.OriginalType)) {