From e8a3313d88b1b38384e6b0b09271dd9117cbee64 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Sat, 17 Apr 2021 13:46:45 +0200 Subject: [PATCH] Some cleanup --- Assets/Scripts/Modules/AliasModel.cs | 8 +++++++- Assets/Scripts/Modules/RenderModule.Interop.cs | 10 ++++------ Assets/Scripts/Modules/RenderModule.cs | 11 ++++++----- engine/UniQuake/gl_uniquake.c | 4 ++-- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/Assets/Scripts/Modules/AliasModel.cs b/Assets/Scripts/Modules/AliasModel.cs index 3d83899..eac59e6 100644 --- a/Assets/Scripts/Modules/AliasModel.cs +++ b/Assets/Scripts/Modules/AliasModel.cs @@ -5,9 +5,15 @@ using UnityEngine; public class AliasModel { public static readonly Regex AnimationRegex = new Regex(@"^[a-zA-Z]+"); - + + private readonly string name; private readonly List<(int, Mesh)> animationMeshes = new List<(int, Mesh)>(); // TODO: make this a fixed array after initialization + public AliasModel(string name) + { + this.name = name; + } + public void AddAnimation(int startFrame, Mesh mesh) { animationMeshes.Add((startFrame, mesh)); diff --git a/Assets/Scripts/Modules/RenderModule.Interop.cs b/Assets/Scripts/Modules/RenderModule.Interop.cs index 872ba1e..099a956 100644 --- a/Assets/Scripts/Modules/RenderModule.Interop.cs +++ b/Assets/Scripts/Modules/RenderModule.Interop.cs @@ -31,15 +31,13 @@ public partial class RenderModule: CallbackHandler } [UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Ansi)] - private delegate int UploadAliasModelCallback(IntPtr target, - [MarshalAs(UnmanagedType.LPStr)] string name, QVec3 boundsMin, QVec3 boundsMax, + private delegate int UploadAliasModelCallback(IntPtr target, [MarshalAs(UnmanagedType.LPStr)] string name, QAliasHeader header, IntPtr frames, [MarshalAs(UnmanagedType.LPArray, SizeConst = MaxAliasFrames)] IntPtr[] poseVerts, IntPtr triangles, IntPtr stVerts); [MonoPInvokeCallback(typeof(UploadAliasModelCallback))] - private static int Callback_UploadAliasModel(IntPtr target, - string name, QVec3 boundsMin, QVec3 boundsMax, - QAliasHeader header, IntPtr frames, + private static int Callback_UploadAliasModel(IntPtr target, + string name, QAliasHeader header, IntPtr frames, IntPtr[] poseVerts, IntPtr triangles, IntPtr stVerts) { if (header == null) @@ -58,7 +56,7 @@ public partial class RenderModule: CallbackHandler } return GetSelf(target).UploadAliasModel( - name, boundsMin, boundsMax, header, poseVertices, + name, header, poseVertices, triangles.ToStructArray(header.numTriangles), stVerts.ToStructArray(header.numVerts)); } diff --git a/Assets/Scripts/Modules/RenderModule.cs b/Assets/Scripts/Modules/RenderModule.cs index f318353..6139887 100644 --- a/Assets/Scripts/Modules/RenderModule.cs +++ b/Assets/Scripts/Modules/RenderModule.cs @@ -13,7 +13,7 @@ public partial class RenderModule private float xPos = -8f; - private int UploadAliasModel(string name, QVec3 boundsMin, QVec3 boundsMax, QAliasHeader header, + private int UploadAliasModel(string name, QAliasHeader header, QTriVertex[][] poseVertices, QTriangle[] triangles, QSTVert[] stVertices) { Debug.Log($"Alias model '{name}' with {header.numVerts} vertices, {header.numTriangles} triangles, {header.numFrames} frame(s)"); @@ -21,7 +21,8 @@ public partial class RenderModule ConvertTriangles(triangles, out var indices); ConvertUVs(stVertices, header.skinWidth, header.skinHeight, out var uvs); - AliasModel aliasModel = new AliasModel(); + string modelName = System.IO.Path.GetFileNameWithoutExtension(name); + AliasModel aliasModel = new AliasModel(modelName); Mesh mesh; string animName = null; @@ -38,7 +39,7 @@ public partial class RenderModule if (frameName != animName) { // New animation sequence; convert the previous sequence into a blend shape animation - mesh = CreateAnimatedMesh(header, poseVertices, indices, uvs, animName, startFrame, frameIdx); + mesh = CreateAnimatedMesh(header, poseVertices, indices, uvs, $"{modelName}_{animName}", startFrame, frameIdx); aliasModel.AddAnimation(startFrame, mesh); animName = frameName; @@ -46,10 +47,10 @@ public partial class RenderModule } } - mesh = CreateAnimatedMesh(header, poseVertices, indices, uvs, animName, startFrame, header.numFrames); + mesh = CreateAnimatedMesh(header, poseVertices, indices, uvs, $"{modelName}_{animName}", startFrame, header.numFrames); aliasModel.AddAnimation(startFrame, mesh); - var go = new GameObject(System.IO.Path.GetFileNameWithoutExtension(name)); + var go = new GameObject(modelName); go.transform.SetPositionAndRotation(new Vector3(xPos, 0, 0), Quaternion.Euler(-90, 90, 0)); if (header.numFrames > 1) diff --git a/engine/UniQuake/gl_uniquake.c b/engine/UniQuake/gl_uniquake.c index 05daafb..395d080 100644 --- a/engine/UniQuake/gl_uniquake.c +++ b/engine/UniQuake/gl_uniquake.c @@ -10,7 +10,7 @@ typedef struct unity_glcalls_s { void *target; - int(*UploadAliasModel)(void *target, const char *name, vec3_t mins, vec3_t maxs, aliashdr_t *aliashdr, maliasframedesc_t *frames, trivertx_t **poseVerts, mtriangle_t *triangles, stvert_t *stVerts); + int(*UploadAliasModel)(void *target, const char *name, aliashdr_t *aliashdr, maliasframedesc_t *frames, trivertx_t **poseVerts, mtriangle_t *triangles, stvert_t *stVerts); } unity_glcalls_t; const unity_glcalls_t *unity_glcalls; @@ -19,5 +19,5 @@ int UQ_GL_UploadAliasModel(qmodel_t *model, aliashdr_t *aliashdr, trivertx_t **p { // C# doesn't really understand this idea of a variable-length embedded array of structs, // so we pass along the pointer to the first frame struct which allows us to manually marshal the entire array. - return unity_glcalls->UploadAliasModel(unity_glcalls->target, model->name, model->mins, model->maxs, aliashdr, &aliashdr->frames[0], poseVerts, triangles, stVerts); + return unity_glcalls->UploadAliasModel(unity_glcalls->target, model->name, aliashdr, &aliashdr->frames[0], poseVerts, triangles, stVerts); }