From 13a57102a9927d57fd8ec436198cb45e1878a499 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 15 Dec 2018 12:12:57 +1100 Subject: [PATCH] Selectable OccludeModels, also occluder ymap indices now displayed --- .../GameFiles/FileTypes/YmapFile.cs | 5 ++++- Utils/MapUtils.cs | 8 +++---- WorldForm.cs | 21 +++++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 7bf9c31..d9185da 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -442,6 +442,7 @@ namespace CodeWalker.GameFiles for (int i = 0; i < CBoxOccluders.Length; i++) { BoxOccluders[i] = new YmapBoxOccluder(this, CBoxOccluders[i]); + BoxOccluders[i].Index = i; } } } @@ -455,7 +456,7 @@ namespace CodeWalker.GameFiles for (int i = 0; i < COccludeModels.Length; i++) { OccludeModels[i] = new YmapOccludeModel(this, COccludeModels[i]); - + OccludeModels[i].Index = i; OccludeModels[i].Load(Meta); } @@ -2225,6 +2226,7 @@ namespace CodeWalker.GameFiles public byte[] Data { get; set; } public Vector3[] Vertices { get; set; } public byte[] Indices { get; set; } + public int Index { get; set; } public YmapOccludeModel(YmapFile ymap, OccludeModel model) { @@ -2285,6 +2287,7 @@ namespace CodeWalker.GameFiles public Vector3 BBMin { get; set; } public Vector3 BBMax { get; set; } public Quaternion Orientation { get; set; } + public int Index { get; set; } public YmapBoxOccluder(YmapFile ymap, BoxOccluder box) diff --git a/Utils/MapUtils.cs b/Utils/MapUtils.cs index 0942af4..3b36cc9 100644 --- a/Utils/MapUtils.cs +++ b/Utils/MapUtils.cs @@ -358,11 +358,11 @@ namespace CodeWalker } else if (BoxOccluder != null) { - name = "BoxOccluder " + (BoxOccluder.Ymap?.Name ?? ""); + name = "BoxOccluder " + (BoxOccluder.Ymap?.Name ?? "") + ": " + BoxOccluder.Index.ToString(); } else if (OccludeModel != null) { - name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? ""); + name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? "") + ": " + OccludeModel.Index.ToString(); } else if (CollisionBounds != null) { @@ -444,11 +444,11 @@ namespace CodeWalker } if (BoxOccluder != null) { - name = "BoxOccluder " + (BoxOccluder.Ymap?.Name ?? ""); + name = "BoxOccluder " + (BoxOccluder.Ymap?.Name ?? "") + ": " + BoxOccluder.Index.ToString(); } if (OccludeModel != null) { - name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? ""); + name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? "") + ": " + OccludeModel.Index.ToString(); } if (CarGenerator != null) { diff --git a/WorldForm.cs b/WorldForm.cs index 0ceb125..e040a94 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -2728,6 +2728,7 @@ namespace CodeWalker if (mraytrn.Intersects(ref bbox, out hitdist) && (hitdist < CurMouseHit.HitDist) && (hitdist > 0)) { CurMouseHit.BoxOccluder = bo; + CurMouseHit.OccludeModel = null; CurMouseHit.HitDist = hitdist; CurMouseHit.CamRel = mb.CamRelPos; CurMouseHit.AABB = bbox; @@ -2742,6 +2743,26 @@ namespace CodeWalker Renderer.RenderBasePath(om); + MapBox mb = new MapBox(); + mb.CamRelPos = -camera.Position; + mb.BBMin = om._OccludeModel.bmin; + mb.BBMax = om._OccludeModel.bmax; + mb.Orientation = Quaternion.Identity;// bo.Orientation; + mb.Scale = Vector3.One; + Renderer.BoundingBoxes.Add(mb); + + + bbox.Minimum = mb.BBMin; + bbox.Maximum = mb.BBMax; + if (mray.Intersects(ref bbox, out hitdist) && (hitdist < CurMouseHit.HitDist) && (hitdist > 0)) + { + CurMouseHit.BoxOccluder = null; + CurMouseHit.OccludeModel = om; + CurMouseHit.HitDist = hitdist; + CurMouseHit.CamRel = mb.CamRelPos; + CurMouseHit.AABB = bbox; + } + } }