126 lines
3.8 KiB
C#
126 lines
3.8 KiB
C#
|
|
|||
|
using System;
|
|||
|
using System.Runtime.CompilerServices;
|
|||
|
using System.Runtime.InteropServices;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace FishNet.Serializing.Helping
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Static class used for fast conversion of quaternion structs. Not thread safe!
|
|||
|
/// </summary>
|
|||
|
[StructLayout(LayoutKind.Explicit)]
|
|||
|
public struct QuaternionConverter
|
|||
|
{
|
|||
|
// [FieldOffset(0)]
|
|||
|
// public Quaternion Q;
|
|||
|
// [FieldOffset(0)]
|
|||
|
// public Quaternion64 Q64;
|
|||
|
// [FieldOffset(0)]
|
|||
|
// public Quaternion128 Q128;
|
|||
|
|
|||
|
// public static QuaternionConverter StaticRef = new QuaternionConverter();
|
|||
|
|
|||
|
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|||
|
// public static Quaternion64 QtoQ64(Quaternion quaternion64)
|
|||
|
// {
|
|||
|
// StaticRef.Q = quaternion64;
|
|||
|
// return StaticRef.Q64;
|
|||
|
// }
|
|||
|
|
|||
|
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|||
|
// public static Quaternion Q64toQ(Quaternion64 quaternion)
|
|||
|
// {
|
|||
|
// StaticRef.Q64 = quaternion;
|
|||
|
// return StaticRef.Q;
|
|||
|
// }
|
|||
|
|
|||
|
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|||
|
// public static Quaternion128 QtoQ128(Quaternion quaternion128)
|
|||
|
// {
|
|||
|
// StaticRef.Q = quaternion128;
|
|||
|
// return StaticRef.Q128;
|
|||
|
// }
|
|||
|
|
|||
|
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|||
|
// public static Quaternion Q128toQ(Quaternion128 quaternion)
|
|||
|
// {
|
|||
|
// StaticRef.Q128 = quaternion;
|
|||
|
// return StaticRef.Q;
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
//public struct Quaternion64
|
|||
|
//{
|
|||
|
// public float x;
|
|||
|
// public float y;
|
|||
|
// public float z;
|
|||
|
// public float w;
|
|||
|
|
|||
|
// public Quaternion64(float x, float y, float z, float w)
|
|||
|
// {
|
|||
|
// this.x = x;
|
|||
|
// this.y = y;
|
|||
|
// this.z = z;
|
|||
|
// this.w = w;
|
|||
|
// }
|
|||
|
|
|||
|
// public Quaternion64(Quaternion q)
|
|||
|
// {
|
|||
|
// this.x = q.x;
|
|||
|
// this.y = q.y;
|
|||
|
// this.z = q.z;
|
|||
|
// this.w = q.w;
|
|||
|
// }
|
|||
|
|
|||
|
// /*[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|||
|
// public static implicit operator Quaternion64(Quaternion q) => new Quaternion64(q);
|
|||
|
|
|||
|
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|||
|
// public static implicit operator Quaternion(Quaternion64 q) => new Quaternion(q.x, q.y, q.z, q.w);*/
|
|||
|
//}
|
|||
|
|
|||
|
//public struct Quaternion128
|
|||
|
//{
|
|||
|
// public float x;
|
|||
|
// public float y;
|
|||
|
// public float z;
|
|||
|
// public float w;
|
|||
|
// public Quaternion128(float x, float y, float z, float w)
|
|||
|
// {
|
|||
|
// this.x = x;
|
|||
|
// this.y = y;
|
|||
|
// this.z = z;
|
|||
|
// this.w = w;
|
|||
|
// }
|
|||
|
|
|||
|
// public Quaternion128(Quaternion q)
|
|||
|
// {
|
|||
|
// x = q.x;
|
|||
|
// y = q.y;
|
|||
|
// z = q.z;
|
|||
|
// w = q.w;
|
|||
|
// }
|
|||
|
|
|||
|
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|||
|
// public static implicit operator Quaternion128(Quaternion q) => new Quaternion128(q);
|
|||
|
|
|||
|
// [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|||
|
// public static implicit operator Quaternion(Quaternion128 q) => new Quaternion(q.x, q.y, q.z, q.w);
|
|||
|
//}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Credit to this man for converting gaffer games c code to c#
|
|||
|
/// https://gist.github.com/fversnel/0497ad7ab3b81e0dc1dd
|
|||
|
/// </summary>
|
|||
|
}
|
|||
|
|
|||
|
public enum ComponentType : uint
|
|||
|
{
|
|||
|
X = 0,
|
|||
|
Y = 1,
|
|||
|
Z = 2,
|
|||
|
W = 3
|
|||
|
}
|
|||
|
|
|||
|
}
|