ModelRenderer - Add 'TryGetModelMetaData' method

This commit is contained in:
miku-666
2024-11-16 16:51:35 +01:00
parent e5f4f39a18
commit 903c4eea4a
2 changed files with 37 additions and 11 deletions

View File

@@ -17,6 +17,22 @@ namespace PckStudio.Internal.Json
[JsonProperty("children", NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore)]
public ModelMetaDataPart[] Children { get; set; } = Array.Empty<ModelMetaDataPart>();
[JsonConstructor]
public ModelMetaDataPart()
{
}
public ModelMetaDataPart(string name)
: this(name, Array.Empty<ModelMetaDataPart>())
{
}
public ModelMetaDataPart(string name, params ModelMetaDataPart[] children)
{
Name = name;
Children = children;
}
}
internal class JsonModelMetaData

View File

@@ -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<string, ModelPart>.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;