mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-05-30 18:56:44 +00:00
ModelRenderer - Add 'TryGetModelMetaData' method
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user