diff --git a/Raylib-cs/Raylib.cs b/Raylib-cs/Raylib.cs index 2924d67..0e00751 100644 --- a/Raylib-cs/Raylib.cs +++ b/Raylib-cs/Raylib.cs @@ -6,6 +6,7 @@ using System.Security; using System.Text; using System.Text.Unicode; using System.Xml; +using Microsoft.Toolkit.HighPerformance; namespace Raylib_cs { @@ -2001,7 +2002,25 @@ namespace Raylib_cs /// Load model animations from file [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - public static extern ModelAnimation* LoadModelAnimations(string fileName, ref int animsCount); + public static extern ModelAnimation* LoadModelAnimations(byte* fileName, int* animsCount); + + public static ReadOnlySpan LoadModelAnimations(Utf8String fileName, ref int animsCount) + { + fixed (byte* p1 = fileName) + { + fixed (int* p2 = &animsCount) + { + var model = LoadModelAnimations(p1, p2); + + if ((IntPtr)model == IntPtr.Zero) + { + throw new ApplicationException("Failed to load animation"); + } + + return new ReadOnlySpan(model, animsCount); + } + } + } /// Update model animation pose [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] diff --git a/Raylib-cs/types/Model.cs b/Raylib-cs/types/Model.cs index 76c795d..8997f24 100644 --- a/Raylib-cs/types/Model.cs +++ b/Raylib-cs/types/Model.cs @@ -1,6 +1,8 @@ using System; +using System.Collections.Generic; using System.Numerics; using System.Runtime.InteropServices; +using Microsoft.Toolkit.HighPerformance; namespace Raylib_cs { @@ -45,17 +47,17 @@ namespace Raylib_cs /// /// Meshes array (Mesh *) /// - public Mesh *meshes; + public Mesh* meshes; /// /// Materials array (Material *) /// - public Material *materials; + public Material* materials; /// /// Mesh material number (int *) /// - public int *meshMaterial; + public int* meshMaterial; /// /// Number of bones @@ -65,38 +67,44 @@ namespace Raylib_cs /// /// Bones information (skeleton, BoneInfo *) /// - public BoneInfo *bones; + public BoneInfo* bones; /// /// Bones base transformation (pose, Transform *) /// - public Transform *bindPose; + public Transform* bindPose; } /// /// Model animation /// [StructLayout(LayoutKind.Sequential)] - public unsafe struct ModelAnimation + public readonly unsafe struct ModelAnimation { /// /// Number of bones /// - public int boneCount; + public readonly int boneCount; /// /// Number of animation frames /// - public int frameCount; + public readonly int frameCount; /// /// Bones information (skeleton, BoneInfo *) /// - public BoneInfo *bones; + public readonly BoneInfo* bones; + + /// + public ReadOnlySpan BoneInfo => new(bones, boneCount); /// /// Poses array by frame (Transform **) /// - public Transform *framePoses; + public readonly Transform** framePoses; + + /// + public ReadOnlySpan2D FramePoses => new(framePoses, frameCount,boneCount,sizeof(Transform)); } -} +} \ No newline at end of file