From 3b9ff6c8522f8ac48fff76f275058993c7f15bd9 Mon Sep 17 00:00:00 2001 From: Jarrod Doyle Date: Sun, 25 Aug 2024 11:54:33 +0100 Subject: [PATCH] Jankily read scale in for models --- project/code/TMV/Mission.cs | 46 +++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/project/code/TMV/Mission.cs b/project/code/TMV/Mission.cs index c876230..4b2831f 100644 --- a/project/code/TMV/Mission.cs +++ b/project/code/TMV/Mission.cs @@ -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,20 +180,42 @@ 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 - foreach (var prop in modelNames.properties) + if (modelName == "") { - if (prop.objectId == id) + foreach (var prop in modelNames.properties) { - modelName = prop.modelName; - break; + if (prop.objectId == id) + { + modelName = prop.modelName; + 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) {