97 lines
3.0 KiB
C#

using System;
using System.Runtime.InteropServices;
using UnityEngine;
namespace PrimeTween {
[Serializable]
internal struct ValueContainerStartEnd {
[SerializeField] internal TweenType tweenType; // todo HideInInspector?
[SerializeField, Tooltip(Constants.startFromCurrentTooltip)] internal bool startFromCurrent;
[SerializeField, Tooltip(Constants.startValueTooltip)] internal ValueContainer startValue;
[SerializeField, Tooltip(Constants.endValueTooltip)] internal ValueContainer endValue;
}
[Serializable, StructLayout(LayoutKind.Explicit)]
internal struct ValueContainer {
// todo check if it was possible to modify ValueContainer in Debug Inspector before
[FieldOffset(sizeof(float) * 0), SerializeField] internal float x;
[FieldOffset(sizeof(float) * 1), SerializeField] internal float y;
[FieldOffset(sizeof(float) * 2), SerializeField] internal float z;
[FieldOffset(sizeof(float) * 3), SerializeField] internal float w;
[FieldOffset(0), NonSerialized] internal float FloatVal;
[FieldOffset(0), NonSerialized] internal Color ColorVal;
[FieldOffset(0), NonSerialized] internal Vector2 Vector2Val;
[FieldOffset(0), NonSerialized] internal Vector3 Vector3Val;
[FieldOffset(0), NonSerialized] internal Vector4 Vector4Val;
[FieldOffset(0), NonSerialized] internal Quaternion QuaternionVal;
[FieldOffset(0), NonSerialized] internal Rect RectVal;
[FieldOffset(0), NonSerialized] internal double DoubleVal;
internal void CopyFrom(ref float val) {
x = val;
y = 0f;
z = 0f;
w = 0f;
}
internal void CopyFrom(ref Color val) {
x = val.r;
y = val.g;
z = val.b;
w = val.a;
}
internal void CopyFrom(ref Vector2 val) {
x = val.x;
y = val.y;
z = 0f;
w = 0f;
}
internal void CopyFrom(ref Vector3 val) {
x = val.x;
y = val.y;
z = val.z;
w = 0f;
}
internal void CopyFrom(ref Vector4 val) {
x = val.x;
y = val.y;
z = val.z;
w = val.w;
}
internal void CopyFrom(ref Rect val) {
x = val.x;
y = val.y;
z = val.width;
w = val.height;
}
internal void CopyFrom(ref Quaternion val) {
x = val.x;
y = val.y;
z = val.z;
w = val.w;
}
internal void CopyFrom(ref double val) {
DoubleVal = val;
z = 0f;
w = 0f;
}
internal void Reset() {
x = y = z = w = 0f;
}
internal float this[int i] {
get => Vector4Val[i];
set => Vector4Val[i] = value;
}
public override string ToString() => Vector4Val.ToString();
}
}