using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using UnityEngine;
namespace FishNet.Serializing.Helping
{
///
/// Static class used for fast conversion of quaternion structs. Not thread safe!
///
[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);
//}
///
/// Credit to this man for converting gaffer games c code to c#
/// https://gist.github.com/fversnel/0497ad7ab3b81e0dc1dd
///
}
public enum ComponentType : uint
{
X = 0,
Y = 1,
Z = 2,
W = 3
}
}