Compare commits

..

2 Commits

Author SHA1 Message Date
Jarrod Doyle eaf20f7f4a
Merge model faces that share a material 2024-08-18 14:01:43 +01:00
Jarrod Doyle dbabe1527c
Sort selector lists alphabetically 2024-08-18 14:01:09 +01:00
3 changed files with 22 additions and 11 deletions

View File

@ -62,7 +62,7 @@ public partial class Model : Node3D
} }
} }
var mesh = new ArrayMesh(); var surfaceDataMap = new Dictionary<int, MeshSurfaceData>();
foreach (var poly in modelFile.Polygons) foreach (var poly in modelFile.Polygons)
{ {
var vertices = new List<Vector3>(); var vertices = new List<Vector3>();
@ -83,17 +83,26 @@ public partial class Model : Node3D
} }
} }
var surfaceData = new MeshSurfaceData(); if (!surfaceDataMap.ContainsKey(poly.Data))
surfaceData.AddPolygon(vertices, normal, uvs, uvs); {
var array = surfaceData.BuildSurfaceArray(); surfaceDataMap.Add(poly.Data, new MeshSurfaceData());
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, array); }
surfaceDataMap[poly.Data].AddPolygon(vertices, normal, uvs, uvs);
}
var mesh = new ArrayMesh();
foreach (var (materialId, surfaceData) in surfaceDataMap)
{
var array = surfaceData.BuildSurfaceArray();
var surfaceIdx = mesh.GetSurfaceCount();
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, array);
for (var i = 0; i < materials.Count; i++) for (var i = 0; i < materials.Count; i++)
{ {
var m = modelFile.Materials[i]; var m = modelFile.Materials[i];
if (m.Slot == poly.Data) if (m.Slot == materialId)
{ {
mesh.SurfaceSetMaterial(poly.Index, materials[i]); mesh.SurfaceSetMaterial(surfaceIdx, materials[i]);
break; break;
} }
} }

View File

@ -60,7 +60,8 @@ public partial class MissionSelector : Control
_LoadButton.Disabled = true; _LoadButton.Disabled = true;
_Campaigns.AddItem("Original Missions"); _Campaigns.AddItem("Original Missions");
foreach (var c in Directory.GetDirectories(_installPaths.fmsPath)) var paths = Directory.GetDirectories(_installPaths.fmsPath);
foreach (var c in paths.OrderBy(s => s))
{ {
_Campaigns.AddItem(c.TrimPrefix(_installPaths.fmsPath)); _Campaigns.AddItem(c.TrimPrefix(_installPaths.fmsPath));
} }
@ -82,8 +83,8 @@ public partial class MissionSelector : Control
} }
string[] extensions = { "mis", "cow" }; string[] extensions = { "mis", "cow" };
campaignPath = idx == 0 ? _installPaths.omsPath : _installPaths.fmsPath + _Campaigns.GetItemText((int)idx); var paths = Directory.GetFiles(campaignPath);
foreach (var f in Directory.GetFiles(campaignPath)) foreach (var f in paths.OrderBy(s => s))
{ {
if (extensions.Contains(f.GetExtension().ToLower())) if (extensions.Contains(f.GetExtension().ToLower()))
{ {

View File

@ -59,7 +59,8 @@ public partial class ModelSelector : Control
_Models.Clear(); _Models.Clear();
_LoadButton.Disabled = true; _LoadButton.Disabled = true;
foreach (var m in Directory.GetFiles(_extractedObjectsPath, "*.bin", SearchOption.AllDirectories)) var paths = Directory.GetFiles(_extractedObjectsPath, "*.bin", SearchOption.AllDirectories);
foreach (var m in paths.OrderBy(s => s))
{ {
_Models.AddItem(m.TrimPrefix(_extractedObjectsPath)); _Models.AddItem(m.TrimPrefix(_extractedObjectsPath));
} }