Jankily read scale in for models

This commit is contained in:
Jarrod Doyle 2024-08-25 11:54:33 +01:00
parent f69a98e880
commit 3b9ff6c852
Signed by: Jayrude
GPG Key ID: 38B57B16E7C0ADF7
1 changed files with 37 additions and 9 deletions

View File

@ -105,12 +105,14 @@ public partial class Mission : Node3D
if (
_file.Chunks.TryGetValue("BRLIST", out var brListRaw) &&
_file.Chunks.TryGetValue("P$ModelName", out var modelNamesRaw) &&
_file.Chunks.TryGetValue("P$Scale", out var scalesRaw) &&
_file.Chunks.TryGetValue("L$MetaProp", out var metaPropLinksRaw) &&
_file.Chunks.TryGetValue("LD$MetaProp", out var metaPropLinkDataRaw)
)
{
var brList = (BrList)brListRaw;
var modelNames = (PropertyModelName)modelNamesRaw;
var scales = (PropertyScale)scalesRaw;
var metaPropLinks = (LinkChunk)metaPropLinksRaw;
var metaPropLinkData = (LinkDataMetaProp)metaPropLinkDataRaw;
@ -130,18 +132,20 @@ public partial class Mission : Node3D
var gamFile = new DbFile(paths[0]);
if (gamFile.Chunks.TryGetValue("P$ModelName", out var gamChunk1) &&
gamFile.Chunks.TryGetValue("L$MetaProp", out var gamChunk2) &&
gamFile.Chunks.TryGetValue("LD$MetaProp", out var gamChunk3))
gamFile.Chunks.TryGetValue("LD$MetaProp", out var gamChunk3) &&
gamFile.Chunks.TryGetValue("P$Scale", out var gamChunk4))
{
GD.Print($"Pre-Merged chunks: {modelNames.properties.Count} {metaPropLinks.links.Count} {metaPropLinkData.linkData.Count}");
modelNames.properties.AddRange(((PropertyModelName)gamChunk1).properties);
metaPropLinks.links.AddRange(((LinkChunk)gamChunk2).links);
metaPropLinkData.linkData.AddRange(((LinkDataMetaProp)gamChunk3).linkData);
scales.properties.AddRange(((PropertyScale)gamChunk4).properties);
GD.Print($"Post-Merged chunks: {modelNames.properties.Count} {metaPropLinks.links.Count} {metaPropLinkData.linkData.Count}");
}
}
}
PlaceObjects(brList, modelNames, metaPropLinks, metaPropLinkData);
PlaceObjects(brList, modelNames, scales, metaPropLinks, metaPropLinkData);
}
}
@ -160,6 +164,7 @@ public partial class Mission : Node3D
private void PlaceObjects(
BrList brList,
PropertyModelName modelNames,
PropertyScale scales,
LinkChunk metapropLink,
LinkDataMetaProp metaPropLinkData)
{
@ -175,9 +180,13 @@ public partial class Mission : Node3D
// Determine if we have a model name :))
var id = (int)brush.brushInfo;
var modelName = "";
var scale = Vector3.One;
var scaleFound = false;
while (true)
{
// See if there's a modelname property
if (modelName == "")
{
foreach (var prop in modelNames.properties)
{
if (prop.objectId == id)
@ -186,9 +195,27 @@ public partial class Mission : Node3D
break;
}
}
if (modelName != "") break;
}
// No modelname so check for a parent
if (!scaleFound)
{
foreach (var prop in scales.properties)
{
if (prop.objectId == id)
{
scale = prop.scale.ToGodotVec3(false);
scaleFound = true;
break;
}
}
}
if (modelName != "" && scaleFound)
{
break;
}
// Check for a parent
var length = metapropLink.links.Count;
var prevId = id;
for (var i = 0; i < length; i++)
@ -223,7 +250,8 @@ public partial class Mission : Node3D
var model = new Model
{
Position = pos,
RotationDegrees = rot
RotationDegrees = rot,
Scale = scale,
};
if (objPath != null)
{