diff --git a/Assets/Scripts/Modules/AliasModel.cs b/Assets/Scripts/Modules/AliasModel.cs index 00a80c4..544613b 100644 --- a/Assets/Scripts/Modules/AliasModel.cs +++ b/Assets/Scripts/Modules/AliasModel.cs @@ -59,6 +59,16 @@ public class AliasModel return false; // Shouldn't happen } + public void Dispose() + { + foreach (var mesh in animationMeshes) + { + UnityEngine.Object.Destroy(mesh.Item2); + } + + animationMeshes.Clear(); + } + public void ImportMeshData(QAliasHeader header, QTriVertex[][] poseVertices, QTriangle[] triangles, QSTVert[] stVertices) { // Massage the input data for easier conversion diff --git a/Assets/Scripts/Modules/RenderModule.cs b/Assets/Scripts/Modules/RenderModule.cs index 3d758d5..1863a48 100644 --- a/Assets/Scripts/Modules/RenderModule.cs +++ b/Assets/Scripts/Modules/RenderModule.cs @@ -1,9 +1,11 @@ -using UnityEngine; +using System.Collections.Generic; +using UnityEngine; using UnityEngine.Rendering; public partial class RenderModule { private readonly UniQuake uq; + private readonly List aliasModels = new List(); public RenderModule(UniQuake uniQuake) { @@ -11,6 +13,18 @@ public partial class RenderModule BuildCallbacks(); } + public override void Destroy() + { + base.Destroy(); + + foreach (var aliasModel in aliasModels) + { + // aliasModel.Dispose(); // TODO: reactivate when done testing in editor + } + + aliasModels.Clear(); + } + private float xPos = -8f; private int UploadAliasModel(string name, QAliasHeader header, @@ -21,6 +35,7 @@ public partial class RenderModule string modelName = System.IO.Path.GetFileNameWithoutExtension(name); AliasModel aliasModel = new AliasModel(modelName); aliasModel.ImportMeshData(header, poseVertices, triangles, stVertices); + aliasModels.Add(aliasModel); var go = new GameObject(modelName); go.transform.SetPositionAndRotation(new Vector3(xPos, 0, 0), Quaternion.Euler(-90, 90, 0));