From 903c4eea4a0b6321d4a905ca87bbb643a2c102a8 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 16 Nov 2024 16:51:35 +0100 Subject: [PATCH] ModelRenderer - Add 'TryGetModelMetaData' method --- PCK-Studio/Internal/Json/JsonModelMetaData.cs | 16 ++++++++++ PCK-Studio/Rendering/ModelRenderer.cs | 32 ++++++++++++------- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/PCK-Studio/Internal/Json/JsonModelMetaData.cs b/PCK-Studio/Internal/Json/JsonModelMetaData.cs index c9aea5bc..5dd3012e 100644 --- a/PCK-Studio/Internal/Json/JsonModelMetaData.cs +++ b/PCK-Studio/Internal/Json/JsonModelMetaData.cs @@ -17,6 +17,22 @@ namespace PckStudio.Internal.Json [JsonProperty("children", NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore)] public ModelMetaDataPart[] Children { get; set; } = Array.Empty(); + + [JsonConstructor] + public ModelMetaDataPart() + { + } + + public ModelMetaDataPart(string name) + : this(name, Array.Empty()) + { + } + + public ModelMetaDataPart(string name, params ModelMetaDataPart[] children) + { + Name = name; + Children = children; + } } internal class JsonModelMetaData diff --git a/PCK-Studio/Rendering/ModelRenderer.cs b/PCK-Studio/Rendering/ModelRenderer.cs index 19d653a5..b7d95ba4 100644 --- a/PCK-Studio/Rendering/ModelRenderer.cs +++ b/PCK-Studio/Rendering/ModelRenderer.cs @@ -126,21 +126,12 @@ namespace PckStudio.Rendering .SelectMany(p => p.GetBoxes().Select(b => new BoundingBox(b.Position + p.Translation, b.Position + p.Translation + b.Size))) .GetEnclosingBoundingBox(); - if (!GameModelImporter.ModelMetaData.TryGetValue(model.Name, out JsonModelMetaData modelMetaData)) + if (!TryGetModelMetaData(model, out JsonModelMetaData modelMetaData)) { - Trace.TraceError($"[{nameof(ModelRenderer)}@{nameof(LoadModel)}] : Couldn't get meta data for model: '{model.Name}'"); + Trace.TraceError($"[{nameof(ModelRenderer)}@{nameof(LoadModel)}] Failed to get meta data for model: '{model.Name}'"); return; } - if (modelMetaData.RootParts.Length == 0) - { - modelMetaData = new JsonModelMetaData() - { - TextureLocations = modelMetaData.TextureLocations, - RootParts = model.GetParts().Select(p => new ModelMetaDataPart() { Name = p.Name }).ToArray() - }; - } - _rootCollection.AddRange(BuildModelMesh(modelMetaData.RootParts, Vector3.Zero, Vector3.Zero, Vector3.Zero, TryGet.FromDelegate(model.TryGetPart))); if (Context.IsCurrent) @@ -156,6 +147,25 @@ namespace PckStudio.Rendering _currentModelName = model.Name; } + private bool TryGetModelMetaData(Model model, out JsonModelMetaData modelMetaData) + { + if (!GameModelImporter.ModelMetaData.TryGetValue(model.Name, out modelMetaData)) + { + Trace.TraceError($"[{nameof(ModelRenderer)}@{nameof(TryGetModelMetaData)}] Couldn't get meta data for model: '{model.Name}'"); + return false; + } + + if (modelMetaData.RootParts.Length == 0) + { + modelMetaData = new JsonModelMetaData() + { + TextureLocations = modelMetaData.TextureLocations, + RootParts = model.GetParts().Select(p => new ModelMetaDataPart(p.Name)).ToArray() + }; + } + return true; + } + public override void ResetCamera(Vector3 offset) { Vector3 center = (_maxBounds.Start + _maxBounds.End) / 2f;