diff options
Diffstat (limited to 'modules/mono/glue/Managed/Files')
39 files changed, 0 insertions, 8549 deletions
diff --git a/modules/mono/glue/Managed/Files/AABB.cs b/modules/mono/glue/Managed/Files/AABB.cs deleted file mode 100644 index 6a4f785551..0000000000 --- a/modules/mono/glue/Managed/Files/AABB.cs +++ /dev/null @@ -1,489 +0,0 @@ -// file: core/math/aabb.h -// commit: 7ad14e7a3e6f87ddc450f7e34621eb5200808451 -// file: core/math/aabb.cpp -// commit: bd282ff43f23fe845f29a3e25c8efc01bd65ffb0 -// file: core/variant_call.cpp -// commit: 5ad9be4c24e9d7dc5672fdc42cea896622fe5685 -using System; -using System.Runtime.InteropServices; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - [Serializable] - [StructLayout(LayoutKind.Sequential)] - public struct AABB : IEquatable<AABB> - { - private Vector3 _position; - private Vector3 _size; - - public Vector3 Position - { - get { return _position; } - set { _position = value; } - } - - public Vector3 Size - { - get { return _size; } - set { _size = value; } - } - - public Vector3 End - { - get { return _position + _size; } - set { _size = value - _position; } - } - - public bool Encloses(AABB with) - { - Vector3 src_min = _position; - Vector3 src_max = _position + _size; - Vector3 dst_min = with._position; - Vector3 dst_max = with._position + with._size; - - return src_min.x <= dst_min.x && - src_max.x > dst_max.x && - src_min.y <= dst_min.y && - src_max.y > dst_max.y && - src_min.z <= dst_min.z && - src_max.z > dst_max.z; - } - - public AABB Expand(Vector3 point) - { - Vector3 begin = _position; - Vector3 end = _position + _size; - - if (point.x < begin.x) - begin.x = point.x; - if (point.y < begin.y) - begin.y = point.y; - if (point.z < begin.z) - begin.z = point.z; - - if (point.x > end.x) - end.x = point.x; - if (point.y > end.y) - end.y = point.y; - if (point.z > end.z) - end.z = point.z; - - return new AABB(begin, end - begin); - } - - public real_t GetArea() - { - return _size.x * _size.y * _size.z; - } - - public Vector3 GetEndpoint(int idx) - { - switch (idx) - { - case 0: - return new Vector3(_position.x, _position.y, _position.z); - case 1: - return new Vector3(_position.x, _position.y, _position.z + _size.z); - case 2: - return new Vector3(_position.x, _position.y + _size.y, _position.z); - case 3: - return new Vector3(_position.x, _position.y + _size.y, _position.z + _size.z); - case 4: - return new Vector3(_position.x + _size.x, _position.y, _position.z); - case 5: - return new Vector3(_position.x + _size.x, _position.y, _position.z + _size.z); - case 6: - return new Vector3(_position.x + _size.x, _position.y + _size.y, _position.z); - case 7: - return new Vector3(_position.x + _size.x, _position.y + _size.y, _position.z + _size.z); - default: - throw new ArgumentOutOfRangeException(nameof(idx), String.Format("Index is {0}, but a value from 0 to 7 is expected.", idx)); - } - } - - public Vector3 GetLongestAxis() - { - var axis = new Vector3(1f, 0f, 0f); - real_t max_size = _size.x; - - if (_size.y > max_size) - { - axis = new Vector3(0f, 1f, 0f); - max_size = _size.y; - } - - if (_size.z > max_size) - { - axis = new Vector3(0f, 0f, 1f); - } - - return axis; - } - - public Vector3.Axis GetLongestAxisIndex() - { - var axis = Vector3.Axis.X; - real_t max_size = _size.x; - - if (_size.y > max_size) - { - axis = Vector3.Axis.Y; - max_size = _size.y; - } - - if (_size.z > max_size) - { - axis = Vector3.Axis.Z; - } - - return axis; - } - - public real_t GetLongestAxisSize() - { - real_t max_size = _size.x; - - if (_size.y > max_size) - max_size = _size.y; - - if (_size.z > max_size) - max_size = _size.z; - - return max_size; - } - - public Vector3 GetShortestAxis() - { - var axis = new Vector3(1f, 0f, 0f); - real_t max_size = _size.x; - - if (_size.y < max_size) - { - axis = new Vector3(0f, 1f, 0f); - max_size = _size.y; - } - - if (_size.z < max_size) - { - axis = new Vector3(0f, 0f, 1f); - } - - return axis; - } - - public Vector3.Axis GetShortestAxisIndex() - { - var axis = Vector3.Axis.X; - real_t max_size = _size.x; - - if (_size.y < max_size) - { - axis = Vector3.Axis.Y; - max_size = _size.y; - } - - if (_size.z < max_size) - { - axis = Vector3.Axis.Z; - } - - return axis; - } - - public real_t GetShortestAxisSize() - { - real_t max_size = _size.x; - - if (_size.y < max_size) - max_size = _size.y; - - if (_size.z < max_size) - max_size = _size.z; - - return max_size; - } - - public Vector3 GetSupport(Vector3 dir) - { - Vector3 half_extents = _size * 0.5f; - Vector3 ofs = _position + half_extents; - - return ofs + new Vector3( - dir.x > 0f ? -half_extents.x : half_extents.x, - dir.y > 0f ? -half_extents.y : half_extents.y, - dir.z > 0f ? -half_extents.z : half_extents.z); - } - - public AABB Grow(real_t by) - { - var res = this; - - res._position.x -= by; - res._position.y -= by; - res._position.z -= by; - res._size.x += 2.0f * by; - res._size.y += 2.0f * by; - res._size.z += 2.0f * by; - - return res; - } - - public bool HasNoArea() - { - return _size.x <= 0f || _size.y <= 0f || _size.z <= 0f; - } - - public bool HasNoSurface() - { - return _size.x <= 0f && _size.y <= 0f && _size.z <= 0f; - } - - public bool HasPoint(Vector3 point) - { - if (point.x < _position.x) - return false; - if (point.y < _position.y) - return false; - if (point.z < _position.z) - return false; - if (point.x > _position.x + _size.x) - return false; - if (point.y > _position.y + _size.y) - return false; - if (point.z > _position.z + _size.z) - return false; - - return true; - } - - public AABB Intersection(AABB with) - { - Vector3 src_min = _position; - Vector3 src_max = _position + _size; - Vector3 dst_min = with._position; - Vector3 dst_max = with._position + with._size; - - Vector3 min, max; - - if (src_min.x > dst_max.x || src_max.x < dst_min.x) - { - return new AABB(); - } - - min.x = src_min.x > dst_min.x ? src_min.x : dst_min.x; - max.x = src_max.x < dst_max.x ? src_max.x : dst_max.x; - - if (src_min.y > dst_max.y || src_max.y < dst_min.y) - { - return new AABB(); - } - - min.y = src_min.y > dst_min.y ? src_min.y : dst_min.y; - max.y = src_max.y < dst_max.y ? src_max.y : dst_max.y; - - if (src_min.z > dst_max.z || src_max.z < dst_min.z) - { - return new AABB(); - } - - min.z = src_min.z > dst_min.z ? src_min.z : dst_min.z; - max.z = src_max.z < dst_max.z ? src_max.z : dst_max.z; - - return new AABB(min, max - min); - } - - public bool Intersects(AABB with) - { - if (_position.x >= with._position.x + with._size.x) - return false; - if (_position.x + _size.x <= with._position.x) - return false; - if (_position.y >= with._position.y + with._size.y) - return false; - if (_position.y + _size.y <= with._position.y) - return false; - if (_position.z >= with._position.z + with._size.z) - return false; - if (_position.z + _size.z <= with._position.z) - return false; - - return true; - } - - public bool IntersectsPlane(Plane plane) - { - Vector3[] points = - { - new Vector3(_position.x, _position.y, _position.z), - new Vector3(_position.x, _position.y, _position.z + _size.z), - new Vector3(_position.x, _position.y + _size.y, _position.z), - new Vector3(_position.x, _position.y + _size.y, _position.z + _size.z), - new Vector3(_position.x + _size.x, _position.y, _position.z), - new Vector3(_position.x + _size.x, _position.y, _position.z + _size.z), - new Vector3(_position.x + _size.x, _position.y + _size.y, _position.z), - new Vector3(_position.x + _size.x, _position.y + _size.y, _position.z + _size.z) - }; - - bool over = false; - bool under = false; - - for (int i = 0; i < 8; i++) - { - if (plane.DistanceTo(points[i]) > 0) - over = true; - else - under = true; - } - - return under && over; - } - - public bool IntersectsSegment(Vector3 from, Vector3 to) - { - real_t min = 0f; - real_t max = 1f; - - for (int i = 0; i < 3; i++) - { - real_t segFrom = from[i]; - real_t segTo = to[i]; - real_t boxBegin = _position[i]; - real_t boxEnd = boxBegin + _size[i]; - real_t cmin, cmax; - - if (segFrom < segTo) - { - if (segFrom > boxEnd || segTo < boxBegin) - return false; - - real_t length = segTo - segFrom; - cmin = segFrom < boxBegin ? (boxBegin - segFrom) / length : 0f; - cmax = segTo > boxEnd ? (boxEnd - segFrom) / length : 1f; - } - else - { - if (segTo > boxEnd || segFrom < boxBegin) - return false; - - real_t length = segTo - segFrom; - cmin = segFrom > boxEnd ? (boxEnd - segFrom) / length : 0f; - cmax = segTo < boxBegin ? (boxBegin - segFrom) / length : 1f; - } - - if (cmin > min) - { - min = cmin; - } - - if (cmax < max) - max = cmax; - if (max < min) - return false; - } - - return true; - } - - public AABB Merge(AABB with) - { - Vector3 beg1 = _position; - Vector3 beg2 = with._position; - var end1 = new Vector3(_size.x, _size.y, _size.z) + beg1; - var end2 = new Vector3(with._size.x, with._size.y, with._size.z) + beg2; - - var min = new Vector3( - beg1.x < beg2.x ? beg1.x : beg2.x, - beg1.y < beg2.y ? beg1.y : beg2.y, - beg1.z < beg2.z ? beg1.z : beg2.z - ); - - var max = new Vector3( - end1.x > end2.x ? end1.x : end2.x, - end1.y > end2.y ? end1.y : end2.y, - end1.z > end2.z ? end1.z : end2.z - ); - - return new AABB(min, max - min); - } - - // Constructors - public AABB(Vector3 position, Vector3 size) - { - _position = position; - _size = size; - } - public AABB(Vector3 position, real_t width, real_t height, real_t depth) - { - _position = position; - _size = new Vector3(width, height, depth); - } - public AABB(real_t x, real_t y, real_t z, Vector3 size) - { - _position = new Vector3(x, y, z); - _size = size; - } - public AABB(real_t x, real_t y, real_t z, real_t width, real_t height, real_t depth) - { - _position = new Vector3(x, y, z); - _size = new Vector3(width, height, depth); - } - - public static bool operator ==(AABB left, AABB right) - { - return left.Equals(right); - } - - public static bool operator !=(AABB left, AABB right) - { - return !left.Equals(right); - } - - public override bool Equals(object obj) - { - if (obj is AABB) - { - return Equals((AABB)obj); - } - - return false; - } - - public bool Equals(AABB other) - { - return _position == other._position && _size == other._size; - } - - public bool IsEqualApprox(AABB other) - { - return _position.IsEqualApprox(other._position) && _size.IsEqualApprox(other._size); - } - - public override int GetHashCode() - { - return _position.GetHashCode() ^ _size.GetHashCode(); - } - - public override string ToString() - { - return String.Format("{0} - {1}", new object[] - { - _position.ToString(), - _size.ToString() - }); - } - - public string ToString(string format) - { - return String.Format("{0} - {1}", new object[] - { - _position.ToString(format), - _size.ToString(format) - }); - } - } -} diff --git a/modules/mono/glue/Managed/Files/Array.cs b/modules/mono/glue/Managed/Files/Array.cs deleted file mode 100644 index 0e7b0362e0..0000000000 --- a/modules/mono/glue/Managed/Files/Array.cs +++ /dev/null @@ -1,367 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -namespace Godot.Collections -{ - class ArraySafeHandle : SafeHandle - { - public ArraySafeHandle(IntPtr handle) : base(IntPtr.Zero, true) - { - this.handle = handle; - } - - public override bool IsInvalid - { - get - { - return handle == IntPtr.Zero; - } - } - - protected override bool ReleaseHandle() - { - Array.godot_icall_Array_Dtor(handle); - return true; - } - } - - public class Array : IList, IDisposable - { - ArraySafeHandle safeHandle; - bool disposed = false; - - public Array() - { - safeHandle = new ArraySafeHandle(godot_icall_Array_Ctor()); - } - - public Array(IEnumerable collection) : this() - { - if (collection == null) - throw new NullReferenceException($"Parameter '{nameof(collection)} cannot be null.'"); - - MarshalUtils.EnumerableToArray(collection, GetPtr()); - } - - internal Array(ArraySafeHandle handle) - { - safeHandle = handle; - } - - internal Array(IntPtr handle) - { - safeHandle = new ArraySafeHandle(handle); - } - - internal IntPtr GetPtr() - { - if (disposed) - throw new ObjectDisposedException(GetType().FullName); - - return safeHandle.DangerousGetHandle(); - } - - public Error Resize(int newSize) - { - return godot_icall_Array_Resize(GetPtr(), newSize); - } - - // IDisposable - - public void Dispose() - { - if (disposed) - return; - - if (safeHandle != null) - { - safeHandle.Dispose(); - safeHandle = null; - } - - disposed = true; - } - - // IList - - public bool IsReadOnly => false; - - public bool IsFixedSize => false; - - public object this[int index] - { - get => godot_icall_Array_At(GetPtr(), index); - set => godot_icall_Array_SetAt(GetPtr(), index, value); - } - - public int Add(object value) => godot_icall_Array_Add(GetPtr(), value); - - public bool Contains(object value) => godot_icall_Array_Contains(GetPtr(), value); - - public void Clear() => godot_icall_Array_Clear(GetPtr()); - - public int IndexOf(object value) => godot_icall_Array_IndexOf(GetPtr(), value); - - public void Insert(int index, object value) => godot_icall_Array_Insert(GetPtr(), index, value); - - public void Remove(object value) => godot_icall_Array_Remove(GetPtr(), value); - - public void RemoveAt(int index) => godot_icall_Array_RemoveAt(GetPtr(), index); - - // ICollection - - public int Count => godot_icall_Array_Count(GetPtr()); - - public object SyncRoot => this; - - public bool IsSynchronized => false; - - public void CopyTo(System.Array array, int index) - { - if (array == null) - throw new ArgumentNullException(nameof(array), "Value cannot be null."); - - if (index < 0) - throw new ArgumentOutOfRangeException(nameof(index), "Number was less than the array's lower bound in the first dimension."); - - // Internal call may throw ArgumentException - godot_icall_Array_CopyTo(GetPtr(), array, index); - } - - // IEnumerable - - public IEnumerator GetEnumerator() - { - int count = Count; - - for (int i = 0; i < count; i++) - { - yield return this[i]; - } - } - - public override string ToString() - { - return godot_icall_Array_ToString(GetPtr()); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_Array_Ctor(); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_Dtor(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static object godot_icall_Array_At(IntPtr ptr, int index); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static object godot_icall_Array_At_Generic(IntPtr ptr, int index, int elemTypeEncoding, IntPtr elemTypeClass); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_SetAt(IntPtr ptr, int index, object value); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_Array_Count(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_Array_Add(IntPtr ptr, object item); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_Clear(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_Array_Contains(IntPtr ptr, object item); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_CopyTo(IntPtr ptr, System.Array array, int arrayIndex); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_Array_IndexOf(IntPtr ptr, object item); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_Insert(IntPtr ptr, int index, object item); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_Array_Remove(IntPtr ptr, object item); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_RemoveAt(IntPtr ptr, int index); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static Error godot_icall_Array_Resize(IntPtr ptr, int newSize); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Array_Generic_GetElementTypeInfo(Type elemType, out int elemTypeEncoding, out IntPtr elemTypeClass); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_Array_ToString(IntPtr ptr); - } - - public class Array<T> : IList<T>, ICollection<T>, IEnumerable<T> - { - Array objectArray; - - internal static int elemTypeEncoding; - internal static IntPtr elemTypeClass; - - static Array() - { - Array.godot_icall_Array_Generic_GetElementTypeInfo(typeof(T), out elemTypeEncoding, out elemTypeClass); - } - - public Array() - { - objectArray = new Array(); - } - - public Array(IEnumerable<T> collection) - { - if (collection == null) - throw new NullReferenceException($"Parameter '{nameof(collection)} cannot be null.'"); - - objectArray = new Array(collection); - } - - public Array(Array array) - { - objectArray = array; - } - - internal Array(IntPtr handle) - { - objectArray = new Array(handle); - } - - internal Array(ArraySafeHandle handle) - { - objectArray = new Array(handle); - } - - internal IntPtr GetPtr() - { - return objectArray.GetPtr(); - } - - public static explicit operator Array(Array<T> from) - { - return from.objectArray; - } - - public Error Resize(int newSize) - { - return objectArray.Resize(newSize); - } - - // IList<T> - - public T this[int index] - { - get - { - return (T)Array.godot_icall_Array_At_Generic(GetPtr(), index, elemTypeEncoding, elemTypeClass); - } - set - { - objectArray[index] = value; - } - } - - public int IndexOf(T item) - { - return objectArray.IndexOf(item); - } - - public void Insert(int index, T item) - { - objectArray.Insert(index, item); - } - - public void RemoveAt(int index) - { - objectArray.RemoveAt(index); - } - - // ICollection<T> - - public int Count - { - get - { - return objectArray.Count; - } - } - - public bool IsReadOnly - { - get - { - return objectArray.IsReadOnly; - } - } - - public void Add(T item) - { - objectArray.Add(item); - } - - public void Clear() - { - objectArray.Clear(); - } - - public bool Contains(T item) - { - return objectArray.Contains(item); - } - - public void CopyTo(T[] array, int arrayIndex) - { - if (array == null) - throw new ArgumentNullException(nameof(array), "Value cannot be null."); - - if (arrayIndex < 0) - throw new ArgumentOutOfRangeException(nameof(arrayIndex), "Number was less than the array's lower bound in the first dimension."); - - // TODO This may be quite slow because every element access is an internal call. - // It could be moved entirely to an internal call if we find out how to do the cast there. - - int count = objectArray.Count; - - if (array.Length < (arrayIndex + count)) - throw new ArgumentException("Destination array was not long enough. Check destIndex and length, and the array's lower bounds."); - - for (int i = 0; i < count; i++) - { - array[arrayIndex] = (T)this[i]; - arrayIndex++; - } - } - - public bool Remove(T item) - { - return Array.godot_icall_Array_Remove(GetPtr(), item); - } - - // IEnumerable<T> - - public IEnumerator<T> GetEnumerator() - { - int count = objectArray.Count; - - for (int i = 0; i < count; i++) - { - yield return (T)this[i]; - } - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public override string ToString() => objectArray.ToString(); - } -} diff --git a/modules/mono/glue/Managed/Files/Attributes/ExportAttribute.cs b/modules/mono/glue/Managed/Files/Attributes/ExportAttribute.cs deleted file mode 100644 index 6adf044886..0000000000 --- a/modules/mono/glue/Managed/Files/Attributes/ExportAttribute.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace Godot -{ - [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] - public class ExportAttribute : Attribute - { - private PropertyHint hint; - private string hintString; - - public ExportAttribute(PropertyHint hint = PropertyHint.None, string hintString = "") - { - this.hint = hint; - this.hintString = hintString; - } - } -} diff --git a/modules/mono/glue/Managed/Files/Attributes/GodotMethodAttribute.cs b/modules/mono/glue/Managed/Files/Attributes/GodotMethodAttribute.cs deleted file mode 100644 index 55848769d5..0000000000 --- a/modules/mono/glue/Managed/Files/Attributes/GodotMethodAttribute.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace Godot -{ - [AttributeUsage(AttributeTargets.Method)] - internal class GodotMethodAttribute : Attribute - { - private string methodName; - - public string MethodName { get { return methodName; } } - - public GodotMethodAttribute(string methodName) - { - this.methodName = methodName; - } - } -} diff --git a/modules/mono/glue/Managed/Files/Attributes/RPCAttributes.cs b/modules/mono/glue/Managed/Files/Attributes/RPCAttributes.cs deleted file mode 100644 index 1bf6d5199a..0000000000 --- a/modules/mono/glue/Managed/Files/Attributes/RPCAttributes.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; - -namespace Godot -{ - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] - public class RemoteAttribute : Attribute {} - - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] - public class SyncAttribute : Attribute {} - - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] - public class MasterAttribute : Attribute {} - - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] - public class PuppetAttribute : Attribute {} - - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] - public class SlaveAttribute : Attribute {} - - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] - public class RemoteSyncAttribute : Attribute {} - - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] - public class MasterSyncAttribute : Attribute {} - - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] - public class PuppetSyncAttribute : Attribute {} -} diff --git a/modules/mono/glue/Managed/Files/Attributes/SignalAttribute.cs b/modules/mono/glue/Managed/Files/Attributes/SignalAttribute.cs deleted file mode 100644 index 3957387be9..0000000000 --- a/modules/mono/glue/Managed/Files/Attributes/SignalAttribute.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace Godot -{ - [AttributeUsage(AttributeTargets.Delegate)] - public class SignalAttribute : Attribute - { - } -} diff --git a/modules/mono/glue/Managed/Files/Attributes/ToolAttribute.cs b/modules/mono/glue/Managed/Files/Attributes/ToolAttribute.cs deleted file mode 100644 index d0437409af..0000000000 --- a/modules/mono/glue/Managed/Files/Attributes/ToolAttribute.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace Godot -{ - [AttributeUsage(AttributeTargets.Class)] - public class ToolAttribute : Attribute {} -} diff --git a/modules/mono/glue/Managed/Files/Basis.cs b/modules/mono/glue/Managed/Files/Basis.cs deleted file mode 100644 index c5e62b77c8..0000000000 --- a/modules/mono/glue/Managed/Files/Basis.cs +++ /dev/null @@ -1,687 +0,0 @@ -using System; -using System.Runtime.InteropServices; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - [Serializable] - [StructLayout(LayoutKind.Sequential)] - public struct Basis : IEquatable<Basis> - { - // NOTE: x, y and z are public-only. Use Column0, Column1 and Column2 internally. - - /// <summary> - /// Returns the basis matrix’s x vector. - /// This is equivalent to <see cref="Column0"/>. - /// </summary> - public Vector3 x - { - get => Column0; - set => Column0 = value; - } - - /// <summary> - /// Returns the basis matrix’s y vector. - /// This is equivalent to <see cref="Column1"/>. - /// </summary> - public Vector3 y - { - get => Column1; - set => Column1 = value; - } - - /// <summary> - /// Returns the basis matrix’s z vector. - /// This is equivalent to <see cref="Column2"/>. - /// </summary> - public Vector3 z - { - get => Column2; - set => Column2 = value; - } - - public Vector3 Row0; - public Vector3 Row1; - public Vector3 Row2; - - public Vector3 Column0 - { - get => new Vector3(Row0.x, Row1.x, Row2.x); - set - { - this.Row0.x = value.x; - this.Row1.x = value.y; - this.Row2.x = value.z; - } - } - public Vector3 Column1 - { - get => new Vector3(Row0.y, Row1.y, Row2.y); - set - { - this.Row0.y = value.x; - this.Row1.y = value.y; - this.Row2.y = value.z; - } - } - public Vector3 Column2 - { - get => new Vector3(Row0.z, Row1.z, Row2.z); - set - { - this.Row0.z = value.x; - this.Row1.z = value.y; - this.Row2.z = value.z; - } - } - - public Vector3 Scale - { - get - { - real_t detSign = Mathf.Sign(Determinant()); - return detSign * new Vector3 - ( - new Vector3(this.Row0[0], this.Row1[0], this.Row2[0]).Length(), - new Vector3(this.Row0[1], this.Row1[1], this.Row2[1]).Length(), - new Vector3(this.Row0[2], this.Row1[2], this.Row2[2]).Length() - ); - } - } - - public Vector3 this[int columnIndex] - { - get - { - switch (columnIndex) - { - case 0: - return Column0; - case 1: - return Column1; - case 2: - return Column2; - default: - throw new IndexOutOfRangeException(); - } - } - set - { - switch (columnIndex) - { - case 0: - Column0 = value; - return; - case 1: - Column1 = value; - return; - case 2: - Column2 = value; - return; - default: - throw new IndexOutOfRangeException(); - } - } - } - - public real_t this[int columnIndex, int rowIndex] - { - get - { - switch (columnIndex) - { - case 0: - return Column0[rowIndex]; - case 1: - return Column1[rowIndex]; - case 2: - return Column2[rowIndex]; - default: - throw new IndexOutOfRangeException(); - } - } - set - { - switch (columnIndex) - { - case 0: - { - var column0 = Column0; - column0[rowIndex] = value; - Column0 = column0; - return; - } - case 1: - { - var column1 = Column1; - column1[rowIndex] = value; - Column1 = column1; - return; - } - case 2: - { - var column2 = Column2; - column2[rowIndex] = value; - Column2 = column2; - return; - } - default: - throw new IndexOutOfRangeException(); - } - } - } - - internal Quat RotationQuat() - { - Basis orthonormalizedBasis = Orthonormalized(); - real_t det = orthonormalizedBasis.Determinant(); - if (det < 0) - { - // Ensure that the determinant is 1, such that result is a proper rotation matrix which can be represented by Euler angles. - orthonormalizedBasis = orthonormalizedBasis.Scaled(Vector3.NegOne); - } - - return orthonormalizedBasis.Quat(); - } - - internal void SetQuatScale(Quat quat, Vector3 scale) - { - SetDiagonal(scale); - Rotate(quat); - } - - private void Rotate(Quat quat) - { - this *= new Basis(quat); - } - - private void SetDiagonal(Vector3 diagonal) - { - Row0 = new Vector3(diagonal.x, 0, 0); - Row1 = new Vector3(0, diagonal.y, 0); - Row2 = new Vector3(0, 0, diagonal.z); - } - - public real_t Determinant() - { - real_t cofac00 = Row1[1] * Row2[2] - Row1[2] * Row2[1]; - real_t cofac10 = Row1[2] * Row2[0] - Row1[0] * Row2[2]; - real_t cofac20 = Row1[0] * Row2[1] - Row1[1] * Row2[0]; - - return Row0[0] * cofac00 + Row0[1] * cofac10 + Row0[2] * cofac20; - } - - public Vector3 GetEuler() - { - Basis m = Orthonormalized(); - - Vector3 euler; - euler.z = 0.0f; - - real_t mzy = m.Row1[2]; - - if (mzy < 1.0f) - { - if (mzy > -1.0f) - { - euler.x = Mathf.Asin(-mzy); - euler.y = Mathf.Atan2(m.Row0[2], m.Row2[2]); - euler.z = Mathf.Atan2(m.Row1[0], m.Row1[1]); - } - else - { - euler.x = Mathf.Pi * 0.5f; - euler.y = -Mathf.Atan2(-m.Row0[1], m.Row0[0]); - } - } - else - { - euler.x = -Mathf.Pi * 0.5f; - euler.y = -Mathf.Atan2(-m.Row0[1], m.Row0[0]); - } - - return euler; - } - - public Vector3 GetRow(int index) - { - switch (index) - { - case 0: - return Row0; - case 1: - return Row1; - case 2: - return Row2; - default: - throw new IndexOutOfRangeException(); - } - } - - public void SetRow(int index, Vector3 value) - { - switch (index) - { - case 0: - Row0 = value; - return; - case 1: - Row1 = value; - return; - case 2: - Row2 = value; - return; - default: - throw new IndexOutOfRangeException(); - } - } - - public Vector3 GetColumn(int index) - { - return this[index]; - } - - public void SetColumn(int index, Vector3 value) - { - this[index] = value; - } - - [Obsolete("GetAxis is deprecated. Use GetColumn instead.")] - public Vector3 GetAxis(int axis) - { - return new Vector3(this.Row0[axis], this.Row1[axis], this.Row2[axis]); - } - - public int GetOrthogonalIndex() - { - var orth = this; - - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - { - var row = orth.GetRow(i); - - real_t v = row[j]; - - if (v > 0.5f) - v = 1.0f; - else if (v < -0.5f) - v = -1.0f; - else - v = 0f; - - row[j] = v; - - orth.SetRow(i, row); - } - } - - for (int i = 0; i < 24; i++) - { - if (orth == _orthoBases[i]) - return i; - } - - return 0; - } - - public Basis Inverse() - { - real_t cofac00 = Row1[1] * Row2[2] - Row1[2] * Row2[1]; - real_t cofac10 = Row1[2] * Row2[0] - Row1[0] * Row2[2]; - real_t cofac20 = Row1[0] * Row2[1] - Row1[1] * Row2[0]; - - real_t det = Row0[0] * cofac00 + Row0[1] * cofac10 + Row0[2] * cofac20; - - if (det == 0) - throw new InvalidOperationException("Matrix determinant is zero and cannot be inverted."); - - real_t detInv = 1.0f / det; - - real_t cofac01 = Row0[2] * Row2[1] - Row0[1] * Row2[2]; - real_t cofac02 = Row0[1] * Row1[2] - Row0[2] * Row1[1]; - real_t cofac11 = Row0[0] * Row2[2] - Row0[2] * Row2[0]; - real_t cofac12 = Row0[2] * Row1[0] - Row0[0] * Row1[2]; - real_t cofac21 = Row0[1] * Row2[0] - Row0[0] * Row2[1]; - real_t cofac22 = Row0[0] * Row1[1] - Row0[1] * Row1[0]; - - return new Basis - ( - cofac00 * detInv, cofac01 * detInv, cofac02 * detInv, - cofac10 * detInv, cofac11 * detInv, cofac12 * detInv, - cofac20 * detInv, cofac21 * detInv, cofac22 * detInv - ); - } - - public Basis Orthonormalized() - { - Vector3 column0 = GetColumn(0); - Vector3 column1 = GetColumn(1); - Vector3 column2 = GetColumn(2); - - column0.Normalize(); - column1 = column1 - column0 * column0.Dot(column1); - column1.Normalize(); - column2 = column2 - column0 * column0.Dot(column2) - column1 * column1.Dot(column2); - column2.Normalize(); - - return new Basis(column0, column1, column2); - } - - public Basis Rotated(Vector3 axis, real_t phi) - { - return new Basis(axis, phi) * this; - } - - public Basis Scaled(Vector3 scale) - { - var b = this; - b.Row0 *= scale.x; - b.Row1 *= scale.y; - b.Row2 *= scale.z; - return b; - } - - public real_t Tdotx(Vector3 with) - { - return this.Row0[0] * with[0] + this.Row1[0] * with[1] + this.Row2[0] * with[2]; - } - - public real_t Tdoty(Vector3 with) - { - return this.Row0[1] * with[0] + this.Row1[1] * with[1] + this.Row2[1] * with[2]; - } - - public real_t Tdotz(Vector3 with) - { - return this.Row0[2] * with[0] + this.Row1[2] * with[1] + this.Row2[2] * with[2]; - } - - public Basis Transposed() - { - var tr = this; - - real_t temp = tr.Row0[1]; - tr.Row0[1] = tr.Row1[0]; - tr.Row1[0] = temp; - - temp = tr.Row0[2]; - tr.Row0[2] = tr.Row2[0]; - tr.Row2[0] = temp; - - temp = tr.Row1[2]; - tr.Row1[2] = tr.Row2[1]; - tr.Row2[1] = temp; - - return tr; - } - - public Vector3 Xform(Vector3 v) - { - return new Vector3 - ( - this.Row0.Dot(v), - this.Row1.Dot(v), - this.Row2.Dot(v) - ); - } - - public Vector3 XformInv(Vector3 v) - { - return new Vector3 - ( - this.Row0[0] * v.x + this.Row1[0] * v.y + this.Row2[0] * v.z, - this.Row0[1] * v.x + this.Row1[1] * v.y + this.Row2[1] * v.z, - this.Row0[2] * v.x + this.Row1[2] * v.y + this.Row2[2] * v.z - ); - } - - public Quat Quat() - { - real_t trace = Row0[0] + Row1[1] + Row2[2]; - - if (trace > 0.0f) - { - real_t s = Mathf.Sqrt(trace + 1.0f) * 2f; - real_t inv_s = 1f / s; - return new Quat( - (Row2[1] - Row1[2]) * inv_s, - (Row0[2] - Row2[0]) * inv_s, - (Row1[0] - Row0[1]) * inv_s, - s * 0.25f - ); - } - - if (Row0[0] > Row1[1] && Row0[0] > Row2[2]) - { - real_t s = Mathf.Sqrt(Row0[0] - Row1[1] - Row2[2] + 1.0f) * 2f; - real_t inv_s = 1f / s; - return new Quat( - s * 0.25f, - (Row0[1] + Row1[0]) * inv_s, - (Row0[2] + Row2[0]) * inv_s, - (Row2[1] - Row1[2]) * inv_s - ); - } - - if (Row1[1] > Row2[2]) - { - real_t s = Mathf.Sqrt(-Row0[0] + Row1[1] - Row2[2] + 1.0f) * 2f; - real_t inv_s = 1f / s; - return new Quat( - (Row0[1] + Row1[0]) * inv_s, - s * 0.25f, - (Row1[2] + Row2[1]) * inv_s, - (Row0[2] - Row2[0]) * inv_s - ); - } - else - { - real_t s = Mathf.Sqrt(-Row0[0] - Row1[1] + Row2[2] + 1.0f) * 2f; - real_t inv_s = 1f / s; - return new Quat( - (Row0[2] + Row2[0]) * inv_s, - (Row1[2] + Row2[1]) * inv_s, - s * 0.25f, - (Row1[0] - Row0[1]) * inv_s - ); - } - } - - private static readonly Basis[] _orthoBases = { - new Basis(1f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 1f), - new Basis(0f, -1f, 0f, 1f, 0f, 0f, 0f, 0f, 1f), - new Basis(-1f, 0f, 0f, 0f, -1f, 0f, 0f, 0f, 1f), - new Basis(0f, 1f, 0f, -1f, 0f, 0f, 0f, 0f, 1f), - new Basis(1f, 0f, 0f, 0f, 0f, -1f, 0f, 1f, 0f), - new Basis(0f, 0f, 1f, 1f, 0f, 0f, 0f, 1f, 0f), - new Basis(-1f, 0f, 0f, 0f, 0f, 1f, 0f, 1f, 0f), - new Basis(0f, 0f, -1f, -1f, 0f, 0f, 0f, 1f, 0f), - new Basis(1f, 0f, 0f, 0f, -1f, 0f, 0f, 0f, -1f), - new Basis(0f, 1f, 0f, 1f, 0f, 0f, 0f, 0f, -1f), - new Basis(-1f, 0f, 0f, 0f, 1f, 0f, 0f, 0f, -1f), - new Basis(0f, -1f, 0f, -1f, 0f, 0f, 0f, 0f, -1f), - new Basis(1f, 0f, 0f, 0f, 0f, 1f, 0f, -1f, 0f), - new Basis(0f, 0f, -1f, 1f, 0f, 0f, 0f, -1f, 0f), - new Basis(-1f, 0f, 0f, 0f, 0f, -1f, 0f, -1f, 0f), - new Basis(0f, 0f, 1f, -1f, 0f, 0f, 0f, -1f, 0f), - new Basis(0f, 0f, 1f, 0f, 1f, 0f, -1f, 0f, 0f), - new Basis(0f, -1f, 0f, 0f, 0f, 1f, -1f, 0f, 0f), - new Basis(0f, 0f, -1f, 0f, -1f, 0f, -1f, 0f, 0f), - new Basis(0f, 1f, 0f, 0f, 0f, -1f, -1f, 0f, 0f), - new Basis(0f, 0f, 1f, 0f, -1f, 0f, 1f, 0f, 0f), - new Basis(0f, 1f, 0f, 0f, 0f, 1f, 1f, 0f, 0f), - new Basis(0f, 0f, -1f, 0f, 1f, 0f, 1f, 0f, 0f), - new Basis(0f, -1f, 0f, 0f, 0f, -1f, 1f, 0f, 0f) - }; - - private static readonly Basis _identity = new Basis(1, 0, 0, 0, 1, 0, 0, 0, 1); - private static readonly Basis _flipX = new Basis(-1, 0, 0, 0, 1, 0, 0, 0, 1); - private static readonly Basis _flipY = new Basis(1, 0, 0, 0, -1, 0, 0, 0, 1); - private static readonly Basis _flipZ = new Basis(1, 0, 0, 0, 1, 0, 0, 0, -1); - - public static Basis Identity { get { return _identity; } } - public static Basis FlipX { get { return _flipX; } } - public static Basis FlipY { get { return _flipY; } } - public static Basis FlipZ { get { return _flipZ; } } - - public Basis(Quat quat) - { - real_t s = 2.0f / quat.LengthSquared; - - real_t xs = quat.x * s; - real_t ys = quat.y * s; - real_t zs = quat.z * s; - real_t wx = quat.w * xs; - real_t wy = quat.w * ys; - real_t wz = quat.w * zs; - real_t xx = quat.x * xs; - real_t xy = quat.x * ys; - real_t xz = quat.x * zs; - real_t yy = quat.y * ys; - real_t yz = quat.y * zs; - real_t zz = quat.z * zs; - - Row0 = new Vector3(1.0f - (yy + zz), xy - wz, xz + wy); - Row1 = new Vector3(xy + wz, 1.0f - (xx + zz), yz - wx); - Row2 = new Vector3(xz - wy, yz + wx, 1.0f - (xx + yy)); - } - - public Basis(Vector3 euler) - { - real_t c; - real_t s; - - c = Mathf.Cos(euler.x); - s = Mathf.Sin(euler.x); - var xmat = new Basis(1, 0, 0, 0, c, -s, 0, s, c); - - c = Mathf.Cos(euler.y); - s = Mathf.Sin(euler.y); - var ymat = new Basis(c, 0, s, 0, 1, 0, -s, 0, c); - - c = Mathf.Cos(euler.z); - s = Mathf.Sin(euler.z); - var zmat = new Basis(c, -s, 0, s, c, 0, 0, 0, 1); - - this = ymat * xmat * zmat; - } - - public Basis(Vector3 axis, real_t phi) - { - Vector3 axisSq = new Vector3(axis.x * axis.x, axis.y * axis.y, axis.z * axis.z); - real_t cosine = Mathf.Cos(phi); - Row0.x = axisSq.x + cosine * (1.0f - axisSq.x); - Row1.y = axisSq.y + cosine * (1.0f - axisSq.y); - Row2.z = axisSq.z + cosine * (1.0f - axisSq.z); - - real_t sine = Mathf.Sin(phi); - real_t t = 1.0f - cosine; - - real_t xyzt = axis.x * axis.y * t; - real_t zyxs = axis.z * sine; - Row0.y = xyzt - zyxs; - Row1.x = xyzt + zyxs; - - xyzt = axis.x * axis.z * t; - zyxs = axis.y * sine; - Row0.z = xyzt + zyxs; - Row2.x = xyzt - zyxs; - - xyzt = axis.y * axis.z * t; - zyxs = axis.x * sine; - Row1.z = xyzt - zyxs; - Row2.y = xyzt + zyxs; - } - - public Basis(Vector3 column0, Vector3 column1, Vector3 column2) - { - Row0 = new Vector3(column0.x, column1.x, column2.x); - Row1 = new Vector3(column0.y, column1.y, column2.y); - Row2 = new Vector3(column0.z, column1.z, column2.z); - // Same as: - // Column0 = column0; - // Column1 = column1; - // Column2 = column2; - // We need to assign the struct fields here first so we can't do it that way... - } - - // Arguments are named such that xy is equal to calling x.y - internal Basis(real_t xx, real_t yx, real_t zx, real_t xy, real_t yy, real_t zy, real_t xz, real_t yz, real_t zz) - { - Row0 = new Vector3(xx, yx, zx); - Row1 = new Vector3(xy, yy, zy); - Row2 = new Vector3(xz, yz, zz); - } - - public static Basis operator *(Basis left, Basis right) - { - return new Basis - ( - right.Tdotx(left.Row0), right.Tdoty(left.Row0), right.Tdotz(left.Row0), - right.Tdotx(left.Row1), right.Tdoty(left.Row1), right.Tdotz(left.Row1), - right.Tdotx(left.Row2), right.Tdoty(left.Row2), right.Tdotz(left.Row2) - ); - } - - public static bool operator ==(Basis left, Basis right) - { - return left.Equals(right); - } - - public static bool operator !=(Basis left, Basis right) - { - return !left.Equals(right); - } - - public override bool Equals(object obj) - { - if (obj is Basis) - { - return Equals((Basis)obj); - } - - return false; - } - - public bool Equals(Basis other) - { - return Row0.Equals(other.Row0) && Row1.Equals(other.Row1) && Row2.Equals(other.Row2); - } - - public bool IsEqualApprox(Basis other) - { - return Row0.IsEqualApprox(other.Row0) && Row1.IsEqualApprox(other.Row1) && Row2.IsEqualApprox(other.Row2); - } - - public override int GetHashCode() - { - return Row0.GetHashCode() ^ Row1.GetHashCode() ^ Row2.GetHashCode(); - } - - public override string ToString() - { - return String.Format("({0}, {1}, {2})", new object[] - { - Row0.ToString(), - Row1.ToString(), - Row2.ToString() - }); - } - - public string ToString(string format) - { - return String.Format("({0}, {1}, {2})", new object[] - { - Row0.ToString(format), - Row1.ToString(format), - Row2.ToString(format) - }); - } - } -} diff --git a/modules/mono/glue/Managed/Files/Color.cs b/modules/mono/glue/Managed/Files/Color.cs deleted file mode 100644 index df817e47e9..0000000000 --- a/modules/mono/glue/Managed/Files/Color.cs +++ /dev/null @@ -1,687 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Godot -{ - [Serializable] - [StructLayout(LayoutKind.Sequential)] - public struct Color : IEquatable<Color> - { - public float r; - public float g; - public float b; - public float a; - - public int r8 - { - get - { - return (int)Math.Round(r * 255.0f); - } - set - { - r = value / 255.0f; - } - } - - public int g8 - { - get - { - return (int)Math.Round(g * 255.0f); - } - set - { - g = value / 255.0f; - } - } - - public int b8 - { - get - { - return (int)Math.Round(b * 255.0f); - } - set - { - b = value / 255.0f; - } - } - - public int a8 - { - get - { - return (int)Math.Round(a * 255.0f); - } - set - { - a = value / 255.0f; - } - } - - public float h - { - get - { - float max = Math.Max(r, Math.Max(g, b)); - float min = Math.Min(r, Math.Min(g, b)); - - float delta = max - min; - - if (delta == 0) - return 0; - - float h; - - if (r == max) - h = (g - b) / delta; // Between yellow & magenta - else if (g == max) - h = 2 + (b - r) / delta; // Between cyan & yellow - else - h = 4 + (r - g) / delta; // Between magenta & cyan - - h /= 6.0f; - - if (h < 0) - h += 1.0f; - - return h; - } - set - { - this = FromHsv(value, s, v, a); - } - } - - public float s - { - get - { - float max = Math.Max(r, Math.Max(g, b)); - float min = Math.Min(r, Math.Min(g, b)); - - float delta = max - min; - - return max != 0 ? delta / max : 0; - } - set - { - this = FromHsv(h, value, v, a); - } - } - - public float v - { - get - { - return Math.Max(r, Math.Max(g, b)); - } - set - { - this = FromHsv(h, s, value, a); - } - } - - public static Color ColorN(string name, float alpha = 1f) - { - name = name.Replace(" ", String.Empty); - name = name.Replace("-", String.Empty); - name = name.Replace("_", String.Empty); - name = name.Replace("'", String.Empty); - name = name.Replace(".", String.Empty); - name = name.ToLower(); - - if (!Colors.namedColors.ContainsKey(name)) - { - throw new ArgumentOutOfRangeException($"Invalid Color Name: {name}"); - } - - Color color = Colors.namedColors[name]; - color.a = alpha; - return color; - } - - public float this[int index] - { - get - { - switch (index) - { - case 0: - return r; - case 1: - return g; - case 2: - return b; - case 3: - return a; - default: - throw new IndexOutOfRangeException(); - } - } - set - { - switch (index) - { - case 0: - r = value; - return; - case 1: - g = value; - return; - case 2: - b = value; - return; - case 3: - a = value; - return; - default: - throw new IndexOutOfRangeException(); - } - } - } - - public void ToHsv(out float hue, out float saturation, out float value) - { - float max = (float)Mathf.Max(r, Mathf.Max(g, b)); - float min = (float)Mathf.Min(r, Mathf.Min(g, b)); - - float delta = max - min; - - if (delta == 0) - { - hue = 0; - } - else - { - if (r == max) - hue = (g - b) / delta; // Between yellow & magenta - else if (g == max) - hue = 2 + (b - r) / delta; // Between cyan & yellow - else - hue = 4 + (r - g) / delta; // Between magenta & cyan - - hue /= 6.0f; - - if (hue < 0) - hue += 1.0f; - } - - saturation = max == 0 ? 0 : 1f - 1f * min / max; - value = max; - } - - public static Color FromHsv(float hue, float saturation, float value, float alpha = 1.0f) - { - if (saturation == 0) - { - // acp_hromatic (grey) - return new Color(value, value, value, alpha); - } - - int i; - float f, p, q, t; - - hue *= 6.0f; - hue %= 6f; - i = (int)hue; - - f = hue - i; - p = value * (1 - saturation); - q = value * (1 - saturation * f); - t = value * (1 - saturation * (1 - f)); - - switch (i) - { - case 0: // Red is the dominant color - return new Color(value, t, p, alpha); - case 1: // Green is the dominant color - return new Color(q, value, p, alpha); - case 2: - return new Color(p, value, t, alpha); - case 3: // Blue is the dominant color - return new Color(p, q, value, alpha); - case 4: - return new Color(t, p, value, alpha); - default: // (5) Red is the dominant color - return new Color(value, p, q, alpha); - } - } - - public Color Blend(Color over) - { - Color res; - - float sa = 1.0f - over.a; - res.a = a * sa + over.a; - - if (res.a == 0) - { - return new Color(0, 0, 0, 0); - } - - res.r = (r * a * sa + over.r * over.a) / res.a; - res.g = (g * a * sa + over.g * over.a) / res.a; - res.b = (b * a * sa + over.b * over.a) / res.a; - - return res; - } - - public Color Contrasted() - { - return new Color( - (r + 0.5f) % 1.0f, - (g + 0.5f) % 1.0f, - (b + 0.5f) % 1.0f, - a - ); - } - - public Color Darkened(float amount) - { - Color res = this; - res.r = res.r * (1.0f - amount); - res.g = res.g * (1.0f - amount); - res.b = res.b * (1.0f - amount); - return res; - } - - public Color Inverted() - { - return new Color( - 1.0f - r, - 1.0f - g, - 1.0f - b, - a - ); - } - - public Color Lightened(float amount) - { - Color res = this; - res.r = res.r + (1.0f - res.r) * amount; - res.g = res.g + (1.0f - res.g) * amount; - res.b = res.b + (1.0f - res.b) * amount; - return res; - } - - public Color LinearInterpolate(Color c, float t) - { - var res = this; - - res.r += t * (c.r - r); - res.g += t * (c.g - g); - res.b += t * (c.b - b); - res.a += t * (c.a - a); - - return res; - } - - public int ToAbgr32() - { - int c = (byte)Math.Round(a * 255); - c <<= 8; - c |= (byte)Math.Round(b * 255); - c <<= 8; - c |= (byte)Math.Round(g * 255); - c <<= 8; - c |= (byte)Math.Round(r * 255); - - return c; - } - - public long ToAbgr64() - { - long c = (ushort)Math.Round(a * 65535); - c <<= 16; - c |= (ushort)Math.Round(b * 65535); - c <<= 16; - c |= (ushort)Math.Round(g * 65535); - c <<= 16; - c |= (ushort)Math.Round(r * 65535); - - return c; - } - - public int ToArgb32() - { - int c = (byte)Math.Round(a * 255); - c <<= 8; - c |= (byte)Math.Round(r * 255); - c <<= 8; - c |= (byte)Math.Round(g * 255); - c <<= 8; - c |= (byte)Math.Round(b * 255); - - return c; - } - - public long ToArgb64() - { - long c = (ushort)Math.Round(a * 65535); - c <<= 16; - c |= (ushort)Math.Round(r * 65535); - c <<= 16; - c |= (ushort)Math.Round(g * 65535); - c <<= 16; - c |= (ushort)Math.Round(b * 65535); - - return c; - } - - public int ToRgba32() - { - int c = (byte)Math.Round(r * 255); - c <<= 8; - c |= (byte)Math.Round(g * 255); - c <<= 8; - c |= (byte)Math.Round(b * 255); - c <<= 8; - c |= (byte)Math.Round(a * 255); - - return c; - } - - public long ToRgba64() - { - long c = (ushort)Math.Round(r * 65535); - c <<= 16; - c |= (ushort)Math.Round(g * 65535); - c <<= 16; - c |= (ushort)Math.Round(b * 65535); - c <<= 16; - c |= (ushort)Math.Round(a * 65535); - - return c; - } - - public string ToHtml(bool includeAlpha = true) - { - var txt = string.Empty; - - txt += ToHex32(r); - txt += ToHex32(g); - txt += ToHex32(b); - - if (includeAlpha) - txt = ToHex32(a) + txt; - - return txt; - } - - // Constructors - public Color(float r, float g, float b, float a = 1.0f) - { - this.r = r; - this.g = g; - this.b = b; - this.a = a; - } - - public Color(int rgba) - { - a = (rgba & 0xFF) / 255.0f; - rgba >>= 8; - b = (rgba & 0xFF) / 255.0f; - rgba >>= 8; - g = (rgba & 0xFF) / 255.0f; - rgba >>= 8; - r = (rgba & 0xFF) / 255.0f; - } - - public Color(long rgba) - { - a = (rgba & 0xFFFF) / 65535.0f; - rgba >>= 16; - b = (rgba & 0xFFFF) / 65535.0f; - rgba >>= 16; - g = (rgba & 0xFFFF) / 65535.0f; - rgba >>= 16; - r = (rgba & 0xFFFF) / 65535.0f; - } - - private static int ParseCol8(string str, int ofs) - { - int ig = 0; - - for (int i = 0; i < 2; i++) - { - int c = str[i + ofs]; - int v; - - if (c >= '0' && c <= '9') - { - v = c - '0'; - } - else if (c >= 'a' && c <= 'f') - { - v = c - 'a'; - v += 10; - } - else if (c >= 'A' && c <= 'F') - { - v = c - 'A'; - v += 10; - } - else - { - return -1; - } - - if (i == 0) - ig += v * 16; - else - ig += v; - } - - return ig; - } - - private String ToHex32(float val) - { - int v = Mathf.RoundToInt(Mathf.Clamp(val * 255, 0, 255)); - - var ret = string.Empty; - - for (int i = 0; i < 2; i++) - { - char c; - int lv = v & 0xF; - - if (lv < 10) - c = (char)('0' + lv); - else - c = (char)('a' + lv - 10); - - v >>= 4; - ret = c + ret; - } - - return ret; - } - - internal static bool HtmlIsValid(string color) - { - if (color.Length == 0) - return false; - - if (color[0] == '#') - color = color.Substring(1, color.Length - 1); - - bool alpha; - - switch (color.Length) - { - case 8: - alpha = true; - break; - case 6: - alpha = false; - break; - default: - return false; - } - - if (alpha) - { - if (ParseCol8(color, 0) < 0) - return false; - } - - int from = alpha ? 2 : 0; - - if (ParseCol8(color, from + 0) < 0) - return false; - if (ParseCol8(color, from + 2) < 0) - return false; - if (ParseCol8(color, from + 4) < 0) - return false; - - return true; - } - - public static Color Color8(byte r8, byte g8, byte b8, byte a8) - { - return new Color(r8 / 255f, g8 / 255f, b8 / 255f, a8 / 255f); - } - - public Color(string rgba) - { - if (rgba.Length == 0) - { - r = 0f; - g = 0f; - b = 0f; - a = 1.0f; - return; - } - - if (rgba[0] == '#') - rgba = rgba.Substring(1); - - bool alpha; - - if (rgba.Length == 8) - { - alpha = true; - } - else if (rgba.Length == 6) - { - alpha = false; - } - else - { - throw new ArgumentOutOfRangeException("Invalid color code. Length is " + rgba.Length + " but a length of 6 or 8 is expected: " + rgba); - } - - if (alpha) - { - a = ParseCol8(rgba, 0) / 255f; - - if (a < 0) - throw new ArgumentOutOfRangeException("Invalid color code. Alpha part is not valid hexadecimal: " + rgba); - } - else - { - a = 1.0f; - } - - int from = alpha ? 2 : 0; - - r = ParseCol8(rgba, from + 0) / 255f; - - if (r < 0) - throw new ArgumentOutOfRangeException("Invalid color code. Red part is not valid hexadecimal: " + rgba); - - g = ParseCol8(rgba, from + 2) / 255f; - - if (g < 0) - throw new ArgumentOutOfRangeException("Invalid color code. Green part is not valid hexadecimal: " + rgba); - - b = ParseCol8(rgba, from + 4) / 255f; - - if (b < 0) - throw new ArgumentOutOfRangeException("Invalid color code. Blue part is not valid hexadecimal: " + rgba); - } - - public static bool operator ==(Color left, Color right) - { - return left.Equals(right); - } - - public static bool operator !=(Color left, Color right) - { - return !left.Equals(right); - } - - public static bool operator <(Color left, Color right) - { - if (Mathf.IsEqualApprox(left.r, right.r)) - { - if (Mathf.IsEqualApprox(left.g, right.g)) - { - if (Mathf.IsEqualApprox(left.b, right.b)) - return left.a < right.a; - return left.b < right.b; - } - - return left.g < right.g; - } - - return left.r < right.r; - } - - public static bool operator >(Color left, Color right) - { - if (Mathf.IsEqualApprox(left.r, right.r)) - { - if (Mathf.IsEqualApprox(left.g, right.g)) - { - if (Mathf.IsEqualApprox(left.b, right.b)) - return left.a > right.a; - return left.b > right.b; - } - - return left.g > right.g; - } - - return left.r > right.r; - } - - public override bool Equals(object obj) - { - if (obj is Color) - { - return Equals((Color)obj); - } - - return false; - } - - public bool Equals(Color other) - { - return r == other.r && g == other.g && b == other.b && a == other.a; - } - - public bool IsEqualApprox(Color other) - { - return Mathf.IsEqualApprox(r, other.r) && Mathf.IsEqualApprox(g, other.g) && Mathf.IsEqualApprox(b, other.b) && Mathf.IsEqualApprox(a, other.a); - } - - public override int GetHashCode() - { - return r.GetHashCode() ^ g.GetHashCode() ^ b.GetHashCode() ^ a.GetHashCode(); - } - - public override string ToString() - { - return String.Format("{0},{1},{2},{3}", r.ToString(), g.ToString(), b.ToString(), a.ToString()); - } - - public string ToString(string format) - { - return String.Format("{0},{1},{2},{3}", r.ToString(format), g.ToString(format), b.ToString(format), a.ToString(format)); - } - } -} diff --git a/modules/mono/glue/Managed/Files/Colors.cs b/modules/mono/glue/Managed/Files/Colors.cs deleted file mode 100644 index f41f5e9fc8..0000000000 --- a/modules/mono/glue/Managed/Files/Colors.cs +++ /dev/null @@ -1,305 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Godot -{ - public static class Colors - { - // Color names and values are derived from core/color_names.inc - internal static readonly Dictionary<string, Color> namedColors = new Dictionary<string, Color> { - {"aliceblue", new Color(0.94f, 0.97f, 1.00f)}, - {"antiquewhite", new Color(0.98f, 0.92f, 0.84f)}, - {"aqua", new Color(0.00f, 1.00f, 1.00f)}, - {"aquamarine", new Color(0.50f, 1.00f, 0.83f)}, - {"azure", new Color(0.94f, 1.00f, 1.00f)}, - {"beige", new Color(0.96f, 0.96f, 0.86f)}, - {"bisque", new Color(1.00f, 0.89f, 0.77f)}, - {"black", new Color(0.00f, 0.00f, 0.00f)}, - {"blanchedalmond", new Color(1.00f, 0.92f, 0.80f)}, - {"blue", new Color(0.00f, 0.00f, 1.00f)}, - {"blueviolet", new Color(0.54f, 0.17f, 0.89f)}, - {"brown", new Color(0.65f, 0.16f, 0.16f)}, - {"burlywood", new Color(0.87f, 0.72f, 0.53f)}, - {"cadetblue", new Color(0.37f, 0.62f, 0.63f)}, - {"chartreuse", new Color(0.50f, 1.00f, 0.00f)}, - {"chocolate", new Color(0.82f, 0.41f, 0.12f)}, - {"coral", new Color(1.00f, 0.50f, 0.31f)}, - {"cornflower", new Color(0.39f, 0.58f, 0.93f)}, - {"cornsilk", new Color(1.00f, 0.97f, 0.86f)}, - {"crimson", new Color(0.86f, 0.08f, 0.24f)}, - {"cyan", new Color(0.00f, 1.00f, 1.00f)}, - {"darkblue", new Color(0.00f, 0.00f, 0.55f)}, - {"darkcyan", new Color(0.00f, 0.55f, 0.55f)}, - {"darkgoldenrod", new Color(0.72f, 0.53f, 0.04f)}, - {"darkgray", new Color(0.66f, 0.66f, 0.66f)}, - {"darkgreen", new Color(0.00f, 0.39f, 0.00f)}, - {"darkkhaki", new Color(0.74f, 0.72f, 0.42f)}, - {"darkmagenta", new Color(0.55f, 0.00f, 0.55f)}, - {"darkolivegreen", new Color(0.33f, 0.42f, 0.18f)}, - {"darkorange", new Color(1.00f, 0.55f, 0.00f)}, - {"darkorchid", new Color(0.60f, 0.20f, 0.80f)}, - {"darkred", new Color(0.55f, 0.00f, 0.00f)}, - {"darksalmon", new Color(0.91f, 0.59f, 0.48f)}, - {"darkseagreen", new Color(0.56f, 0.74f, 0.56f)}, - {"darkslateblue", new Color(0.28f, 0.24f, 0.55f)}, - {"darkslategray", new Color(0.18f, 0.31f, 0.31f)}, - {"darkturquoise", new Color(0.00f, 0.81f, 0.82f)}, - {"darkviolet", new Color(0.58f, 0.00f, 0.83f)}, - {"deeppink", new Color(1.00f, 0.08f, 0.58f)}, - {"deepskyblue", new Color(0.00f, 0.75f, 1.00f)}, - {"dimgray", new Color(0.41f, 0.41f, 0.41f)}, - {"dodgerblue", new Color(0.12f, 0.56f, 1.00f)}, - {"firebrick", new Color(0.70f, 0.13f, 0.13f)}, - {"floralwhite", new Color(1.00f, 0.98f, 0.94f)}, - {"forestgreen", new Color(0.13f, 0.55f, 0.13f)}, - {"fuchsia", new Color(1.00f, 0.00f, 1.00f)}, - {"gainsboro", new Color(0.86f, 0.86f, 0.86f)}, - {"ghostwhite", new Color(0.97f, 0.97f, 1.00f)}, - {"gold", new Color(1.00f, 0.84f, 0.00f)}, - {"goldenrod", new Color(0.85f, 0.65f, 0.13f)}, - {"gray", new Color(0.75f, 0.75f, 0.75f)}, - {"green", new Color(0.00f, 1.00f, 0.00f)}, - {"greenyellow", new Color(0.68f, 1.00f, 0.18f)}, - {"honeydew", new Color(0.94f, 1.00f, 0.94f)}, - {"hotpink", new Color(1.00f, 0.41f, 0.71f)}, - {"indianred", new Color(0.80f, 0.36f, 0.36f)}, - {"indigo", new Color(0.29f, 0.00f, 0.51f)}, - {"ivory", new Color(1.00f, 1.00f, 0.94f)}, - {"khaki", new Color(0.94f, 0.90f, 0.55f)}, - {"lavender", new Color(0.90f, 0.90f, 0.98f)}, - {"lavenderblush", new Color(1.00f, 0.94f, 0.96f)}, - {"lawngreen", new Color(0.49f, 0.99f, 0.00f)}, - {"lemonchiffon", new Color(1.00f, 0.98f, 0.80f)}, - {"lightblue", new Color(0.68f, 0.85f, 0.90f)}, - {"lightcoral", new Color(0.94f, 0.50f, 0.50f)}, - {"lightcyan", new Color(0.88f, 1.00f, 1.00f)}, - {"lightgoldenrod", new Color(0.98f, 0.98f, 0.82f)}, - {"lightgray", new Color(0.83f, 0.83f, 0.83f)}, - {"lightgreen", new Color(0.56f, 0.93f, 0.56f)}, - {"lightpink", new Color(1.00f, 0.71f, 0.76f)}, - {"lightsalmon", new Color(1.00f, 0.63f, 0.48f)}, - {"lightseagreen", new Color(0.13f, 0.70f, 0.67f)}, - {"lightskyblue", new Color(0.53f, 0.81f, 0.98f)}, - {"lightslategray", new Color(0.47f, 0.53f, 0.60f)}, - {"lightsteelblue", new Color(0.69f, 0.77f, 0.87f)}, - {"lightyellow", new Color(1.00f, 1.00f, 0.88f)}, - {"lime", new Color(0.00f, 1.00f, 0.00f)}, - {"limegreen", new Color(0.20f, 0.80f, 0.20f)}, - {"linen", new Color(0.98f, 0.94f, 0.90f)}, - {"magenta", new Color(1.00f, 0.00f, 1.00f)}, - {"maroon", new Color(0.69f, 0.19f, 0.38f)}, - {"mediumaquamarine", new Color(0.40f, 0.80f, 0.67f)}, - {"mediumblue", new Color(0.00f, 0.00f, 0.80f)}, - {"mediumorchid", new Color(0.73f, 0.33f, 0.83f)}, - {"mediumpurple", new Color(0.58f, 0.44f, 0.86f)}, - {"mediumseagreen", new Color(0.24f, 0.70f, 0.44f)}, - {"mediumslateblue", new Color(0.48f, 0.41f, 0.93f)}, - {"mediumspringgreen", new Color(0.00f, 0.98f, 0.60f)}, - {"mediumturquoise", new Color(0.28f, 0.82f, 0.80f)}, - {"mediumvioletred", new Color(0.78f, 0.08f, 0.52f)}, - {"midnightblue", new Color(0.10f, 0.10f, 0.44f)}, - {"mintcream", new Color(0.96f, 1.00f, 0.98f)}, - {"mistyrose", new Color(1.00f, 0.89f, 0.88f)}, - {"moccasin", new Color(1.00f, 0.89f, 0.71f)}, - {"navajowhite", new Color(1.00f, 0.87f, 0.68f)}, - {"navyblue", new Color(0.00f, 0.00f, 0.50f)}, - {"oldlace", new Color(0.99f, 0.96f, 0.90f)}, - {"olive", new Color(0.50f, 0.50f, 0.00f)}, - {"olivedrab", new Color(0.42f, 0.56f, 0.14f)}, - {"orange", new Color(1.00f, 0.65f, 0.00f)}, - {"orangered", new Color(1.00f, 0.27f, 0.00f)}, - {"orchid", new Color(0.85f, 0.44f, 0.84f)}, - {"palegoldenrod", new Color(0.93f, 0.91f, 0.67f)}, - {"palegreen", new Color(0.60f, 0.98f, 0.60f)}, - {"paleturquoise", new Color(0.69f, 0.93f, 0.93f)}, - {"palevioletred", new Color(0.86f, 0.44f, 0.58f)}, - {"papayawhip", new Color(1.00f, 0.94f, 0.84f)}, - {"peachpuff", new Color(1.00f, 0.85f, 0.73f)}, - {"peru", new Color(0.80f, 0.52f, 0.25f)}, - {"pink", new Color(1.00f, 0.75f, 0.80f)}, - {"plum", new Color(0.87f, 0.63f, 0.87f)}, - {"powderblue", new Color(0.69f, 0.88f, 0.90f)}, - {"purple", new Color(0.63f, 0.13f, 0.94f)}, - {"rebeccapurple", new Color(0.40f, 0.20f, 0.60f)}, - {"red", new Color(1.00f, 0.00f, 0.00f)}, - {"rosybrown", new Color(0.74f, 0.56f, 0.56f)}, - {"royalblue", new Color(0.25f, 0.41f, 0.88f)}, - {"saddlebrown", new Color(0.55f, 0.27f, 0.07f)}, - {"salmon", new Color(0.98f, 0.50f, 0.45f)}, - {"sandybrown", new Color(0.96f, 0.64f, 0.38f)}, - {"seagreen", new Color(0.18f, 0.55f, 0.34f)}, - {"seashell", new Color(1.00f, 0.96f, 0.93f)}, - {"sienna", new Color(0.63f, 0.32f, 0.18f)}, - {"silver", new Color(0.75f, 0.75f, 0.75f)}, - {"skyblue", new Color(0.53f, 0.81f, 0.92f)}, - {"slateblue", new Color(0.42f, 0.35f, 0.80f)}, - {"slategray", new Color(0.44f, 0.50f, 0.56f)}, - {"snow", new Color(1.00f, 0.98f, 0.98f)}, - {"springgreen", new Color(0.00f, 1.00f, 0.50f)}, - {"steelblue", new Color(0.27f, 0.51f, 0.71f)}, - {"tan", new Color(0.82f, 0.71f, 0.55f)}, - {"teal", new Color(0.00f, 0.50f, 0.50f)}, - {"thistle", new Color(0.85f, 0.75f, 0.85f)}, - {"tomato", new Color(1.00f, 0.39f, 0.28f)}, - {"transparent", new Color(1.00f, 1.00f, 1.00f, 0.00f)}, - {"turquoise", new Color(0.25f, 0.88f, 0.82f)}, - {"violet", new Color(0.93f, 0.51f, 0.93f)}, - {"webgreen", new Color(0.00f, 0.50f, 0.00f)}, - {"webgray", new Color(0.50f, 0.50f, 0.50f)}, - {"webmaroon", new Color(0.50f, 0.00f, 0.00f)}, - {"webpurple", new Color(0.50f, 0.00f, 0.50f)}, - {"wheat", new Color(0.96f, 0.87f, 0.70f)}, - {"white", new Color(1.00f, 1.00f, 1.00f)}, - {"whitesmoke", new Color(0.96f, 0.96f, 0.96f)}, - {"yellow", new Color(1.00f, 1.00f, 0.00f)}, - {"yellowgreen", new Color(0.60f, 0.80f, 0.20f)}, - }; - - public static Color AliceBlue { get { return namedColors["aliceblue"]; } } - public static Color AntiqueWhite { get { return namedColors["antiquewhite"]; } } - public static Color Aqua { get { return namedColors["aqua"]; } } - public static Color Aquamarine { get { return namedColors["aquamarine"]; } } - public static Color Azure { get { return namedColors["azure"]; } } - public static Color Beige { get { return namedColors["beige"]; } } - public static Color Bisque { get { return namedColors["bisque"]; } } - public static Color Black { get { return namedColors["black"]; } } - public static Color BlanchedAlmond { get { return namedColors["blanchedalmond"]; } } - public static Color Blue { get { return namedColors["blue"]; } } - public static Color BlueViolet { get { return namedColors["blueviolet"]; } } - public static Color Brown { get { return namedColors["brown"]; } } - public static Color BurlyWood { get { return namedColors["burlywood"]; } } - public static Color CadetBlue { get { return namedColors["cadetblue"]; } } - public static Color Chartreuse { get { return namedColors["chartreuse"]; } } - public static Color Chocolate { get { return namedColors["chocolate"]; } } - public static Color Coral { get { return namedColors["coral"]; } } - public static Color Cornflower { get { return namedColors["cornflower"]; } } - public static Color Cornsilk { get { return namedColors["cornsilk"]; } } - public static Color Crimson { get { return namedColors["crimson"]; } } - public static Color Cyan { get { return namedColors["cyan"]; } } - public static Color DarkBlue { get { return namedColors["darkblue"]; } } - public static Color DarkCyan { get { return namedColors["darkcyan"]; } } - public static Color DarkGoldenrod { get { return namedColors["darkgoldenrod"]; } } - public static Color DarkGray { get { return namedColors["darkgray"]; } } - public static Color DarkGreen { get { return namedColors["darkgreen"]; } } - public static Color DarkKhaki { get { return namedColors["darkkhaki"]; } } - public static Color DarkMagenta { get { return namedColors["darkmagenta"]; } } - public static Color DarkOliveGreen { get { return namedColors["darkolivegreen"]; } } - public static Color DarkOrange { get { return namedColors["darkorange"]; } } - public static Color DarkOrchid { get { return namedColors["darkorchid"]; } } - public static Color DarkRed { get { return namedColors["darkred"]; } } - public static Color DarkSalmon { get { return namedColors["darksalmon"]; } } - public static Color DarkSeaGreen { get { return namedColors["darkseagreen"]; } } - public static Color DarkSlateBlue { get { return namedColors["darkslateblue"]; } } - public static Color DarkSlateGray { get { return namedColors["darkslategray"]; } } - public static Color DarkTurquoise { get { return namedColors["darkturquoise"]; } } - public static Color DarkViolet { get { return namedColors["darkviolet"]; } } - public static Color DeepPink { get { return namedColors["deeppink"]; } } - public static Color DeepSkyBlue { get { return namedColors["deepskyblue"]; } } - public static Color DimGray { get { return namedColors["dimgray"]; } } - public static Color DodgerBlue { get { return namedColors["dodgerblue"]; } } - public static Color Firebrick { get { return namedColors["firebrick"]; } } - public static Color FloralWhite { get { return namedColors["floralwhite"]; } } - public static Color ForestGreen { get { return namedColors["forestgreen"]; } } - public static Color Fuchsia { get { return namedColors["fuchsia"]; } } - public static Color Gainsboro { get { return namedColors["gainsboro"]; } } - public static Color GhostWhite { get { return namedColors["ghostwhite"]; } } - public static Color Gold { get { return namedColors["gold"]; } } - public static Color Goldenrod { get { return namedColors["goldenrod"]; } } - public static Color Gray { get { return namedColors["gray"]; } } - public static Color Green { get { return namedColors["green"]; } } - public static Color GreenYellow { get { return namedColors["greenyellow"]; } } - public static Color Honeydew { get { return namedColors["honeydew"]; } } - public static Color HotPink { get { return namedColors["hotpink"]; } } - public static Color IndianRed { get { return namedColors["indianred"]; } } - public static Color Indigo { get { return namedColors["indigo"]; } } - public static Color Ivory { get { return namedColors["ivory"]; } } - public static Color Khaki { get { return namedColors["khaki"]; } } - public static Color Lavender { get { return namedColors["lavender"]; } } - public static Color LavenderBlush { get { return namedColors["lavenderblush"]; } } - public static Color LawnGreen { get { return namedColors["lawngreen"]; } } - public static Color LemonChiffon { get { return namedColors["lemonchiffon"]; } } - public static Color LightBlue { get { return namedColors["lightblue"]; } } - public static Color LightCoral { get { return namedColors["lightcoral"]; } } - public static Color LightCyan { get { return namedColors["lightcyan"]; } } - public static Color LightGoldenrod { get { return namedColors["lightgoldenrod"]; } } - public static Color LightGray { get { return namedColors["lightgray"]; } } - public static Color LightGreen { get { return namedColors["lightgreen"]; } } - public static Color LightPink { get { return namedColors["lightpink"]; } } - public static Color LightSalmon { get { return namedColors["lightsalmon"]; } } - public static Color LightSeaGreen { get { return namedColors["lightseagreen"]; } } - public static Color LightSkyBlue { get { return namedColors["lightskyblue"]; } } - public static Color LightSlateGray { get { return namedColors["lightslategray"]; } } - public static Color LightSteelBlue { get { return namedColors["lightsteelblue"]; } } - public static Color LightYellow { get { return namedColors["lightyellow"]; } } - public static Color Lime { get { return namedColors["lime"]; } } - public static Color Limegreen { get { return namedColors["limegreen"]; } } - public static Color Linen { get { return namedColors["linen"]; } } - public static Color Magenta { get { return namedColors["magenta"]; } } - public static Color Maroon { get { return namedColors["maroon"]; } } - public static Color MediumAquamarine { get { return namedColors["mediumaquamarine"]; } } - public static Color MediumBlue { get { return namedColors["mediumblue"]; } } - public static Color MediumOrchid { get { return namedColors["mediumorchid"]; } } - public static Color MediumPurple { get { return namedColors["mediumpurple"]; } } - public static Color MediumSeaGreen { get { return namedColors["mediumseagreen"]; } } - public static Color MediumSlateBlue { get { return namedColors["mediumslateblue"]; } } - public static Color MediumSpringGreen { get { return namedColors["mediumspringgreen"]; } } - public static Color MediumTurquoise { get { return namedColors["mediumturquoise"]; } } - public static Color MediumVioletRed { get { return namedColors["mediumvioletred"]; } } - public static Color MidnightBlue { get { return namedColors["midnightblue"]; } } - public static Color MintCream { get { return namedColors["mintcream"]; } } - public static Color MistyRose { get { return namedColors["mistyrose"]; } } - public static Color Moccasin { get { return namedColors["moccasin"]; } } - public static Color NavajoWhite { get { return namedColors["navajowhite"]; } } - public static Color NavyBlue { get { return namedColors["navyblue"]; } } - public static Color OldLace { get { return namedColors["oldlace"]; } } - public static Color Olive { get { return namedColors["olive"]; } } - public static Color OliveDrab { get { return namedColors["olivedrab"]; } } - public static Color Orange { get { return namedColors["orange"]; } } - public static Color OrangeRed { get { return namedColors["orangered"]; } } - public static Color Orchid { get { return namedColors["orchid"]; } } - public static Color PaleGoldenrod { get { return namedColors["palegoldenrod"]; } } - public static Color PaleGreen { get { return namedColors["palegreen"]; } } - public static Color PaleTurquoise { get { return namedColors["paleturquoise"]; } } - public static Color PaleVioletRed { get { return namedColors["palevioletred"]; } } - public static Color PapayaWhip { get { return namedColors["papayawhip"]; } } - public static Color PeachPuff { get { return namedColors["peachpuff"]; } } - public static Color Peru { get { return namedColors["peru"]; } } - public static Color Pink { get { return namedColors["pink"]; } } - public static Color Plum { get { return namedColors["plum"]; } } - public static Color PowderBlue { get { return namedColors["powderblue"]; } } - public static Color Purple { get { return namedColors["purple"]; } } - public static Color RebeccaPurple { get { return namedColors["rebeccapurple"]; } } - public static Color Red { get { return namedColors["red"]; } } - public static Color RosyBrown { get { return namedColors["rosybrown"]; } } - public static Color RoyalBlue { get { return namedColors["royalblue"]; } } - public static Color SaddleBrown { get { return namedColors["saddlebrown"]; } } - public static Color Salmon { get { return namedColors["salmon"]; } } - public static Color SandyBrown { get { return namedColors["sandybrown"]; } } - public static Color SeaGreen { get { return namedColors["seagreen"]; } } - public static Color SeaShell { get { return namedColors["seashell"]; } } - public static Color Sienna { get { return namedColors["sienna"]; } } - public static Color Silver { get { return namedColors["silver"]; } } - public static Color SkyBlue { get { return namedColors["skyblue"]; } } - public static Color SlateBlue { get { return namedColors["slateblue"]; } } - public static Color SlateGray { get { return namedColors["slategray"]; } } - public static Color Snow { get { return namedColors["snow"]; } } - public static Color SpringGreen { get { return namedColors["springgreen"]; } } - public static Color SteelBlue { get { return namedColors["steelblue"]; } } - public static Color Tan { get { return namedColors["tan"]; } } - public static Color Teal { get { return namedColors["teal"]; } } - public static Color Thistle { get { return namedColors["thistle"]; } } - public static Color Tomato { get { return namedColors["tomato"]; } } - public static Color Transparent { get { return namedColors["transparent"]; } } - public static Color Turquoise { get { return namedColors["turquoise"]; } } - public static Color Violet { get { return namedColors["violet"]; } } - public static Color WebGreen { get { return namedColors["webgreen"]; } } - public static Color WebGray { get { return namedColors["webgray"]; } } - public static Color WebMaroon { get { return namedColors["webmaroon"]; } } - public static Color WebPurple { get { return namedColors["webpurple"]; } } - public static Color Wheat { get { return namedColors["wheat"]; } } - public static Color White { get { return namedColors["white"]; } } - public static Color WhiteSmoke { get { return namedColors["whitesmoke"]; } } - public static Color Yellow { get { return namedColors["yellow"]; } } - public static Color YellowGreen { get { return namedColors["yellowgreen"]; } } - } -} diff --git a/modules/mono/glue/Managed/Files/DebuggingUtils.cs b/modules/mono/glue/Managed/Files/DebuggingUtils.cs deleted file mode 100644 index edfe3464ec..0000000000 --- a/modules/mono/glue/Managed/Files/DebuggingUtils.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.Diagnostics; -using System.Reflection; -using System.Text; - -namespace Godot -{ - internal static class DebuggingUtils - { - internal static void AppendTypeName(this StringBuilder sb, Type type) - { - if (type.IsPrimitive) - sb.Append(type.Name); - else if (type == typeof(void)) - sb.Append("void"); - else - sb.Append(type); - - sb.Append(" "); - } - - public static void InstallTraceListener() - { - Trace.Listeners.Clear(); - Trace.Listeners.Add(new GodotTraceListener()); - } - - public static void GetStackFrameInfo(StackFrame frame, out string fileName, out int fileLineNumber, out string methodDecl) - { - fileName = frame.GetFileName(); - fileLineNumber = frame.GetFileLineNumber(); - - MethodBase methodBase = frame.GetMethod(); - - if (methodBase == null) - { - methodDecl = string.Empty; - return; - } - - var sb = new StringBuilder(); - - if (methodBase is MethodInfo) - sb.AppendTypeName(((MethodInfo)methodBase).ReturnType); - - sb.Append(methodBase.DeclaringType.FullName); - sb.Append("."); - sb.Append(methodBase.Name); - - if (methodBase.IsGenericMethod) - { - Type[] genericParams = methodBase.GetGenericArguments(); - - sb.Append("<"); - - for (int j = 0; j < genericParams.Length; j++) - { - if (j > 0) - sb.Append(", "); - - sb.AppendTypeName(genericParams[j]); - } - - sb.Append(">"); - } - - sb.Append("("); - - bool varArgs = (methodBase.CallingConvention & CallingConventions.VarArgs) != 0; - - ParameterInfo[] parameter = methodBase.GetParameters(); - - for (int i = 0; i < parameter.Length; i++) - { - if (i > 0) - sb.Append(", "); - - if (i == parameter.Length - 1 && varArgs) - sb.Append("params "); - - sb.AppendTypeName(parameter[i].ParameterType); - } - - sb.Append(")"); - - methodDecl = sb.ToString(); - } - } -} diff --git a/modules/mono/glue/Managed/Files/Dictionary.cs b/modules/mono/glue/Managed/Files/Dictionary.cs deleted file mode 100644 index 6ab8549a01..0000000000 --- a/modules/mono/glue/Managed/Files/Dictionary.cs +++ /dev/null @@ -1,456 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -namespace Godot.Collections -{ - class DictionarySafeHandle : SafeHandle - { - public DictionarySafeHandle(IntPtr handle) : base(IntPtr.Zero, true) - { - this.handle = handle; - } - - public override bool IsInvalid - { - get - { - return handle == IntPtr.Zero; - } - } - - protected override bool ReleaseHandle() - { - Dictionary.godot_icall_Dictionary_Dtor(handle); - return true; - } - } - - public class Dictionary : - IDictionary, - IDisposable - { - DictionarySafeHandle safeHandle; - bool disposed = false; - - public Dictionary() - { - safeHandle = new DictionarySafeHandle(godot_icall_Dictionary_Ctor()); - } - - public Dictionary(IDictionary dictionary) : this() - { - if (dictionary == null) - throw new NullReferenceException($"Parameter '{nameof(dictionary)} cannot be null.'"); - - MarshalUtils.IDictionaryToDictionary(dictionary, GetPtr()); - } - - internal Dictionary(DictionarySafeHandle handle) - { - safeHandle = handle; - } - - internal Dictionary(IntPtr handle) - { - safeHandle = new DictionarySafeHandle(handle); - } - - internal IntPtr GetPtr() - { - if (disposed) - throw new ObjectDisposedException(GetType().FullName); - - return safeHandle.DangerousGetHandle(); - } - - public void Dispose() - { - if (disposed) - return; - - if (safeHandle != null) - { - safeHandle.Dispose(); - safeHandle = null; - } - - disposed = true; - } - - // IDictionary - - public ICollection Keys - { - get - { - IntPtr handle = godot_icall_Dictionary_Keys(GetPtr()); - return new Array(new ArraySafeHandle(handle)); - } - } - - public ICollection Values - { - get - { - IntPtr handle = godot_icall_Dictionary_Values(GetPtr()); - return new Array(new ArraySafeHandle(handle)); - } - } - - public bool IsFixedSize => false; - - public bool IsReadOnly => false; - - public object this[object key] - { - get => godot_icall_Dictionary_GetValue(GetPtr(), key); - set => godot_icall_Dictionary_SetValue(GetPtr(), key, value); - } - - public void Add(object key, object value) => godot_icall_Dictionary_Add(GetPtr(), key, value); - - public void Clear() => godot_icall_Dictionary_Clear(GetPtr()); - - public bool Contains(object key) => godot_icall_Dictionary_ContainsKey(GetPtr(), key); - - public IDictionaryEnumerator GetEnumerator() => new DictionaryEnumerator(this); - - public void Remove(object key) => godot_icall_Dictionary_RemoveKey(GetPtr(), key); - - // ICollection - - public object SyncRoot => this; - - public bool IsSynchronized => false; - - public int Count => godot_icall_Dictionary_Count(GetPtr()); - - public void CopyTo(System.Array array, int index) - { - // TODO Can be done with single internal call - - if (array == null) - throw new ArgumentNullException(nameof(array), "Value cannot be null."); - - if (index < 0) - throw new ArgumentOutOfRangeException(nameof(index), "Number was less than the array's lower bound in the first dimension."); - - Array keys = (Array)Keys; - Array values = (Array)Values; - int count = Count; - - if (array.Length < (index + count)) - throw new ArgumentException("Destination array was not long enough. Check destIndex and length, and the array's lower bounds."); - - for (int i = 0; i < count; i++) - { - array.SetValue(new DictionaryEntry(keys[i], values[i]), index); - index++; - } - } - - // IEnumerable - - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); - - private class DictionaryEnumerator : IDictionaryEnumerator - { - Array keys; - Array values; - int count; - int index = -1; - - public DictionaryEnumerator(Dictionary dictionary) - { - // TODO 3 internal calls, can reduce to 1 - keys = (Array)dictionary.Keys; - values = (Array)dictionary.Values; - count = dictionary.Count; - } - - public object Current => Entry; - - public DictionaryEntry Entry => - // TODO 2 internal calls, can reduce to 1 - new DictionaryEntry(keys[index], values[index]); - - public object Key => Entry.Key; - - public object Value => Entry.Value; - - public bool MoveNext() - { - index++; - return index < count; - } - - public void Reset() - { - index = -1; - } - } - - public override string ToString() - { - return godot_icall_Dictionary_ToString(GetPtr()); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_Dictionary_Ctor(); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Dictionary_Dtor(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static object godot_icall_Dictionary_GetValue(IntPtr ptr, object key); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static object godot_icall_Dictionary_GetValue_Generic(IntPtr ptr, object key, int valTypeEncoding, IntPtr valTypeClass); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Dictionary_SetValue(IntPtr ptr, object key, object value); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_Dictionary_Keys(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_Dictionary_Values(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_Dictionary_Count(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Dictionary_Add(IntPtr ptr, object key, object value); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Dictionary_Clear(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_Dictionary_Contains(IntPtr ptr, object key, object value); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_Dictionary_ContainsKey(IntPtr ptr, object key); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_Dictionary_RemoveKey(IntPtr ptr, object key); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_Dictionary_Remove(IntPtr ptr, object key, object value); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_Dictionary_TryGetValue(IntPtr ptr, object key, out object value); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_Dictionary_TryGetValue_Generic(IntPtr ptr, object key, out object value, int valTypeEncoding, IntPtr valTypeClass); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Dictionary_Generic_GetValueTypeInfo(Type valueType, out int valTypeEncoding, out IntPtr valTypeClass); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_Dictionary_ToString(IntPtr ptr); - } - - public class Dictionary<TKey, TValue> : - IDictionary<TKey, TValue> - { - Dictionary objectDict; - - internal static int valTypeEncoding; - internal static IntPtr valTypeClass; - - static Dictionary() - { - Dictionary.godot_icall_Dictionary_Generic_GetValueTypeInfo(typeof(TValue), out valTypeEncoding, out valTypeClass); - } - - public Dictionary() - { - objectDict = new Dictionary(); - } - - public Dictionary(IDictionary<TKey, TValue> dictionary) - { - objectDict = new Dictionary(); - - if (dictionary == null) - throw new NullReferenceException($"Parameter '{nameof(dictionary)} cannot be null.'"); - - // TODO: Can be optimized - - IntPtr godotDictionaryPtr = GetPtr(); - - foreach (KeyValuePair<TKey, TValue> entry in dictionary) - { - Dictionary.godot_icall_Dictionary_Add(godotDictionaryPtr, entry.Key, entry.Value); - } - } - - public Dictionary(Dictionary dictionary) - { - objectDict = dictionary; - } - - internal Dictionary(IntPtr handle) - { - objectDict = new Dictionary(handle); - } - - internal Dictionary(DictionarySafeHandle handle) - { - objectDict = new Dictionary(handle); - } - - public static explicit operator Dictionary(Dictionary<TKey, TValue> from) - { - return from.objectDict; - } - - internal IntPtr GetPtr() - { - return objectDict.GetPtr(); - } - - // IDictionary<TKey, TValue> - - public TValue this[TKey key] - { - get - { - return (TValue)Dictionary.godot_icall_Dictionary_GetValue_Generic(objectDict.GetPtr(), key, valTypeEncoding, valTypeClass); - } - set - { - objectDict[key] = value; - } - } - - public ICollection<TKey> Keys - { - get - { - IntPtr handle = Dictionary.godot_icall_Dictionary_Keys(objectDict.GetPtr()); - return new Array<TKey>(new ArraySafeHandle(handle)); - } - } - - public ICollection<TValue> Values - { - get - { - IntPtr handle = Dictionary.godot_icall_Dictionary_Values(objectDict.GetPtr()); - return new Array<TValue>(new ArraySafeHandle(handle)); - } - } - - public void Add(TKey key, TValue value) - { - objectDict.Add(key, value); - } - - public bool ContainsKey(TKey key) - { - return objectDict.Contains(key); - } - - public bool Remove(TKey key) - { - return Dictionary.godot_icall_Dictionary_RemoveKey(GetPtr(), key); - } - - public bool TryGetValue(TKey key, out TValue value) - { - object retValue; - bool found = Dictionary.godot_icall_Dictionary_TryGetValue_Generic(GetPtr(), key, out retValue, valTypeEncoding, valTypeClass); - value = found ? (TValue)retValue : default(TValue); - return found; - } - - // ICollection<KeyValuePair<TKey, TValue>> - - public int Count - { - get - { - return objectDict.Count; - } - } - - public bool IsReadOnly - { - get - { - return objectDict.IsReadOnly; - } - } - - public void Add(KeyValuePair<TKey, TValue> item) - { - objectDict.Add(item.Key, item.Value); - } - - public void Clear() - { - objectDict.Clear(); - } - - public bool Contains(KeyValuePair<TKey, TValue> item) - { - return objectDict.Contains(new KeyValuePair<object, object>(item.Key, item.Value)); - } - - public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) - { - if (array == null) - throw new ArgumentNullException(nameof(array), "Value cannot be null."); - - if (arrayIndex < 0) - throw new ArgumentOutOfRangeException(nameof(arrayIndex), "Number was less than the array's lower bound in the first dimension."); - - // TODO 3 internal calls, can reduce to 1 - Array<TKey> keys = (Array<TKey>)Keys; - Array<TValue> values = (Array<TValue>)Values; - int count = Count; - - if (array.Length < (arrayIndex + count)) - throw new ArgumentException("Destination array was not long enough. Check destIndex and length, and the array's lower bounds."); - - for (int i = 0; i < count; i++) - { - // TODO 2 internal calls, can reduce to 1 - array[arrayIndex] = new KeyValuePair<TKey, TValue>(keys[i], values[i]); - arrayIndex++; - } - } - - public bool Remove(KeyValuePair<TKey, TValue> item) - { - return Dictionary.godot_icall_Dictionary_Remove(GetPtr(), item.Key, item.Value); ; - } - - // IEnumerable<KeyValuePair<TKey, TValue>> - - public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() - { - // TODO 3 internal calls, can reduce to 1 - Array<TKey> keys = (Array<TKey>)Keys; - Array<TValue> values = (Array<TValue>)Values; - int count = Count; - - for (int i = 0; i < count; i++) - { - // TODO 2 internal calls, can reduce to 1 - yield return new KeyValuePair<TKey, TValue>(keys[i], values[i]); - } - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public override string ToString() => objectDict.ToString(); - } -} diff --git a/modules/mono/glue/Managed/Files/Dispatcher.cs b/modules/mono/glue/Managed/Files/Dispatcher.cs deleted file mode 100644 index 072e0f20ff..0000000000 --- a/modules/mono/glue/Managed/Files/Dispatcher.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Runtime.CompilerServices; - -namespace Godot -{ - public static class Dispatcher - { - [MethodImpl(MethodImplOptions.InternalCall)] - private static extern GodotTaskScheduler godot_icall_DefaultGodotTaskScheduler(); - - public static GodotSynchronizationContext SynchronizationContext => - godot_icall_DefaultGodotTaskScheduler().Context; - } -} diff --git a/modules/mono/glue/Managed/Files/DynamicObject.cs b/modules/mono/glue/Managed/Files/DynamicObject.cs deleted file mode 100644 index a0f105d55e..0000000000 --- a/modules/mono/glue/Managed/Files/DynamicObject.cs +++ /dev/null @@ -1,213 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Dynamic; -using System.Linq.Expressions; -using System.Runtime.CompilerServices; - -namespace Godot -{ - /// <summary> - /// Represents an <see cref="Godot.Object"/> whose members can be dynamically accessed at runtime through the Variant API. - /// </summary> - /// <remarks> - /// <para> - /// The <see cref="Godot.DynamicGodotObject"/> class enables access to the Variant - /// members of a <see cref="Godot.Object"/> instance at runtime. - /// </para> - /// <para> - /// This allows accessing the class members using their original names in the engine as well as the members from the - /// script attached to the <see cref="Godot.Object"/>, regardless of the scripting language it was written in. - /// </para> - /// </remarks> - /// <example> - /// This sample shows how to use <see cref="Godot.DynamicGodotObject"/> to dynamically access the engine members of a <see cref="Godot.Object"/>. - /// <code> - /// dynamic sprite = GetNode("Sprite").DynamicGodotObject; - /// sprite.add_child(this); - /// - /// if ((sprite.hframes * sprite.vframes) > 0) - /// sprite.frame = 0; - /// </code> - /// </example> - /// <example> - /// This sample shows how to use <see cref="Godot.DynamicGodotObject"/> to dynamically access the members of the script attached to a <see cref="Godot.Object"/>. - /// <code> - /// dynamic childNode = GetNode("ChildNode").DynamicGodotObject; - /// - /// if (childNode.print_allowed) - /// { - /// childNode.message = "Hello from C#"; - /// childNode.print_message(3); - /// } - /// </code> - /// The <c>ChildNode</c> node has the following GDScript script attached: - /// <code> - /// // # ChildNode.gd - /// // var print_allowed = true - /// // var message = "" - /// // - /// // func print_message(times): - /// // for i in times: - /// // print(message) - /// </code> - /// </example> - public class DynamicGodotObject : DynamicObject - { - /// <summary> - /// Gets the <see cref="Godot.Object"/> associated with this <see cref="Godot.DynamicGodotObject"/>. - /// </summary> - public Object Value { get; } - - /// <summary> - /// Initializes a new instance of the <see cref="Godot.DynamicGodotObject"/> class. - /// </summary> - /// <param name="godotObject"> - /// The <see cref="Godot.Object"/> that will be associated with this <see cref="Godot.DynamicGodotObject"/>. - /// </param> - /// <exception cref="System.ArgumentNullException"> - /// Thrown when the <paramref name="godotObject"/> parameter is null. - /// </exception> - public DynamicGodotObject(Object godotObject) - { - if (godotObject == null) - throw new ArgumentNullException(nameof(godotObject)); - - this.Value = godotObject; - } - - public override IEnumerable<string> GetDynamicMemberNames() - { - return godot_icall_DynamicGodotObject_SetMemberList(Object.GetPtr(Value)); - } - - public override bool TryBinaryOperation(BinaryOperationBinder binder, object arg, out object result) - { - switch (binder.Operation) - { - case ExpressionType.Equal: - case ExpressionType.NotEqual: - if (binder.ReturnType == typeof(bool) || binder.ReturnType.IsAssignableFrom(typeof(bool))) - { - if (arg == null) - { - bool boolResult = Object.IsInstanceValid(Value); - - if (binder.Operation == ExpressionType.Equal) - boolResult = !boolResult; - - result = boolResult; - return true; - } - - if (arg is Object other) - { - bool boolResult = (Value == other); - - if (binder.Operation == ExpressionType.NotEqual) - boolResult = !boolResult; - - result = boolResult; - return true; - } - } - - break; - default: - // We're not implementing operators <, <=, >, and >= (LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual). - // These are used on the actual pointers in variant_op.cpp. It's better to let the user do that explicitly. - break; - } - - return base.TryBinaryOperation(binder, arg, out result); - } - - public override bool TryConvert(ConvertBinder binder, out object result) - { - if (binder.Type == typeof(Object)) - { - result = Value; - return true; - } - - if (typeof(Object).IsAssignableFrom(binder.Type)) - { - // Throws InvalidCastException when the cast fails - result = Convert.ChangeType(Value, binder.Type); - return true; - } - - return base.TryConvert(binder, out result); - } - - public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) - { - if (indexes.Length == 1) - { - if (indexes[0] is string name) - { - return godot_icall_DynamicGodotObject_GetMember(Object.GetPtr(Value), name, out result); - } - } - - return base.TryGetIndex(binder, indexes, out result); - } - - public override bool TryGetMember(GetMemberBinder binder, out object result) - { - return godot_icall_DynamicGodotObject_GetMember(Object.GetPtr(Value), binder.Name, out result); - } - - public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) - { - return godot_icall_DynamicGodotObject_InvokeMember(Object.GetPtr(Value), binder.Name, args, out result); - } - - public override bool TrySetIndex(SetIndexBinder binder, object[] indexes, object value) - { - if (indexes.Length == 1) - { - if (indexes[0] is string name) - { - return godot_icall_DynamicGodotObject_SetMember(Object.GetPtr(Value), name, value); - } - } - - return base.TrySetIndex(binder, indexes, value); - } - - public override bool TrySetMember(SetMemberBinder binder, object value) - { - return godot_icall_DynamicGodotObject_SetMember(Object.GetPtr(Value), binder.Name, value); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string[] godot_icall_DynamicGodotObject_SetMemberList(IntPtr godotObject); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_DynamicGodotObject_InvokeMember(IntPtr godotObject, string name, object[] args, out object result); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_DynamicGodotObject_GetMember(IntPtr godotObject, string name, out object result); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_DynamicGodotObject_SetMember(IntPtr godotObject, string name, object value); - - #region We don't override these methods - - // Looks like this is not usable from C# - //public override bool TryCreateInstance(CreateInstanceBinder binder, object[] args, out object result); - - // Object members cannot be deleted - //public override bool TryDeleteIndex(DeleteIndexBinder binder, object[] indexes); - //public override bool TryDeleteMember(DeleteMemberBinder binder); - - // Invocation on the object itself, e.g.: obj(param) - //public override bool TryInvoke(InvokeBinder binder, object[] args, out object result); - - // No unnary operations to handle - //public override bool TryUnaryOperation(UnaryOperationBinder binder, out object result); - - #endregion - } -} diff --git a/modules/mono/glue/Managed/Files/Extensions/NodeExtensions.cs b/modules/mono/glue/Managed/Files/Extensions/NodeExtensions.cs deleted file mode 100644 index 5023725f17..0000000000 --- a/modules/mono/glue/Managed/Files/Extensions/NodeExtensions.cs +++ /dev/null @@ -1,45 +0,0 @@ -namespace Godot -{ - public partial class Node - { - public T GetNode<T>(NodePath path) where T : class - { - return (T)(object)GetNode(path); - } - - public T GetNodeOrNull<T>(NodePath path) where T : class - { - return GetNode(path) as T; - } - - public T GetChild<T>(int idx) where T : class - { - return (T)(object)GetChild(idx); - } - - public T GetChildOrNull<T>(int idx) where T : class - { - return GetChild(idx) as T; - } - - public T GetOwner<T>() where T : class - { - return (T)(object)Owner; - } - - public T GetOwnerOrNull<T>() where T : class - { - return Owner as T; - } - - public T GetParent<T>() where T : class - { - return (T)(object)GetParent(); - } - - public T GetParentOrNull<T>() where T : class - { - return GetParent() as T; - } - } -} diff --git a/modules/mono/glue/Managed/Files/Extensions/ObjectExtensions.cs b/modules/mono/glue/Managed/Files/Extensions/ObjectExtensions.cs deleted file mode 100644 index 9ef0959750..0000000000 --- a/modules/mono/glue/Managed/Files/Extensions/ObjectExtensions.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace Godot -{ - public partial class Object - { - public static bool IsInstanceValid(Object instance) - { - return instance != null && instance.NativeInstance != IntPtr.Zero; - } - - public static WeakRef WeakRef(Object obj) - { - return godot_icall_Object_weakref(Object.GetPtr(obj)); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static WeakRef godot_icall_Object_weakref(IntPtr obj); - } -} diff --git a/modules/mono/glue/Managed/Files/Extensions/ResourceLoaderExtensions.cs b/modules/mono/glue/Managed/Files/Extensions/ResourceLoaderExtensions.cs deleted file mode 100644 index 684d160b57..0000000000 --- a/modules/mono/glue/Managed/Files/Extensions/ResourceLoaderExtensions.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Godot -{ - public static partial class ResourceLoader - { - public static T Load<T>(string path) where T : class - { - return (T)(object)Load(path); - } - } -} diff --git a/modules/mono/glue/Managed/Files/GD.cs b/modules/mono/glue/Managed/Files/GD.cs deleted file mode 100644 index 2068099ac6..0000000000 --- a/modules/mono/glue/Managed/Files/GD.cs +++ /dev/null @@ -1,266 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -// TODO: Add comments describing what this class does. It is not obvious. - -namespace Godot -{ - public static partial class GD - { - public static object Bytes2Var(byte[] bytes, bool allow_objects = false) - { - return godot_icall_GD_bytes2var(bytes, allow_objects); - } - - public static object Convert(object what, Variant.Type type) - { - return godot_icall_GD_convert(what, type); - } - - public static real_t Db2Linear(real_t db) - { - return (real_t)Math.Exp(db * 0.11512925464970228420089957273422); - } - - public static real_t DecTime(real_t value, real_t amount, real_t step) - { - real_t sgn = Mathf.Sign(value); - real_t val = Mathf.Abs(value); - val -= amount * step; - if (val < 0) - val = 0; - return val * sgn; - } - - public static FuncRef FuncRef(Object instance, string funcname) - { - var ret = new FuncRef(); - ret.SetInstance(instance); - ret.SetFunction(funcname); - return ret; - } - - public static int Hash(object var) - { - return godot_icall_GD_hash(var); - } - - public static Object InstanceFromId(ulong instanceId) - { - return godot_icall_GD_instance_from_id(instanceId); - } - - public static real_t Linear2Db(real_t linear) - { - return (real_t)(Math.Log(linear) * 8.6858896380650365530225783783321); - } - - public static Resource Load(string path) - { - return ResourceLoader.Load(path); - } - - public static T Load<T>(string path) where T : class - { - return ResourceLoader.Load<T>(path); - } - - public static void PushError(string message) - { - godot_icall_GD_pusherror(message); - } - - public static void PushWarning(string message) - { - godot_icall_GD_pushwarning(message); - } - - public static void Print(params object[] what) - { - godot_icall_GD_print(Array.ConvertAll(what, x => x.ToString())); - } - - public static void PrintStack() - { - Print(System.Environment.StackTrace); - } - - public static void PrintErr(params object[] what) - { - godot_icall_GD_printerr(Array.ConvertAll(what, x => x.ToString())); - } - - public static void PrintRaw(params object[] what) - { - godot_icall_GD_printraw(Array.ConvertAll(what, x => x.ToString())); - } - - public static void PrintS(params object[] what) - { - godot_icall_GD_prints(Array.ConvertAll(what, x => x.ToString())); - } - - public static void PrintT(params object[] what) - { - godot_icall_GD_printt(Array.ConvertAll(what, x => x.ToString())); - } - - public static float Randf() - { - return godot_icall_GD_randf(); - } - - public static uint Randi() - { - return godot_icall_GD_randi(); - } - - public static void Randomize() - { - godot_icall_GD_randomize(); - } - - public static double RandRange(double from, double to) - { - return godot_icall_GD_rand_range(from, to); - } - - public static uint RandSeed(ulong seed, out ulong newSeed) - { - return godot_icall_GD_rand_seed(seed, out newSeed); - } - - public static IEnumerable<int> Range(int end) - { - return Range(0, end, 1); - } - - public static IEnumerable<int> Range(int start, int end) - { - return Range(start, end, 1); - } - - public static IEnumerable<int> Range(int start, int end, int step) - { - if (end < start && step > 0) - yield break; - - if (end > start && step < 0) - yield break; - - if (step > 0) - { - for (int i = start; i < end; i += step) - yield return i; - } - else - { - for (int i = start; i > end; i += step) - yield return i; - } - } - - public static void Seed(ulong seed) - { - godot_icall_GD_seed(seed); - } - - public static string Str(params object[] what) - { - return godot_icall_GD_str(what); - } - - public static object Str2Var(string str) - { - return godot_icall_GD_str2var(str); - } - - public static bool TypeExists(string type) - { - return godot_icall_GD_type_exists(type); - } - - public static byte[] Var2Bytes(object var, bool full_objects = false) - { - return godot_icall_GD_var2bytes(var, full_objects); - } - - public static string Var2Str(object var) - { - return godot_icall_GD_var2str(var); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static object godot_icall_GD_bytes2var(byte[] bytes, bool allow_objects); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static object godot_icall_GD_convert(object what, Variant.Type type); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_GD_hash(object var); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static Object godot_icall_GD_instance_from_id(ulong instance_id); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_GD_print(object[] what); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_GD_printerr(object[] what); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_GD_printraw(object[] what); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_GD_prints(object[] what); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_GD_printt(object[] what); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static float godot_icall_GD_randf(); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static uint godot_icall_GD_randi(); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_GD_randomize(); - - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static double godot_icall_GD_rand_range(double from, double to); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static uint godot_icall_GD_rand_seed(ulong seed, out ulong newSeed); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_GD_seed(ulong seed); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_GD_str(object[] what); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static object godot_icall_GD_str2var(string str); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_GD_type_exists(string type); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static byte[] godot_icall_GD_var2bytes(object what, bool full_objects); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_GD_var2str(object var); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_GD_pusherror(string type); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_GD_pushwarning(string type); - } -} diff --git a/modules/mono/glue/Managed/Files/GodotSynchronizationContext.cs b/modules/mono/glue/Managed/Files/GodotSynchronizationContext.cs deleted file mode 100644 index 4b5e3f8761..0000000000 --- a/modules/mono/glue/Managed/Files/GodotSynchronizationContext.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Threading; - -namespace Godot -{ - public class GodotSynchronizationContext : SynchronizationContext - { - private readonly BlockingCollection<KeyValuePair<SendOrPostCallback, object>> _queue = new BlockingCollection<KeyValuePair<SendOrPostCallback, object>>(); - - public override void Post(SendOrPostCallback d, object state) - { - _queue.Add(new KeyValuePair<SendOrPostCallback, object>(d, state)); - } - - public void ExecutePendingContinuations() - { - while (_queue.TryTake(out var workItem)) - { - workItem.Key(workItem.Value); - } - } - } -} diff --git a/modules/mono/glue/Managed/Files/GodotTaskScheduler.cs b/modules/mono/glue/Managed/Files/GodotTaskScheduler.cs deleted file mode 100644 index 8eaeea50dc..0000000000 --- a/modules/mono/glue/Managed/Files/GodotTaskScheduler.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace Godot -{ - public class GodotTaskScheduler : TaskScheduler - { - internal GodotSynchronizationContext Context { get; } - private readonly LinkedList<Task> _tasks = new LinkedList<Task>(); - - public GodotTaskScheduler() - { - Context = new GodotSynchronizationContext(); - SynchronizationContext.SetSynchronizationContext(Context); - } - - protected sealed override void QueueTask(Task task) - { - lock (_tasks) - { - _tasks.AddLast(task); - } - } - - protected sealed override bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued) - { - if (SynchronizationContext.Current != Context) - return false; - - if (taskWasPreviouslyQueued) - TryDequeue(task); - - return TryExecuteTask(task); - } - - protected sealed override bool TryDequeue(Task task) - { - lock (_tasks) - { - return _tasks.Remove(task); - } - } - - protected sealed override IEnumerable<Task> GetScheduledTasks() - { - lock (_tasks) - { - foreach (Task task in _tasks) - yield return task; - } - } - - public void Activate() - { - ExecuteQueuedTasks(); - Context.ExecutePendingContinuations(); - } - - private void ExecuteQueuedTasks() - { - while (true) - { - Task task; - - lock (_tasks) - { - if (_tasks.Any()) - { - task = _tasks.First.Value; - _tasks.RemoveFirst(); - } - else - { - break; - } - } - - if (task != null) - { - if (!TryExecuteTask(task)) - { - throw new InvalidOperationException(); - } - } - } - } - } -} diff --git a/modules/mono/glue/Managed/Files/GodotTraceListener.cs b/modules/mono/glue/Managed/Files/GodotTraceListener.cs deleted file mode 100644 index f1a00ae0fa..0000000000 --- a/modules/mono/glue/Managed/Files/GodotTraceListener.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Diagnostics; - -namespace Godot -{ - internal class GodotTraceListener : TraceListener - { - public override void Write(string message) - { - GD.PrintRaw(message); - } - - public override void WriteLine(string message) - { - GD.Print(message); - } - - public override void Fail(string message, string detailMessage) - { - GD.PrintErr("Assertion failed: ", message); - if (detailMessage != null) - { - GD.PrintErr(" Details: ", detailMessage); - } - - try - { - var stackTrace = new StackTrace(true).ToString(); - GD.PrintErr(stackTrace); - } - catch - { - // ignored - } - } - } -} diff --git a/modules/mono/glue/Managed/Files/Interfaces/IAwaitable.cs b/modules/mono/glue/Managed/Files/Interfaces/IAwaitable.cs deleted file mode 100644 index 0397957d00..0000000000 --- a/modules/mono/glue/Managed/Files/Interfaces/IAwaitable.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Godot -{ - public interface IAwaitable - { - IAwaiter GetAwaiter(); - } - - public interface IAwaitable<out TResult> - { - IAwaiter<TResult> GetAwaiter(); - } -} diff --git a/modules/mono/glue/Managed/Files/Interfaces/IAwaiter.cs b/modules/mono/glue/Managed/Files/Interfaces/IAwaiter.cs deleted file mode 100644 index d3be9d781c..0000000000 --- a/modules/mono/glue/Managed/Files/Interfaces/IAwaiter.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Runtime.CompilerServices; - -namespace Godot -{ - public interface IAwaiter : INotifyCompletion - { - bool IsCompleted { get; } - - void GetResult(); - } - - public interface IAwaiter<out TResult> : INotifyCompletion - { - bool IsCompleted { get; } - - TResult GetResult(); - } -} diff --git a/modules/mono/glue/Managed/Files/Interfaces/ISerializationListener.cs b/modules/mono/glue/Managed/Files/Interfaces/ISerializationListener.cs deleted file mode 100644 index c3fa2f3e82..0000000000 --- a/modules/mono/glue/Managed/Files/Interfaces/ISerializationListener.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Godot -{ - public interface ISerializationListener - { - void OnBeforeSerialize(); - void OnAfterDeserialize(); - } -} diff --git a/modules/mono/glue/Managed/Files/MarshalUtils.cs b/modules/mono/glue/Managed/Files/MarshalUtils.cs deleted file mode 100644 index a1d63a62ef..0000000000 --- a/modules/mono/glue/Managed/Files/MarshalUtils.cs +++ /dev/null @@ -1,212 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; - -namespace Godot -{ - using Array = Godot.Collections.Array; - using Dictionary = Godot.Collections.Dictionary; - - static class MarshalUtils - { - /// <summary> - /// Returns <see langword="true"/> if the generic type definition of <paramref name="type"/> - /// is <see cref="Godot.Collections.Array{T}"/>; otherwise returns <see langword="false"/>. - /// </summary> - /// <exception cref="System.InvalidOperationException"> - /// <paramref name="type"/> is not a generic type. That is, IsGenericType returns false. - /// </exception> - static bool TypeIsGenericArray(Type type) - { - return type.GetGenericTypeDefinition() == typeof(Godot.Collections.Array<>); - } - - /// <summary> - /// Returns <see langword="true"/> if the generic type definition of <paramref name="type"/> - /// is <see cref="Godot.Collections.Dictionary{TKey, TValue}"/>; otherwise returns <see langword="false"/>. - /// </summary> - /// <exception cref="System.InvalidOperationException"> - /// <paramref name="type"/> is not a generic type. That is, IsGenericType returns false. - /// </exception> - static bool TypeIsGenericDictionary(Type type) - { - return type.GetGenericTypeDefinition() == typeof(Godot.Collections.Dictionary<,>); - } - - static void ArrayGetElementType(Type arrayType, out Type elementType) - { - elementType = arrayType.GetGenericArguments()[0]; - } - - static void DictionaryGetKeyValueTypes(Type dictionaryType, out Type keyType, out Type valueType) - { - var genericArgs = dictionaryType.GetGenericArguments(); - keyType = genericArgs[0]; - valueType = genericArgs[1]; - } - - static bool GenericIEnumerableIsAssignableFromType(Type type) - { - if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IEnumerable<>)) - return true; - - foreach (var interfaceType in type.GetInterfaces()) - { - if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IEnumerable<>)) - return true; - } - - Type baseType = type.BaseType; - - if (baseType == null) - return false; - - return GenericIEnumerableIsAssignableFromType(baseType); - } - - static bool GenericIDictionaryIsAssignableFromType(Type type) - { - if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IDictionary<,>)) - return true; - - foreach (var interfaceType in type.GetInterfaces()) - { - if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IDictionary<,>)) - return true; - } - - Type baseType = type.BaseType; - - if (baseType == null) - return false; - - return GenericIDictionaryIsAssignableFromType(baseType); - } - - static bool GenericIEnumerableIsAssignableFromType(Type type, out Type elementType) - { - if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IEnumerable<>)) - { - elementType = type.GetGenericArguments()[0]; - return true; - } - - foreach (var interfaceType in type.GetInterfaces()) - { - if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IEnumerable<>)) - { - elementType = interfaceType.GetGenericArguments()[0]; - return true; - } - } - - Type baseType = type.BaseType; - - if (baseType == null) - { - elementType = null; - return false; - } - - return GenericIEnumerableIsAssignableFromType(baseType, out elementType); - } - - static bool GenericIDictionaryIsAssignableFromType(Type type, out Type keyType, out Type valueType) - { - if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IDictionary<,>)) - { - var genericArgs = type.GetGenericArguments(); - keyType = genericArgs[0]; - valueType = genericArgs[1]; - return true; - } - - foreach (var interfaceType in type.GetInterfaces()) - { - if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IDictionary<,>)) - { - var genericArgs = interfaceType.GetGenericArguments(); - keyType = genericArgs[0]; - valueType = genericArgs[1]; - return true; - } - } - - Type baseType = type.BaseType; - - if (baseType == null) - { - keyType = null; - valueType = null; - return false; - } - - return GenericIDictionaryIsAssignableFromType(baseType, out keyType, out valueType); - } - - static Type MakeGenericArrayType(Type elemType) - { - return typeof(Godot.Collections.Array<>).MakeGenericType(elemType); - } - - static Type MakeGenericDictionaryType(Type keyType, Type valueType) - { - return typeof(Godot.Collections.Dictionary<,>).MakeGenericType(keyType, valueType); - } - - // TODO Add support for IEnumerable<T> and IDictionary<TKey, TValue> - // TODO: EnumerableToArray and IDictionaryToDictionary can be optimized - - internal static void EnumerableToArray(IEnumerable enumerable, IntPtr godotArrayPtr) - { - if (enumerable is ICollection collection) - { - int count = collection.Count; - - object[] tempArray = new object[count]; - collection.CopyTo(tempArray, 0); - - for (int i = 0; i < count; i++) - { - Array.godot_icall_Array_Add(godotArrayPtr, tempArray[i]); - } - } - else - { - foreach (object element in enumerable) - { - Array.godot_icall_Array_Add(godotArrayPtr, element); - } - } - } - - internal static void IDictionaryToDictionary(IDictionary dictionary, IntPtr godotDictionaryPtr) - { - foreach (DictionaryEntry entry in dictionary) - { - Dictionary.godot_icall_Dictionary_Add(godotDictionaryPtr, entry.Key, entry.Value); - } - } - - internal static void GenericIDictionaryToDictionary(object dictionary, IntPtr godotDictionaryPtr) - { -#if DEBUG - if (!GenericIDictionaryIsAssignableFromType(dictionary.GetType())) - throw new InvalidOperationException("The type does not implement IDictionary<,>"); -#endif - - // TODO: Can we optimize this? - - var keys = ((IEnumerable)dictionary.GetType().GetProperty("Keys").GetValue(dictionary)).GetEnumerator(); - var values = ((IEnumerable)dictionary.GetType().GetProperty("Values").GetValue(dictionary)).GetEnumerator(); - - while (keys.MoveNext() && values.MoveNext()) - { - object key = keys.Current; - object value = values.Current; - - Dictionary.godot_icall_Dictionary_Add(godotDictionaryPtr, key, value); - } - } - } -} diff --git a/modules/mono/glue/Managed/Files/Mathf.cs b/modules/mono/glue/Managed/Files/Mathf.cs deleted file mode 100644 index 54821fe790..0000000000 --- a/modules/mono/glue/Managed/Files/Mathf.cs +++ /dev/null @@ -1,359 +0,0 @@ -using System; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - public static partial class Mathf - { - // Define constants with Decimal precision and cast down to double or float. - - public const real_t Tau = (real_t) 6.2831853071795864769252867666M; // 6.2831855f and 6.28318530717959 - public const real_t Pi = (real_t) 3.1415926535897932384626433833M; // 3.1415927f and 3.14159265358979 - public const real_t Inf = real_t.PositiveInfinity; - public const real_t NaN = real_t.NaN; - - private const real_t Deg2RadConst = (real_t) 0.0174532925199432957692369077M; // 0.0174532924f and 0.0174532925199433 - private const real_t Rad2DegConst = (real_t) 57.295779513082320876798154814M; // 57.29578f and 57.2957795130823 - - public static int Abs(int s) - { - return Math.Abs(s); - } - - public static real_t Abs(real_t s) - { - return Math.Abs(s); - } - - public static real_t Acos(real_t s) - { - return (real_t)Math.Acos(s); - } - - public static real_t Asin(real_t s) - { - return (real_t)Math.Asin(s); - } - - public static real_t Atan(real_t s) - { - return (real_t)Math.Atan(s); - } - - public static real_t Atan2(real_t y, real_t x) - { - return (real_t)Math.Atan2(y, x); - } - - public static Vector2 Cartesian2Polar(real_t x, real_t y) - { - return new Vector2(Sqrt(x * x + y * y), Atan2(y, x)); - } - - public static real_t Ceil(real_t s) - { - return (real_t)Math.Ceiling(s); - } - - public static int Clamp(int value, int min, int max) - { - return value < min ? min : value > max ? max : value; - } - - public static real_t Clamp(real_t value, real_t min, real_t max) - { - return value < min ? min : value > max ? max : value; - } - - public static real_t Cos(real_t s) - { - return (real_t)Math.Cos(s); - } - - public static real_t Cosh(real_t s) - { - return (real_t)Math.Cosh(s); - } - - public static real_t Deg2Rad(real_t deg) - { - return deg * Deg2RadConst; - } - - public static real_t Ease(real_t s, real_t curve) - { - if (s < 0f) - { - s = 0f; - } - else if (s > 1.0f) - { - s = 1.0f; - } - - if (curve > 0f) - { - if (curve < 1.0f) - { - return 1.0f - Pow(1.0f - s, 1.0f / curve); - } - - return Pow(s, curve); - } - - if (curve < 0f) - { - if (s < 0.5f) - { - return Pow(s * 2.0f, -curve) * 0.5f; - } - - return (1.0f - Pow(1.0f - (s - 0.5f) * 2.0f, -curve)) * 0.5f + 0.5f; - } - - return 0f; - } - - public static real_t Exp(real_t s) - { - return (real_t)Math.Exp(s); - } - - public static real_t Floor(real_t s) - { - return (real_t)Math.Floor(s); - } - - public static real_t InverseLerp(real_t from, real_t to, real_t weight) - { - return (weight - from) / (to - from); - } - - public static bool IsEqualApprox(real_t a, real_t b) - { - // Check for exact equality first, required to handle "infinity" values. - if (a == b) - { - return true; - } - // Then check for approximate equality. - real_t tolerance = Epsilon * Abs(a); - if (tolerance < Epsilon) - { - tolerance = Epsilon; - } - return Abs(a - b) < tolerance; - } - - public static bool IsInf(real_t s) - { - return real_t.IsInfinity(s); - } - - public static bool IsNaN(real_t s) - { - return real_t.IsNaN(s); - } - - public static bool IsZeroApprox(real_t s) - { - return Abs(s) < Epsilon; - } - - public static real_t Lerp(real_t from, real_t to, real_t weight) - { - return from + (to - from) * weight; - } - - public static real_t LerpAngle(real_t from, real_t to, real_t weight) - { - real_t difference = (to - from) % Mathf.Tau; - real_t distance = ((2 * difference) % Mathf.Tau) - difference; - return from + distance * weight; - } - - public static real_t Log(real_t s) - { - return (real_t)Math.Log(s); - } - - public static int Max(int a, int b) - { - return a > b ? a : b; - } - - public static real_t Max(real_t a, real_t b) - { - return a > b ? a : b; - } - - public static int Min(int a, int b) - { - return a < b ? a : b; - } - - public static real_t Min(real_t a, real_t b) - { - return a < b ? a : b; - } - - public static real_t MoveToward(real_t from, real_t to, real_t delta) - { - return Abs(to - from) <= delta ? to : from + Sign(to - from) * delta; - } - - public static int NearestPo2(int value) - { - value--; - value |= value >> 1; - value |= value >> 2; - value |= value >> 4; - value |= value >> 8; - value |= value >> 16; - value++; - return value; - } - - public static Vector2 Polar2Cartesian(real_t r, real_t th) - { - return new Vector2(r * Cos(th), r * Sin(th)); - } - - /// <summary> - /// Performs a canonical Modulus operation, where the output is on the range [0, b). - /// </summary> - public static int PosMod(int a, int b) - { - int c = a % b; - if ((c < 0 && b > 0) || (c > 0 && b < 0)) - { - c += b; - } - return c; - } - - /// <summary> - /// Performs a canonical Modulus operation, where the output is on the range [0, b). - /// </summary> - public static real_t PosMod(real_t a, real_t b) - { - real_t c = a % b; - if ((c < 0 && b > 0) || (c > 0 && b < 0)) - { - c += b; - } - return c; - } - - public static real_t Pow(real_t x, real_t y) - { - return (real_t)Math.Pow(x, y); - } - - public static real_t Rad2Deg(real_t rad) - { - return rad * Rad2DegConst; - } - - public static real_t Round(real_t s) - { - return (real_t)Math.Round(s); - } - - public static int Sign(int s) - { - return s < 0 ? -1 : 1; - } - - public static real_t Sign(real_t s) - { - return s < 0f ? -1f : 1f; - } - - public static real_t Sin(real_t s) - { - return (real_t)Math.Sin(s); - } - - public static real_t Sinh(real_t s) - { - return (real_t)Math.Sinh(s); - } - - public static real_t SmoothStep(real_t from, real_t to, real_t weight) - { - if (IsEqualApprox(from, to)) - { - return from; - } - real_t x = Clamp((weight - from) / (to - from), (real_t)0.0, (real_t)1.0); - return x * x * (3 - 2 * x); - } - - public static real_t Sqrt(real_t s) - { - return (real_t)Math.Sqrt(s); - } - - public static int StepDecimals(real_t step) - { - double[] sd = new double[] { - 0.9999, - 0.09999, - 0.009999, - 0.0009999, - 0.00009999, - 0.000009999, - 0.0000009999, - 0.00000009999, - 0.000000009999, - }; - double abs = Mathf.Abs(step); - double decs = abs - (int)abs; // Strip away integer part - for (int i = 0; i < sd.Length; i++) - { - if (decs >= sd[i]) - { - return i; - } - } - return 0; - } - - public static real_t Stepify(real_t s, real_t step) - { - if (step != 0f) - { - s = Floor(s / step + 0.5f) * step; - } - - return s; - } - - public static real_t Tan(real_t s) - { - return (real_t)Math.Tan(s); - } - - public static real_t Tanh(real_t s) - { - return (real_t)Math.Tanh(s); - } - - public static int Wrap(int value, int min, int max) - { - int range = max - min; - return range == 0 ? min : min + ((value - min) % range + range) % range; - } - - public static real_t Wrap(real_t value, real_t min, real_t max) - { - real_t range = max - min; - return IsZeroApprox(range) ? min : min + ((value - min) % range + range) % range; - } - } -} diff --git a/modules/mono/glue/Managed/Files/MathfEx.cs b/modules/mono/glue/Managed/Files/MathfEx.cs deleted file mode 100644 index 1b7fd4906f..0000000000 --- a/modules/mono/glue/Managed/Files/MathfEx.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; - -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - public static partial class Mathf - { - // Define constants with Decimal precision and cast down to double or float. - - public const real_t E = (real_t) 2.7182818284590452353602874714M; // 2.7182817f and 2.718281828459045 - public const real_t Sqrt2 = (real_t) 1.4142135623730950488016887242M; // 1.4142136f and 1.414213562373095 - -#if REAL_T_IS_DOUBLE - public const real_t Epsilon = 1e-14; // Epsilon size should depend on the precision used. -#else - public const real_t Epsilon = 1e-06f; -#endif - - public static int DecimalCount(real_t s) - { - return DecimalCount((decimal)s); - } - - public static int DecimalCount(decimal s) - { - return BitConverter.GetBytes(decimal.GetBits(s)[3])[2]; - } - - public static int CeilToInt(real_t s) - { - return (int)Math.Ceiling(s); - } - - public static int FloorToInt(real_t s) - { - return (int)Math.Floor(s); - } - - public static int RoundToInt(real_t s) - { - return (int)Math.Round(s); - } - - public static bool IsEqualApprox(real_t a, real_t b, real_t tolerance) - { - // Check for exact equality first, required to handle "infinity" values. - if (a == b) - { - return true; - } - // Then check for approximate equality. - return Abs(a - b) < tolerance; - } - } -} diff --git a/modules/mono/glue/Managed/Files/NodePath.cs b/modules/mono/glue/Managed/Files/NodePath.cs deleted file mode 100644 index 8c5872ba5a..0000000000 --- a/modules/mono/glue/Managed/Files/NodePath.cs +++ /dev/null @@ -1,153 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace Godot -{ - public sealed partial class NodePath : IDisposable - { - private bool disposed = false; - - internal IntPtr ptr; - - internal static IntPtr GetPtr(NodePath instance) - { - if (instance == null) - throw new NullReferenceException($"The instance of type {nameof(NodePath)} is null."); - - if (instance.disposed) - throw new ObjectDisposedException(instance.GetType().FullName); - - return instance.ptr; - } - - ~NodePath() - { - Dispose(false); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - private void Dispose(bool disposing) - { - if (disposed) - return; - - if (ptr != IntPtr.Zero) - { - godot_icall_NodePath_Dtor(ptr); - ptr = IntPtr.Zero; - } - - disposed = true; - } - - internal NodePath(IntPtr ptr) - { - this.ptr = ptr; - } - - public IntPtr NativeInstance - { - get { return ptr; } - } - - public NodePath() : this(string.Empty) {} - - public NodePath(string path) - { - this.ptr = godot_icall_NodePath_Ctor(path); - } - - public static implicit operator NodePath(string from) - { - return new NodePath(from); - } - - public static implicit operator string(NodePath from) - { - return godot_icall_NodePath_operator_String(NodePath.GetPtr(from)); - } - - public override string ToString() - { - return (string)this; - } - - public NodePath GetAsPropertyPath() - { - return new NodePath(godot_icall_NodePath_get_as_property_path(NodePath.GetPtr(this))); - } - - public string GetConcatenatedSubnames() - { - return godot_icall_NodePath_get_concatenated_subnames(NodePath.GetPtr(this)); - } - - public string GetName(int idx) - { - return godot_icall_NodePath_get_name(NodePath.GetPtr(this), idx); - } - - public int GetNameCount() - { - return godot_icall_NodePath_get_name_count(NodePath.GetPtr(this)); - } - - public string GetSubname(int idx) - { - return godot_icall_NodePath_get_subname(NodePath.GetPtr(this), idx); - } - - public int GetSubnameCount() - { - return godot_icall_NodePath_get_subname_count(NodePath.GetPtr(this)); - } - - public bool IsAbsolute() - { - return godot_icall_NodePath_is_absolute(NodePath.GetPtr(this)); - } - - public bool IsEmpty() - { - return godot_icall_NodePath_is_empty(NodePath.GetPtr(this)); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_NodePath_Ctor(string path); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_NodePath_Dtor(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_NodePath_operator_String(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_NodePath_get_as_property_path(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_NodePath_get_concatenated_subnames(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_NodePath_get_name(IntPtr ptr, int arg1); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_NodePath_get_name_count(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_NodePath_get_subname(IntPtr ptr, int arg1); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_NodePath_get_subname_count(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_NodePath_is_absolute(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static bool godot_icall_NodePath_is_empty(IntPtr ptr); - } -} diff --git a/modules/mono/glue/Managed/Files/Object.base.cs b/modules/mono/glue/Managed/Files/Object.base.cs deleted file mode 100644 index de80f7fddc..0000000000 --- a/modules/mono/glue/Managed/Files/Object.base.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace Godot -{ - public partial class Object : IDisposable - { - private bool disposed = false; - - private const string nativeName = "Object"; - - internal IntPtr ptr; - internal bool memoryOwn; - - public Object() : this(false) - { - if (ptr == IntPtr.Zero) - ptr = godot_icall_Object_Ctor(this); - } - - internal Object(bool memoryOwn) - { - this.memoryOwn = memoryOwn; - } - - public IntPtr NativeInstance - { - get { return ptr; } - } - - internal static IntPtr GetPtr(Object instance) - { - if (instance == null) - return IntPtr.Zero; - - if (instance.disposed) - throw new ObjectDisposedException(instance.GetType().FullName); - - return instance.ptr; - } - - ~Object() - { - Dispose(false); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (disposed) - return; - - if (ptr != IntPtr.Zero) - { - if (memoryOwn) - { - memoryOwn = false; - godot_icall_Reference_Disposed(this, ptr, !disposing); - } - else - { - godot_icall_Object_Disposed(this, ptr); - } - - this.ptr = IntPtr.Zero; - } - - disposed = true; - } - - public override string ToString() - { - return godot_icall_Object_ToString(GetPtr(this)); - } - - /// <summary> - /// Returns a new <see cref="Godot.SignalAwaiter"/> awaiter configured to complete when the instance - /// <paramref name="source"/> emits the signal specified by the <paramref name="signal"/> parameter. - /// </summary> - /// <param name="source"> - /// The instance the awaiter will be listening to. - /// </param> - /// <param name="signal"> - /// The signal the awaiter will be waiting for. - /// </param> - /// <example> - /// This sample prints a message once every frame up to 100 times. - /// <code> - /// public override void _Ready() - /// { - /// for (int i = 0; i < 100; i++) - /// { - /// await ToSignal(GetTree(), "idle_frame"); - /// GD.Print($"Frame {i}"); - /// } - /// } - /// </code> - /// </example> - public SignalAwaiter ToSignal(Object source, string signal) - { - return new SignalAwaiter(source, signal, this); - } - - /// <summary> - /// Gets a new <see cref="Godot.DynamicGodotObject"/> associated with this instance. - /// </summary> - public dynamic DynamicObject => new DynamicGodotObject(this); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_Object_Ctor(Object obj); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Object_Disposed(Object obj, IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_Reference_Disposed(Object obj, IntPtr ptr, bool isFinalizer); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_Object_ToString(IntPtr ptr); - - // Used by the generated API - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_Object_ClassDB_get_method(string type, string method); - } -} diff --git a/modules/mono/glue/Managed/Files/Plane.cs b/modules/mono/glue/Managed/Files/Plane.cs deleted file mode 100644 index 885845e3a4..0000000000 --- a/modules/mono/glue/Managed/Files/Plane.cs +++ /dev/null @@ -1,238 +0,0 @@ -using System; -using System.Runtime.InteropServices; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - [Serializable] - [StructLayout(LayoutKind.Sequential)] - public struct Plane : IEquatable<Plane> - { - private Vector3 _normal; - - public Vector3 Normal - { - get { return _normal; } - set { _normal = value; } - } - - public real_t x - { - get - { - return _normal.x; - } - set - { - _normal.x = value; - } - } - - public real_t y - { - get - { - return _normal.y; - } - set - { - _normal.y = value; - } - } - - public real_t z - { - get - { - return _normal.z; - } - set - { - _normal.z = value; - } - } - - public real_t D { get; set; } - - public Vector3 Center - { - get - { - return _normal * D; - } - } - - public real_t DistanceTo(Vector3 point) - { - return _normal.Dot(point) - D; - } - - public Vector3 GetAnyPoint() - { - return _normal * D; - } - - public bool HasPoint(Vector3 point, real_t epsilon = Mathf.Epsilon) - { - real_t dist = _normal.Dot(point) - D; - return Mathf.Abs(dist) <= epsilon; - } - - public Vector3? Intersect3(Plane b, Plane c) - { - real_t denom = _normal.Cross(b._normal).Dot(c._normal); - - if (Mathf.IsZeroApprox(denom)) - return null; - - Vector3 result = b._normal.Cross(c._normal) * D + - c._normal.Cross(_normal) * b.D + - _normal.Cross(b._normal) * c.D; - - return result / denom; - } - - public Vector3? IntersectRay(Vector3 from, Vector3 dir) - { - real_t den = _normal.Dot(dir); - - if (Mathf.IsZeroApprox(den)) - return null; - - real_t dist = (_normal.Dot(from) - D) / den; - - // This is a ray, before the emitting pos (from) does not exist - if (dist > Mathf.Epsilon) - return null; - - return from + dir * -dist; - } - - public Vector3? IntersectSegment(Vector3 begin, Vector3 end) - { - Vector3 segment = begin - end; - real_t den = _normal.Dot(segment); - - if (Mathf.IsZeroApprox(den)) - return null; - - real_t dist = (_normal.Dot(begin) - D) / den; - - // Only allow dist to be in the range of 0 to 1, with tolerance. - if (dist < -Mathf.Epsilon || dist > 1.0f + Mathf.Epsilon) - return null; - - return begin + segment * -dist; - } - - public bool IsPointOver(Vector3 point) - { - return _normal.Dot(point) > D; - } - - public Plane Normalized() - { - real_t len = _normal.Length(); - - if (len == 0) - return new Plane(0, 0, 0, 0); - - return new Plane(_normal / len, D / len); - } - - public Vector3 Project(Vector3 point) - { - return point - _normal * DistanceTo(point); - } - - // Constants - private static readonly Plane _planeYZ = new Plane(1, 0, 0, 0); - private static readonly Plane _planeXZ = new Plane(0, 1, 0, 0); - private static readonly Plane _planeXY = new Plane(0, 0, 1, 0); - - public static Plane PlaneYZ { get { return _planeYZ; } } - public static Plane PlaneXZ { get { return _planeXZ; } } - public static Plane PlaneXY { get { return _planeXY; } } - - // Constructors - public Plane(real_t a, real_t b, real_t c, real_t d) - { - _normal = new Vector3(a, b, c); - this.D = d; - } - public Plane(Vector3 normal, real_t d) - { - this._normal = normal; - this.D = d; - } - - public Plane(Vector3 v1, Vector3 v2, Vector3 v3) - { - _normal = (v1 - v3).Cross(v1 - v2); - _normal.Normalize(); - D = _normal.Dot(v1); - } - - public static Plane operator -(Plane plane) - { - return new Plane(-plane._normal, -plane.D); - } - - public static bool operator ==(Plane left, Plane right) - { - return left.Equals(right); - } - - public static bool operator !=(Plane left, Plane right) - { - return !left.Equals(right); - } - - public override bool Equals(object obj) - { - if (obj is Plane) - { - return Equals((Plane)obj); - } - - return false; - } - - public bool Equals(Plane other) - { - return _normal == other._normal && D == other.D; - } - - public bool IsEqualApprox(Plane other) - { - return _normal.IsEqualApprox(other._normal) && Mathf.IsEqualApprox(D, other.D); - } - - public override int GetHashCode() - { - return _normal.GetHashCode() ^ D.GetHashCode(); - } - - public override string ToString() - { - return String.Format("({0}, {1})", new object[] - { - _normal.ToString(), - D.ToString() - }); - } - - public string ToString(string format) - { - return String.Format("({0}, {1})", new object[] - { - _normal.ToString(format), - D.ToString(format) - }); - } - } -} diff --git a/modules/mono/glue/Managed/Files/Quat.cs b/modules/mono/glue/Managed/Files/Quat.cs deleted file mode 100644 index 8f60867ac3..0000000000 --- a/modules/mono/glue/Managed/Files/Quat.cs +++ /dev/null @@ -1,389 +0,0 @@ -using System; -using System.Runtime.InteropServices; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - [Serializable] - [StructLayout(LayoutKind.Sequential)] - public struct Quat : IEquatable<Quat> - { - public real_t x; - public real_t y; - public real_t z; - public real_t w; - - public real_t this[int index] - { - get - { - switch (index) - { - case 0: - return x; - case 1: - return y; - case 2: - return z; - case 3: - return w; - default: - throw new IndexOutOfRangeException(); - } - } - set - { - switch (index) - { - case 0: - x = value; - break; - case 1: - y = value; - break; - case 2: - z = value; - break; - case 3: - w = value; - break; - default: - throw new IndexOutOfRangeException(); - } - } - } - - public real_t Length - { - get { return Mathf.Sqrt(LengthSquared); } - } - - public real_t LengthSquared - { - get { return Dot(this); } - } - - public Quat CubicSlerp(Quat b, Quat preA, Quat postB, real_t t) - { - real_t t2 = (1.0f - t) * t * 2f; - Quat sp = Slerp(b, t); - Quat sq = preA.Slerpni(postB, t); - return sp.Slerpni(sq, t2); - } - - public real_t Dot(Quat b) - { - return x * b.x + y * b.y + z * b.z + w * b.w; - } - - public Vector3 GetEuler() - { - var basis = new Basis(this); - return basis.GetEuler(); - } - - public Quat Inverse() - { - return new Quat(-x, -y, -z, w); - } - - public Quat Normalized() - { - return this / Length; - } - - [Obsolete("Set is deprecated. Use the Quat(" + nameof(real_t) + ", " + nameof(real_t) + ", " + nameof(real_t) + ", " + nameof(real_t) + ") constructor instead.", error: true)] - public void Set(real_t x, real_t y, real_t z, real_t w) - { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - - [Obsolete("Set is deprecated. Use the Quat(" + nameof(Quat) + ") constructor instead.", error: true)] - public void Set(Quat q) - { - this = q; - } - - [Obsolete("SetAxisAngle is deprecated. Use the Quat(" + nameof(Vector3) + ", " + nameof(real_t) + ") constructor instead.", error: true)] - public void SetAxisAngle(Vector3 axis, real_t angle) - { - this = new Quat(axis, angle); - } - - [Obsolete("SetEuler is deprecated. Use the Quat(" + nameof(Vector3) + ") constructor instead.", error: true)] - public void SetEuler(Vector3 eulerYXZ) - { - this = new Quat(eulerYXZ); - } - - public Quat Slerp(Quat b, real_t t) - { - // Calculate cosine - real_t cosom = x * b.x + y * b.y + z * b.z + w * b.w; - - var to1 = new Quat(); - - // Adjust signs if necessary - if (cosom < 0.0) - { - cosom = -cosom; - to1.x = -b.x; - to1.y = -b.y; - to1.z = -b.z; - to1.w = -b.w; - } - else - { - to1.x = b.x; - to1.y = b.y; - to1.z = b.z; - to1.w = b.w; - } - - real_t sinom, scale0, scale1; - - // Calculate coefficients - if (1.0 - cosom > Mathf.Epsilon) - { - // Standard case (Slerp) - real_t omega = Mathf.Acos(cosom); - sinom = Mathf.Sin(omega); - scale0 = Mathf.Sin((1.0f - t) * omega) / sinom; - scale1 = Mathf.Sin(t * omega) / sinom; - } - else - { - // Quaternions are very close so we can do a linear interpolation - scale0 = 1.0f - t; - scale1 = t; - } - - // Calculate final values - return new Quat - ( - scale0 * x + scale1 * to1.x, - scale0 * y + scale1 * to1.y, - scale0 * z + scale1 * to1.z, - scale0 * w + scale1 * to1.w - ); - } - - public Quat Slerpni(Quat b, real_t t) - { - real_t dot = Dot(b); - - if (Mathf.Abs(dot) > 0.9999f) - { - return this; - } - - real_t theta = Mathf.Acos(dot); - real_t sinT = 1.0f / Mathf.Sin(theta); - real_t newFactor = Mathf.Sin(t * theta) * sinT; - real_t invFactor = Mathf.Sin((1.0f - t) * theta) * sinT; - - return new Quat - ( - invFactor * x + newFactor * b.x, - invFactor * y + newFactor * b.y, - invFactor * z + newFactor * b.z, - invFactor * w + newFactor * b.w - ); - } - - public Vector3 Xform(Vector3 v) - { - Quat q = this * v; - q *= Inverse(); - return new Vector3(q.x, q.y, q.z); - } - - // Static Readonly Properties - public static Quat Identity { get; } = new Quat(0f, 0f, 0f, 1f); - - // Constructors - public Quat(real_t x, real_t y, real_t z, real_t w) - { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - - public bool IsNormalized() - { - return Mathf.Abs(LengthSquared - 1) <= Mathf.Epsilon; - } - - public Quat(Quat q) - { - this = q; - } - - public Quat(Basis basis) - { - this = basis.Quat(); - } - - public Quat(Vector3 eulerYXZ) - { - real_t half_a1 = eulerYXZ.y * 0.5f; - real_t half_a2 = eulerYXZ.x * 0.5f; - real_t half_a3 = eulerYXZ.z * 0.5f; - - // R = Y(a1).X(a2).Z(a3) convention for Euler angles. - // Conversion to quaternion as listed in https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19770024290.pdf (page A-6) - // a3 is the angle of the first rotation, following the notation in this reference. - - real_t cos_a1 = Mathf.Cos(half_a1); - real_t sin_a1 = Mathf.Sin(half_a1); - real_t cos_a2 = Mathf.Cos(half_a2); - real_t sin_a2 = Mathf.Sin(half_a2); - real_t cos_a3 = Mathf.Cos(half_a3); - real_t sin_a3 = Mathf.Sin(half_a3); - - x = sin_a1 * cos_a2 * sin_a3 + cos_a1 * sin_a2 * cos_a3; - y = sin_a1 * cos_a2 * cos_a3 - cos_a1 * sin_a2 * sin_a3; - z = cos_a1 * cos_a2 * sin_a3 - sin_a1 * sin_a2 * cos_a3; - w = sin_a1 * sin_a2 * sin_a3 + cos_a1 * cos_a2 * cos_a3; - } - - public Quat(Vector3 axis, real_t angle) - { - real_t d = axis.Length(); - real_t angle_t = angle; - - if (d == 0f) - { - x = 0f; - y = 0f; - z = 0f; - w = 0f; - } - else - { - real_t s = Mathf.Sin(angle_t * 0.5f) / d; - - x = axis.x * s; - y = axis.y * s; - z = axis.z * s; - w = Mathf.Cos(angle_t * 0.5f); - } - } - - public static Quat operator *(Quat left, Quat right) - { - return new Quat - ( - left.w * right.x + left.x * right.w + left.y * right.z - left.z * right.y, - left.w * right.y + left.y * right.w + left.z * right.x - left.x * right.z, - left.w * right.z + left.z * right.w + left.x * right.y - left.y * right.x, - left.w * right.w - left.x * right.x - left.y * right.y - left.z * right.z - ); - } - - public static Quat operator +(Quat left, Quat right) - { - return new Quat(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w); - } - - public static Quat operator -(Quat left, Quat right) - { - return new Quat(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w); - } - - public static Quat operator -(Quat left) - { - return new Quat(-left.x, -left.y, -left.z, -left.w); - } - - public static Quat operator *(Quat left, Vector3 right) - { - return new Quat - ( - left.w * right.x + left.y * right.z - left.z * right.y, - left.w * right.y + left.z * right.x - left.x * right.z, - left.w * right.z + left.x * right.y - left.y * right.x, - -left.x * right.x - left.y * right.y - left.z * right.z - ); - } - - public static Quat operator *(Vector3 left, Quat right) - { - return new Quat - ( - right.w * left.x + right.y * left.z - right.z * left.y, - right.w * left.y + right.z * left.x - right.x * left.z, - right.w * left.z + right.x * left.y - right.y * left.x, - -right.x * left.x - right.y * left.y - right.z * left.z - ); - } - - public static Quat operator *(Quat left, real_t right) - { - return new Quat(left.x * right, left.y * right, left.z * right, left.w * right); - } - - public static Quat operator *(real_t left, Quat right) - { - return new Quat(right.x * left, right.y * left, right.z * left, right.w * left); - } - - public static Quat operator /(Quat left, real_t right) - { - return left * (1.0f / right); - } - - public static bool operator ==(Quat left, Quat right) - { - return left.Equals(right); - } - - public static bool operator !=(Quat left, Quat right) - { - return !left.Equals(right); - } - - public override bool Equals(object obj) - { - if (obj is Quat) - { - return Equals((Quat)obj); - } - - return false; - } - - public bool Equals(Quat other) - { - return x == other.x && y == other.y && z == other.z && w == other.w; - } - - public bool IsEqualApprox(Quat other) - { - return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y) && Mathf.IsEqualApprox(z, other.z) && Mathf.IsEqualApprox(w, other.w); - } - - public override int GetHashCode() - { - return y.GetHashCode() ^ x.GetHashCode() ^ z.GetHashCode() ^ w.GetHashCode(); - } - - public override string ToString() - { - return String.Format("({0}, {1}, {2}, {3})", x.ToString(), y.ToString(), z.ToString(), w.ToString()); - } - - public string ToString(string format) - { - return String.Format("({0}, {1}, {2}, {3})", x.ToString(format), y.ToString(format), z.ToString(format), w.ToString(format)); - } - } -} diff --git a/modules/mono/glue/Managed/Files/RID.cs b/modules/mono/glue/Managed/Files/RID.cs deleted file mode 100644 index 94761531b1..0000000000 --- a/modules/mono/glue/Managed/Files/RID.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace Godot -{ - public sealed partial class RID : IDisposable - { - private bool disposed = false; - - internal IntPtr ptr; - - internal static IntPtr GetPtr(RID instance) - { - if (instance == null) - throw new NullReferenceException($"The instance of type {nameof(RID)} is null."); - - if (instance.disposed) - throw new ObjectDisposedException(instance.GetType().FullName); - - return instance.ptr; - } - - ~RID() - { - Dispose(false); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - private void Dispose(bool disposing) - { - if (disposed) - return; - - if (ptr != IntPtr.Zero) - { - godot_icall_RID_Dtor(ptr); - ptr = IntPtr.Zero; - } - - disposed = true; - } - - internal RID(IntPtr ptr) - { - this.ptr = ptr; - } - - public IntPtr NativeInstance - { - get { return ptr; } - } - - internal RID() - { - this.ptr = IntPtr.Zero; - } - - public RID(Object from) - { - this.ptr = godot_icall_RID_Ctor(Object.GetPtr(from)); - } - - public int GetId() - { - return godot_icall_RID_get_id(RID.GetPtr(this)); - } - - public override string ToString() => "[RID]"; - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static IntPtr godot_icall_RID_Ctor(IntPtr from); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static void godot_icall_RID_Dtor(IntPtr ptr); - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_RID_get_id(IntPtr ptr); - } -} diff --git a/modules/mono/glue/Managed/Files/Rect2.cs b/modules/mono/glue/Managed/Files/Rect2.cs deleted file mode 100644 index 91e614dc7b..0000000000 --- a/modules/mono/glue/Managed/Files/Rect2.cs +++ /dev/null @@ -1,262 +0,0 @@ -using System; -using System.Runtime.InteropServices; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - [Serializable] - [StructLayout(LayoutKind.Sequential)] - public struct Rect2 : IEquatable<Rect2> - { - private Vector2 _position; - private Vector2 _size; - - public Vector2 Position - { - get { return _position; } - set { _position = value; } - } - - public Vector2 Size - { - get { return _size; } - set { _size = value; } - } - - public Vector2 End - { - get { return _position + _size; } - set { _size = value - _position; } - } - - public real_t Area - { - get { return GetArea(); } - } - - public Rect2 Abs() - { - Vector2 end = End; - Vector2 topLeft = new Vector2(Mathf.Min(_position.x, end.x), Mathf.Min(_position.y, end.y)); - return new Rect2(topLeft, _size.Abs()); - } - - public Rect2 Clip(Rect2 b) - { - var newRect = b; - - if (!Intersects(newRect)) - return new Rect2(); - - newRect._position.x = Mathf.Max(b._position.x, _position.x); - newRect._position.y = Mathf.Max(b._position.y, _position.y); - - Vector2 bEnd = b._position + b._size; - Vector2 end = _position + _size; - - newRect._size.x = Mathf.Min(bEnd.x, end.x) - newRect._position.x; - newRect._size.y = Mathf.Min(bEnd.y, end.y) - newRect._position.y; - - return newRect; - } - - public bool Encloses(Rect2 b) - { - return b._position.x >= _position.x && b._position.y >= _position.y && - b._position.x + b._size.x < _position.x + _size.x && - b._position.y + b._size.y < _position.y + _size.y; - } - - public Rect2 Expand(Vector2 to) - { - var expanded = this; - - Vector2 begin = expanded._position; - Vector2 end = expanded._position + expanded._size; - - if (to.x < begin.x) - begin.x = to.x; - if (to.y < begin.y) - begin.y = to.y; - - if (to.x > end.x) - end.x = to.x; - if (to.y > end.y) - end.y = to.y; - - expanded._position = begin; - expanded._size = end - begin; - - return expanded; - } - - public real_t GetArea() - { - return _size.x * _size.y; - } - - public Rect2 Grow(real_t by) - { - var g = this; - - g._position.x -= by; - g._position.y -= by; - g._size.x += by * 2; - g._size.y += by * 2; - - return g; - } - - public Rect2 GrowIndividual(real_t left, real_t top, real_t right, real_t bottom) - { - var g = this; - - g._position.x -= left; - g._position.y -= top; - g._size.x += left + right; - g._size.y += top + bottom; - - return g; - } - - public Rect2 GrowMargin(Margin margin, real_t by) - { - var g = this; - - g.GrowIndividual(Margin.Left == margin ? by : 0, - Margin.Top == margin ? by : 0, - Margin.Right == margin ? by : 0, - Margin.Bottom == margin ? by : 0); - - return g; - } - - public bool HasNoArea() - { - return _size.x <= 0 || _size.y <= 0; - } - - public bool HasPoint(Vector2 point) - { - if (point.x < _position.x) - return false; - if (point.y < _position.y) - return false; - - if (point.x >= _position.x + _size.x) - return false; - if (point.y >= _position.y + _size.y) - return false; - - return true; - } - - public bool Intersects(Rect2 b) - { - if (_position.x >= b._position.x + b._size.x) - return false; - if (_position.x + _size.x <= b._position.x) - return false; - if (_position.y >= b._position.y + b._size.y) - return false; - if (_position.y + _size.y <= b._position.y) - return false; - - return true; - } - - public Rect2 Merge(Rect2 b) - { - Rect2 newRect; - - newRect._position.x = Mathf.Min(b._position.x, _position.x); - newRect._position.y = Mathf.Min(b._position.y, _position.y); - - newRect._size.x = Mathf.Max(b._position.x + b._size.x, _position.x + _size.x); - newRect._size.y = Mathf.Max(b._position.y + b._size.y, _position.y + _size.y); - - newRect._size = newRect._size - newRect._position; // Make relative again - - return newRect; - } - - // Constructors - public Rect2(Vector2 position, Vector2 size) - { - _position = position; - _size = size; - } - public Rect2(Vector2 position, real_t width, real_t height) - { - _position = position; - _size = new Vector2(width, height); - } - public Rect2(real_t x, real_t y, Vector2 size) - { - _position = new Vector2(x, y); - _size = size; - } - public Rect2(real_t x, real_t y, real_t width, real_t height) - { - _position = new Vector2(x, y); - _size = new Vector2(width, height); - } - - public static bool operator ==(Rect2 left, Rect2 right) - { - return left.Equals(right); - } - - public static bool operator !=(Rect2 left, Rect2 right) - { - return !left.Equals(right); - } - - public override bool Equals(object obj) - { - if (obj is Rect2) - { - return Equals((Rect2)obj); - } - - return false; - } - - public bool Equals(Rect2 other) - { - return _position.Equals(other._position) && _size.Equals(other._size); - } - - public bool IsEqualApprox(Rect2 other) - { - return _position.IsEqualApprox(other._position) && _size.IsEqualApprox(other.Size); - } - - public override int GetHashCode() - { - return _position.GetHashCode() ^ _size.GetHashCode(); - } - - public override string ToString() - { - return String.Format("({0}, {1})", new object[] - { - _position.ToString(), - _size.ToString() - }); - } - - public string ToString(string format) - { - return String.Format("({0}, {1})", new object[] - { - _position.ToString(format), - _size.ToString(format) - }); - } - } -} diff --git a/modules/mono/glue/Managed/Files/SignalAwaiter.cs b/modules/mono/glue/Managed/Files/SignalAwaiter.cs deleted file mode 100644 index 9483b6ffb4..0000000000 --- a/modules/mono/glue/Managed/Files/SignalAwaiter.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace Godot -{ - public class SignalAwaiter : IAwaiter<object[]>, IAwaitable<object[]> - { - private bool completed; - private object[] result; - private Action action; - - public SignalAwaiter(Object source, string signal, Object target) - { - godot_icall_SignalAwaiter_connect(Object.GetPtr(source), signal, Object.GetPtr(target), this); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static Error godot_icall_SignalAwaiter_connect(IntPtr source, string signal, IntPtr target, SignalAwaiter awaiter); - - public bool IsCompleted - { - get - { - return completed; - } - } - - public void OnCompleted(Action action) - { - this.action = action; - } - - public object[] GetResult() - { - return result; - } - - public IAwaiter<object[]> GetAwaiter() - { - return this; - } - - internal void SignalCallback(object[] args) - { - completed = true; - result = args; - - if (action != null) - { - action(); - } - } - - internal void FailureCallback() - { - action = null; - completed = true; - } - } -} diff --git a/modules/mono/glue/Managed/Files/StringExtensions.cs b/modules/mono/glue/Managed/Files/StringExtensions.cs deleted file mode 100644 index 6045c83e95..0000000000 --- a/modules/mono/glue/Managed/Files/StringExtensions.cs +++ /dev/null @@ -1,1042 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Runtime.CompilerServices; -using System.Security; -using System.Text; -using System.Text.RegularExpressions; - -namespace Godot -{ - public static class StringExtensions - { - private static int GetSliceCount(this string instance, string splitter) - { - if (instance.Empty() || splitter.Empty()) - return 0; - - int pos = 0; - int slices = 1; - - while ((pos = instance.Find(splitter, pos)) >= 0) - { - slices++; - pos += splitter.Length; - } - - return slices; - } - - private static string GetSliceCharacter(this string instance, char splitter, int slice) - { - if (!instance.Empty() && slice >= 0) - { - int i = 0; - int prev = 0; - int count = 0; - - while (true) - { - bool end = instance.Length <= i; - - if (end || instance[i] == splitter) - { - if (slice == count) - { - return instance.Substring(prev, i - prev); - } - else if (end) - { - return string.Empty; - } - - count++; - prev = i + 1; - } - - i++; - } - } - - return string.Empty; - } - - // <summary> - // If the string is a path to a file, return the path to the file without the extension. - // </summary> - public static string BaseName(this string instance) - { - int index = instance.LastIndexOf('.'); - - if (index > 0) - return instance.Substring(0, index); - - return instance; - } - - // <summary> - // Return true if the strings begins with the given string. - // </summary> - public static bool BeginsWith(this string instance, string text) - { - return instance.StartsWith(text); - } - - // <summary> - // Return the bigrams (pairs of consecutive letters) of this string. - // </summary> - public static string[] Bigrams(this string instance) - { - var b = new string[instance.Length - 1]; - - for (int i = 0; i < b.Length; i++) - { - b[i] = instance.Substring(i, 2); - } - - return b; - } - - // <summary> - // Return the amount of substrings in string. - // </summary> - public static int Count(this string instance, string what, bool caseSensitive = true, int from = 0, int to = 0) - { - if (what.Length == 0) - { - return 0; - } - - int len = instance.Length; - int slen = what.Length; - - if (len < slen) - { - return 0; - } - - string str; - - if (from >= 0 && to >= 0) - { - if (to == 0) - { - to = len; - } - else if (from >= to) - { - return 0; - } - if (from == 0 && to == len) - { - str = instance; - } - else - { - str = instance.Substring(from, to - from); - } - } - else - { - return 0; - } - - int c = 0; - int idx; - - do - { - idx = str.IndexOf(what, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase); - if (idx != -1) - { - str = str.Substring(idx + slen); - ++c; - } - } while (idx != -1); - - return c; - } - - // <summary> - // Return a copy of the string with special characters escaped using the C language standard. - // </summary> - public static string CEscape(this string instance) - { - var sb = new StringBuilder(string.Copy(instance)); - - sb.Replace("\\", "\\\\"); - sb.Replace("\a", "\\a"); - sb.Replace("\b", "\\b"); - sb.Replace("\f", "\\f"); - sb.Replace("\n", "\\n"); - sb.Replace("\r", "\\r"); - sb.Replace("\t", "\\t"); - sb.Replace("\v", "\\v"); - sb.Replace("\'", "\\'"); - sb.Replace("\"", "\\\""); - sb.Replace("?", "\\?"); - - return sb.ToString(); - } - - // <summary> - // Return a copy of the string with escaped characters replaced by their meanings according to the C language standard. - // </summary> - public static string CUnescape(this string instance) - { - var sb = new StringBuilder(string.Copy(instance)); - - sb.Replace("\\a", "\a"); - sb.Replace("\\b", "\b"); - sb.Replace("\\f", "\f"); - sb.Replace("\\n", "\n"); - sb.Replace("\\r", "\r"); - sb.Replace("\\t", "\t"); - sb.Replace("\\v", "\v"); - sb.Replace("\\'", "\'"); - sb.Replace("\\\"", "\""); - sb.Replace("\\?", "?"); - sb.Replace("\\\\", "\\"); - - return sb.ToString(); - } - - // <summary> - // Change the case of some letters. Replace underscores with spaces, convert all letters to lowercase then capitalize first and every letter following the space character. For [code]capitalize camelCase mixed_with_underscores[/code] it will return [code]Capitalize Camelcase Mixed With Underscores[/code]. - // </summary> - public static string Capitalize(this string instance) - { - string aux = instance.Replace("_", " ").ToLower(); - var cap = string.Empty; - - for (int i = 0; i < aux.GetSliceCount(" "); i++) - { - string slice = aux.GetSliceCharacter(' ', i); - if (slice.Length > 0) - { - slice = char.ToUpper(slice[0]) + slice.Substring(1); - if (i > 0) - cap += " "; - cap += slice; - } - } - - return cap; - } - - // <summary> - // Perform a case-sensitive comparison to another string, return -1 if less, 0 if equal and +1 if greater. - // </summary> - public static int CasecmpTo(this string instance, string to) - { - return instance.CompareTo(to, true); - } - - // <summary> - // Perform a comparison to another string, return -1 if less, 0 if equal and +1 if greater. - // </summary> - public static int CompareTo(this string instance, string to, bool caseSensitive = true) - { - if (instance.Empty()) - return to.Empty() ? 0 : -1; - - if (to.Empty()) - return 1; - - int instanceIndex = 0; - int toIndex = 0; - - if (caseSensitive) // Outside while loop to avoid checking multiple times, despite some code duplication. - { - while (true) - { - if (to[toIndex] == 0 && instance[instanceIndex] == 0) - return 0; // We're equal - if (instance[instanceIndex] == 0) - return -1; // If this is empty, and the other one is not, then we're less... I think? - if (to[toIndex] == 0) - return 1; // Otherwise the other one is smaller... - if (instance[instanceIndex] < to[toIndex]) // More than - return -1; - if (instance[instanceIndex] > to[toIndex]) // Less than - return 1; - - instanceIndex++; - toIndex++; - } - } else - { - while (true) - { - if (to[toIndex] == 0 && instance[instanceIndex] == 0) - return 0; // We're equal - if (instance[instanceIndex] == 0) - return -1; // If this is empty, and the other one is not, then we're less... I think? - if (to[toIndex] == 0) - return 1; // Otherwise the other one is smaller.. - if (char.ToUpper(instance[instanceIndex]) < char.ToUpper(to[toIndex])) // More than - return -1; - if (char.ToUpper(instance[instanceIndex]) > char.ToUpper(to[toIndex])) // Less than - return 1; - - instanceIndex++; - toIndex++; - } - } - } - - // <summary> - // Return true if the string is empty. - // </summary> - public static bool Empty(this string instance) - { - return string.IsNullOrEmpty(instance); - } - - // <summary> - // Return true if the strings ends with the given string. - // </summary> - public static bool EndsWith(this string instance, string text) - { - return instance.EndsWith(text); - } - - // <summary> - // Erase [code]chars[/code] characters from the string starting from [code]pos[/code]. - // </summary> - public static void Erase(this StringBuilder instance, int pos, int chars) - { - instance.Remove(pos, chars); - } - - // <summary> - // If the string is a path to a file, return the extension. - // </summary> - public static string Extension(this string instance) - { - int pos = instance.FindLast("."); - - if (pos < 0) - return instance; - - return instance.Substring(pos + 1); - } - - // <summary> - // Find the first occurrence of a substring, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed. - // </summary> - public static int Find(this string instance, string what, int from = 0) - { - return instance.IndexOf(what, StringComparison.OrdinalIgnoreCase); - } - - // <summary> - // Find the last occurrence of a substring, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed. - // </summary> - public static int FindLast(this string instance, string what) - { - return instance.LastIndexOf(what, StringComparison.OrdinalIgnoreCase); - } - - // <summary> - // Find the first occurrence of a substring but search as case-insensitive, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed. - // </summary> - public static int FindN(this string instance, string what, int from = 0) - { - return instance.IndexOf(what, StringComparison.Ordinal); - } - - // <summary> - // If the string is a path to a file, return the base directory. - // </summary> - public static string GetBaseDir(this string instance) - { - int basepos = instance.Find("://"); - - string rs; - var @base = string.Empty; - - if (basepos != -1) - { - var end = basepos + 3; - rs = instance.Substring(end); - @base = instance.Substring(0, end); - } - else - { - if (instance.BeginsWith("/")) - { - rs = instance.Substring(1); - @base = "/"; - } - else - { - rs = instance; - } - } - - int sep = Mathf.Max(rs.FindLast("/"), rs.FindLast("\\")); - - if (sep == -1) - return @base; - - return @base + rs.Substr(0, sep); - } - - // <summary> - // If the string is a path to a file, return the file and ignore the base directory. - // </summary> - public static string GetFile(this string instance) - { - int sep = Mathf.Max(instance.FindLast("/"), instance.FindLast("\\")); - - if (sep == -1) - return instance; - - return instance.Substring(sep + 1); - } - - // <summary> - // Hash the string and return a 32 bits integer. - // </summary> - public static int Hash(this string instance) - { - int index = 0; - int hashv = 5381; - int c; - - while ((c = instance[index++]) != 0) - hashv = (hashv << 5) + hashv + c; // hash * 33 + c - - return hashv; - } - - // <summary> - // Convert a string containing an hexadecimal number into an int. - // </summary> - public static int HexToInt(this string instance) - { - int sign = 1; - - if (instance[0] == '-') - { - sign = -1; - instance = instance.Substring(1); - } - - if (!instance.StartsWith("0x")) - return 0; - - return sign * int.Parse(instance.Substring(2), NumberStyles.HexNumber); - } - - // <summary> - // Insert a substring at a given position. - // </summary> - public static string Insert(this string instance, int pos, string what) - { - return instance.Insert(pos, what); - } - - // <summary> - // If the string is a path to a file or directory, return true if the path is absolute. - // </summary> - public static bool IsAbsPath(this string instance) - { - return System.IO.Path.IsPathRooted(instance); - } - - // <summary> - // If the string is a path to a file or directory, return true if the path is relative. - // </summary> - public static bool IsRelPath(this string instance) - { - return !System.IO.Path.IsPathRooted(instance); - } - - // <summary> - // Check whether this string is a subsequence of the given string. - // </summary> - public static bool IsSubsequenceOf(this string instance, string text, bool caseSensitive = true) - { - int len = instance.Length; - - if (len == 0) - return true; // Technically an empty string is subsequence of any string - - if (len > text.Length) - return false; - - int source = 0; - int target = 0; - - while (instance[source] != 0 && text[target] != 0) - { - bool match; - - if (!caseSensitive) - { - char sourcec = char.ToLower(instance[source]); - char targetc = char.ToLower(text[target]); - match = sourcec == targetc; - } - else - { - match = instance[source] == text[target]; - } - if (match) - { - source++; - if (instance[source] == 0) - return true; - } - - target++; - } - - return false; - } - - // <summary> - // Check whether this string is a subsequence of the given string, ignoring case differences. - // </summary> - public static bool IsSubsequenceOfI(this string instance, string text) - { - return instance.IsSubsequenceOf(text, false); - } - - // <summary> - // Check whether the string contains a valid float. - // </summary> - public static bool IsValidFloat(this string instance) - { - float f; - return float.TryParse(instance, out f); - } - - // <summary> - // Check whether the string contains a valid color in HTML notation. - // </summary> - public static bool IsValidHtmlColor(this string instance) - { - return Color.HtmlIsValid(instance); - } - - // <summary> - // Check whether the string is a valid identifier. As is common in programming languages, a valid identifier may contain only letters, digits and underscores (_) and the first character may not be a digit. - // </summary> - public static bool IsValidIdentifier(this string instance) - { - int len = instance.Length; - - if (len == 0) - return false; - - for (int i = 0; i < len; i++) - { - if (i == 0) - { - if (instance[0] >= '0' && instance[0] <= '9') - return false; // Don't start with number plz - } - - bool validChar = instance[i] >= '0' && - instance[i] <= '9' || instance[i] >= 'a' && - instance[i] <= 'z' || instance[i] >= 'A' && - instance[i] <= 'Z' || instance[i] == '_'; - - if (!validChar) - return false; - } - - return true; - } - - // <summary> - // Check whether the string contains a valid integer. - // </summary> - public static bool IsValidInteger(this string instance) - { - int f; - return int.TryParse(instance, out f); - } - - // <summary> - // Check whether the string contains a valid IP address. - // </summary> - public static bool IsValidIPAddress(this string instance) - { - // TODO: Support IPv6 addresses - string[] ip = instance.Split("."); - - if (ip.Length != 4) - return false; - - for (int i = 0; i < ip.Length; i++) - { - string n = ip[i]; - if (!n.IsValidInteger()) - return false; - - int val = n.ToInt(); - if (val < 0 || val > 255) - return false; - } - - return true; - } - - // <summary> - // Return a copy of the string with special characters escaped using the JSON standard. - // </summary> - public static string JSONEscape(this string instance) - { - var sb = new StringBuilder(string.Copy(instance)); - - sb.Replace("\\", "\\\\"); - sb.Replace("\b", "\\b"); - sb.Replace("\f", "\\f"); - sb.Replace("\n", "\\n"); - sb.Replace("\r", "\\r"); - sb.Replace("\t", "\\t"); - sb.Replace("\v", "\\v"); - sb.Replace("\"", "\\\""); - - return sb.ToString(); - } - - // <summary> - // Return an amount of characters from the left of the string. - // </summary> - public static string Left(this string instance, int pos) - { - if (pos <= 0) - return string.Empty; - - if (pos >= instance.Length) - return instance; - - return instance.Substring(0, pos); - } - - /// <summary> - /// Return the length of the string in characters. - /// </summary> - public static int Length(this string instance) - { - return instance.Length; - } - - // <summary> - // Do a simple expression match, where '*' matches zero or more arbitrary characters and '?' matches any single character except '.'. - // </summary> - public static bool ExprMatch(this string instance, string expr, bool caseSensitive) - { - if (expr.Length == 0 || instance.Length == 0) - return false; - - switch (expr[0]) - { - case '\0': - return instance[0] == 0; - case '*': - return ExprMatch(expr + 1, instance, caseSensitive) || instance[0] != 0 && ExprMatch(expr, instance + 1, caseSensitive); - case '?': - return instance[0] != 0 && instance[0] != '.' && ExprMatch(expr + 1, instance + 1, caseSensitive); - default: - return (caseSensitive ? instance[0] == expr[0] : char.ToUpper(instance[0]) == char.ToUpper(expr[0])) && - ExprMatch(expr + 1, instance + 1, caseSensitive); - } - } - - // <summary> - // Do a simple case sensitive expression match, using ? and * wildcards (see [method expr_match]). - // </summary> - public static bool Match(this string instance, string expr, bool caseSensitive = true) - { - return instance.ExprMatch(expr, caseSensitive); - } - - // <summary> - // Do a simple case insensitive expression match, using ? and * wildcards (see [method expr_match]). - // </summary> - public static bool MatchN(this string instance, string expr) - { - return instance.ExprMatch(expr, false); - } - - // <summary> - // Return the MD5 hash of the string as an array of bytes. - // </summary> - public static byte[] MD5Buffer(this string instance) - { - return godot_icall_String_md5_buffer(instance); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static byte[] godot_icall_String_md5_buffer(string str); - - // <summary> - // Return the MD5 hash of the string as a string. - // </summary> - public static string MD5Text(this string instance) - { - return godot_icall_String_md5_text(instance); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_String_md5_text(string str); - - // <summary> - // Perform a case-insensitive comparison to another string, return -1 if less, 0 if equal and +1 if greater. - // </summary> - public static int NocasecmpTo(this string instance, string to) - { - return instance.CompareTo(to, false); - } - - // <summary> - // Return the character code at position [code]at[/code]. - // </summary> - public static int OrdAt(this string instance, int at) - { - return instance[at]; - } - - // <summary> - // Format a number to have an exact number of [code]digits[/code] after the decimal point. - // </summary> - public static string PadDecimals(this string instance, int digits) - { - int c = instance.Find("."); - - if (c == -1) - { - if (digits <= 0) - return instance; - - instance += "."; - c = instance.Length - 1; - } - else - { - if (digits <= 0) - return instance.Substring(0, c); - } - - if (instance.Length - (c + 1) > digits) - { - instance = instance.Substring(0, c + digits + 1); - } - else - { - while (instance.Length - (c + 1) < digits) - { - instance += "0"; - } - } - - return instance; - } - - // <summary> - // Format a number to have an exact number of [code]digits[/code] before the decimal point. - // </summary> - public static string PadZeros(this string instance, int digits) - { - string s = instance; - int end = s.Find("."); - - if (end == -1) - end = s.Length; - - if (end == 0) - return s; - - int begin = 0; - - while (begin < end && (s[begin] < '0' || s[begin] > '9')) - { - begin++; - } - - if (begin >= end) - return s; - - while (end - begin < digits) - { - s = s.Insert(begin, "0"); - end++; - } - - return s; - } - - // <summary> - // Decode a percent-encoded string. See [method percent_encode]. - // </summary> - public static string PercentDecode(this string instance) - { - return Uri.UnescapeDataString(instance); - } - - // <summary> - // Percent-encode a string. This is meant to encode parameters in a URL when sending a HTTP GET request and bodies of form-urlencoded POST request. - // </summary> - public static string PercentEncode(this string instance) - { - return Uri.EscapeDataString(instance); - } - - // <summary> - // If the string is a path, this concatenates [code]file[/code] at the end of the string as a subpath. E.g. [code]"this/is".plus_file("path") == "this/is/path"[/code]. - // </summary> - public static string PlusFile(this string instance, string file) - { - if (instance.Length > 0 && instance[instance.Length - 1] == '/') - return instance + file; - return instance + "/" + file; - } - - // <summary> - // Replace occurrences of a substring for different ones inside the string. - // </summary> - public static string Replace(this string instance, string what, string forwhat) - { - return instance.Replace(what, forwhat); - } - - // <summary> - // Replace occurrences of a substring for different ones inside the string, but search case-insensitive. - // </summary> - public static string ReplaceN(this string instance, string what, string forwhat) - { - return Regex.Replace(instance, what, forwhat, RegexOptions.IgnoreCase); - } - - // <summary> - // Perform a search for a substring, but start from the end of the string instead of the beginning. - // </summary> - public static int RFind(this string instance, string what, int from = -1) - { - return godot_icall_String_rfind(instance, what, from); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_String_rfind(string str, string what, int from); - - // <summary> - // Perform a search for a substring, but start from the end of the string instead of the beginning. Also search case-insensitive. - // </summary> - public static int RFindN(this string instance, string what, int from = -1) - { - return godot_icall_String_rfindn(instance, what, from); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static int godot_icall_String_rfindn(string str, string what, int from); - - // <summary> - // Return the right side of the string from a given position. - // </summary> - public static string Right(this string instance, int pos) - { - if (pos >= instance.Length) - return instance; - - if (pos < 0) - return string.Empty; - - return instance.Substring(pos, instance.Length - pos); - } - - public static byte[] SHA256Buffer(this string instance) - { - return godot_icall_String_sha256_buffer(instance); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static byte[] godot_icall_String_sha256_buffer(string str); - - // <summary> - // Return the SHA-256 hash of the string as a string. - // </summary> - public static string SHA256Text(this string instance) - { - return godot_icall_String_sha256_text(instance); - } - - [MethodImpl(MethodImplOptions.InternalCall)] - internal extern static string godot_icall_String_sha256_text(string str); - - // <summary> - // Return the similarity index of the text compared to this string. 1 means totally similar and 0 means totally dissimilar. - // </summary> - public static float Similarity(this string instance, string text) - { - if (instance == text) - { - // Equal strings are totally similar - return 1.0f; - } - if (instance.Length < 2 || text.Length < 2) - { - // No way to calculate similarity without a single bigram - return 0.0f; - } - - string[] sourceBigrams = instance.Bigrams(); - string[] targetBigrams = text.Bigrams(); - - int sourceSize = sourceBigrams.Length; - int targetSize = targetBigrams.Length; - - float sum = sourceSize + targetSize; - float inter = 0; - - for (int i = 0; i < sourceSize; i++) - { - for (int j = 0; j < targetSize; j++) - { - if (sourceBigrams[i] == targetBigrams[j]) - { - inter++; - break; - } - } - } - - return 2.0f * inter / sum; - } - - // <summary> - // Split the string by a divisor string, return an array of the substrings. Example "One,Two,Three" will return ["One","Two","Three"] if split by ",". - // </summary> - public static string[] Split(this string instance, string divisor, bool allowEmpty = true) - { - return instance.Split(new[] { divisor }, StringSplitOptions.RemoveEmptyEntries); - } - - // <summary> - // Split the string in floats by using a divisor string, return an array of the substrings. Example "1,2.5,3" will return [1,2.5,3] if split by ",". - // </summary> - public static float[] SplitFloats(this string instance, string divisor, bool allowEmpty = true) - { - var ret = new List<float>(); - int from = 0; - int len = instance.Length; - - while (true) - { - int end = instance.Find(divisor, from); - if (end < 0) - end = len; - if (allowEmpty || end > from) - ret.Add(float.Parse(instance.Substring(from))); - if (end == len) - break; - - from = end + divisor.Length; - } - - return ret.ToArray(); - } - - private static readonly char[] _nonPrintable = { - (char)00, (char)01, (char)02, (char)03, (char)04, (char)05, - (char)06, (char)07, (char)08, (char)09, (char)10, (char)11, - (char)12, (char)13, (char)14, (char)15, (char)16, (char)17, - (char)18, (char)19, (char)20, (char)21, (char)22, (char)23, - (char)24, (char)25, (char)26, (char)27, (char)28, (char)29, - (char)30, (char)31, (char)32 - }; - - // <summary> - // Return a copy of the string stripped of any non-printable character at the beginning and the end. The optional arguments are used to toggle stripping on the left and right edges respectively. - // </summary> - public static string StripEdges(this string instance, bool left = true, bool right = true) - { - if (left) - { - if (right) - return instance.Trim(_nonPrintable); - return instance.TrimStart(_nonPrintable); - } - - return instance.TrimEnd(_nonPrintable); - } - - // <summary> - // Return part of the string from the position [code]from[/code], with length [code]len[/code]. - // </summary> - public static string Substr(this string instance, int from, int len) - { - int max = instance.Length - from; - return instance.Substring(from, len > max ? max : len); - } - - // <summary> - // Convert the String (which is a character array) to PoolByteArray (which is an array of bytes). The conversion is speeded up in comparison to to_utf8() with the assumption that all the characters the String contains are only ASCII characters. - // </summary> - public static byte[] ToAscii(this string instance) - { - return Encoding.ASCII.GetBytes(instance); - } - - // <summary> - // Convert a string, containing a decimal number, into a [code]float[/code]. - // </summary> - public static float ToFloat(this string instance) - { - return float.Parse(instance); - } - - // <summary> - // Convert a string, containing an integer number, into an [code]int[/code]. - // </summary> - public static int ToInt(this string instance) - { - return int.Parse(instance); - } - - // <summary> - // Return the string converted to lowercase. - // </summary> - public static string ToLower(this string instance) - { - return instance.ToLower(); - } - - // <summary> - // Return the string converted to uppercase. - // </summary> - public static string ToUpper(this string instance) - { - return instance.ToUpper(); - } - - // <summary> - // Convert the String (which is an array of characters) to PoolByteArray (which is an array of bytes). The conversion is a bit slower than to_ascii(), but supports all UTF-8 characters. Therefore, you should prefer this function over to_ascii(). - // </summary> - public static byte[] ToUTF8(this string instance) - { - return Encoding.UTF8.GetBytes(instance); - } - - // <summary> - // Return a copy of the string with special characters escaped using the XML standard. - // </summary> - public static string XMLEscape(this string instance) - { - return SecurityElement.Escape(instance); - } - - // <summary> - // Return a copy of the string with escaped characters replaced by their meanings according to the XML standard. - // </summary> - public static string XMLUnescape(this string instance) - { - return SecurityElement.FromString(instance).Text; - } - } -} diff --git a/modules/mono/glue/Managed/Files/Transform.cs b/modules/mono/glue/Managed/Files/Transform.cs deleted file mode 100644 index 0b84050f07..0000000000 --- a/modules/mono/glue/Managed/Files/Transform.cs +++ /dev/null @@ -1,216 +0,0 @@ -using System; -using System.Runtime.InteropServices; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - [Serializable] - [StructLayout(LayoutKind.Sequential)] - public struct Transform : IEquatable<Transform> - { - public Basis basis; - public Vector3 origin; - - public Transform AffineInverse() - { - Basis basisInv = basis.Inverse(); - return new Transform(basisInv, basisInv.Xform(-origin)); - } - - public Transform InterpolateWith(Transform transform, real_t c) - { - /* not sure if very "efficient" but good enough? */ - - Vector3 sourceScale = basis.Scale; - Quat sourceRotation = basis.RotationQuat(); - Vector3 sourceLocation = origin; - - Vector3 destinationScale = transform.basis.Scale; - Quat destinationRotation = transform.basis.RotationQuat(); - Vector3 destinationLocation = transform.origin; - - var interpolated = new Transform(); - interpolated.basis.SetQuatScale(sourceRotation.Slerp(destinationRotation, c).Normalized(), sourceScale.LinearInterpolate(destinationScale, c)); - interpolated.origin = sourceLocation.LinearInterpolate(destinationLocation, c); - - return interpolated; - } - - public Transform Inverse() - { - Basis basisTr = basis.Transposed(); - return new Transform(basisTr, basisTr.Xform(-origin)); - } - - public Transform LookingAt(Vector3 target, Vector3 up) - { - var t = this; - t.SetLookAt(origin, target, up); - return t; - } - - public Transform Orthonormalized() - { - return new Transform(basis.Orthonormalized(), origin); - } - - public Transform Rotated(Vector3 axis, real_t phi) - { - return new Transform(new Basis(axis, phi), new Vector3()) * this; - } - - public Transform Scaled(Vector3 scale) - { - return new Transform(basis.Scaled(scale), origin * scale); - } - - public void SetLookAt(Vector3 eye, Vector3 target, Vector3 up) - { - // Make rotation matrix - // Z vector - Vector3 column2 = eye - target; - - column2.Normalize(); - - Vector3 column1 = up; - - Vector3 column0 = column1.Cross(column2); - - // Recompute Y = Z cross X - column1 = column2.Cross(column0); - - column0.Normalize(); - column1.Normalize(); - - basis = new Basis(column0, column1, column2); - - origin = eye; - } - - public Transform Translated(Vector3 ofs) - { - return new Transform(basis, new Vector3 - ( - origin[0] += basis.Row0.Dot(ofs), - origin[1] += basis.Row1.Dot(ofs), - origin[2] += basis.Row2.Dot(ofs) - )); - } - - public Vector3 Xform(Vector3 v) - { - return new Vector3 - ( - basis.Row0.Dot(v) + origin.x, - basis.Row1.Dot(v) + origin.y, - basis.Row2.Dot(v) + origin.z - ); - } - - public Vector3 XformInv(Vector3 v) - { - Vector3 vInv = v - origin; - - return new Vector3 - ( - basis.Row0[0] * vInv.x + basis.Row1[0] * vInv.y + basis.Row2[0] * vInv.z, - basis.Row0[1] * vInv.x + basis.Row1[1] * vInv.y + basis.Row2[1] * vInv.z, - basis.Row0[2] * vInv.x + basis.Row1[2] * vInv.y + basis.Row2[2] * vInv.z - ); - } - - // Constants - private static readonly Transform _identity = new Transform(Basis.Identity, Vector3.Zero); - private static readonly Transform _flipX = new Transform(new Basis(-1, 0, 0, 0, 1, 0, 0, 0, 1), Vector3.Zero); - private static readonly Transform _flipY = new Transform(new Basis(1, 0, 0, 0, -1, 0, 0, 0, 1), Vector3.Zero); - private static readonly Transform _flipZ = new Transform(new Basis(1, 0, 0, 0, 1, 0, 0, 0, -1), Vector3.Zero); - - public static Transform Identity { get { return _identity; } } - public static Transform FlipX { get { return _flipX; } } - public static Transform FlipY { get { return _flipY; } } - public static Transform FlipZ { get { return _flipZ; } } - - // Constructors - public Transform(Vector3 column0, Vector3 column1, Vector3 column2, Vector3 origin) - { - basis = new Basis(column0, column1, column2); - this.origin = origin; - } - - public Transform(Quat quat, Vector3 origin) - { - basis = new Basis(quat); - this.origin = origin; - } - - public Transform(Basis basis, Vector3 origin) - { - this.basis = basis; - this.origin = origin; - } - - public static Transform operator *(Transform left, Transform right) - { - left.origin = left.Xform(right.origin); - left.basis *= right.basis; - return left; - } - - public static bool operator ==(Transform left, Transform right) - { - return left.Equals(right); - } - - public static bool operator !=(Transform left, Transform right) - { - return !left.Equals(right); - } - - public override bool Equals(object obj) - { - if (obj is Transform) - { - return Equals((Transform)obj); - } - - return false; - } - - public bool Equals(Transform other) - { - return basis.Equals(other.basis) && origin.Equals(other.origin); - } - - public bool IsEqualApprox(Transform other) - { - return basis.IsEqualApprox(other.basis) && origin.IsEqualApprox(other.origin); - } - - public override int GetHashCode() - { - return basis.GetHashCode() ^ origin.GetHashCode(); - } - - public override string ToString() - { - return String.Format("{0} - {1}", new object[] - { - basis.ToString(), - origin.ToString() - }); - } - - public string ToString(string format) - { - return String.Format("{0} - {1}", new object[] - { - basis.ToString(format), - origin.ToString(format) - }); - } - } -} diff --git a/modules/mono/glue/Managed/Files/Transform2D.cs b/modules/mono/glue/Managed/Files/Transform2D.cs deleted file mode 100644 index 77ea3e5830..0000000000 --- a/modules/mono/glue/Managed/Files/Transform2D.cs +++ /dev/null @@ -1,390 +0,0 @@ -using System; -using System.Runtime.InteropServices; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - [Serializable] - [StructLayout(LayoutKind.Sequential)] - public struct Transform2D : IEquatable<Transform2D> - { - public Vector2 x; - public Vector2 y; - public Vector2 origin; - - public real_t Rotation - { - get - { - real_t det = BasisDeterminant(); - Transform2D t = Orthonormalized(); - if (det < 0) - { - t.ScaleBasis(new Vector2(1, -1)); - } - return Mathf.Atan2(t.x.y, t.x.x); - } - set - { - Vector2 scale = Scale; - x.x = y.y = Mathf.Cos(value); - x.y = y.x = Mathf.Sin(value); - y.x *= -1; - Scale = scale; - } - } - - public Vector2 Scale - { - get - { - real_t detSign = Mathf.Sign(BasisDeterminant()); - return new Vector2(x.Length(), detSign * y.Length()); - } - set - { - x = x.Normalized(); - y = y.Normalized(); - x *= value.x; - y *= value.y; - } - } - - public Vector2 this[int rowIndex] - { - get - { - switch (rowIndex) - { - case 0: - return x; - case 1: - return y; - case 2: - return origin; - default: - throw new IndexOutOfRangeException(); - } - } - set - { - switch (rowIndex) - { - case 0: - x = value; - return; - case 1: - y = value; - return; - case 2: - origin = value; - return; - default: - throw new IndexOutOfRangeException(); - } - } - } - - public real_t this[int rowIndex, int columnIndex] - { - get - { - switch (rowIndex) - { - case 0: - return x[columnIndex]; - case 1: - return y[columnIndex]; - case 2: - return origin[columnIndex]; - default: - throw new IndexOutOfRangeException(); - } - } - set - { - switch (rowIndex) - { - case 0: - x[columnIndex] = value; - return; - case 1: - y[columnIndex] = value; - return; - case 2: - origin[columnIndex] = value; - return; - default: - throw new IndexOutOfRangeException(); - } - } - } - - public Transform2D AffineInverse() - { - real_t det = BasisDeterminant(); - - if (det == 0) - throw new InvalidOperationException("Matrix determinant is zero and cannot be inverted."); - - var inv = this; - - real_t temp = inv[0, 0]; - inv[0, 0] = inv[1, 1]; - inv[1, 1] = temp; - - real_t detInv = 1.0f / det; - - inv[0] *= new Vector2(detInv, -detInv); - inv[1] *= new Vector2(-detInv, detInv); - - inv[2] = inv.BasisXform(-inv[2]); - - return inv; - } - - private real_t BasisDeterminant() - { - return x.x * y.y - x.y * y.x; - } - - public Vector2 BasisXform(Vector2 v) - { - return new Vector2(Tdotx(v), Tdoty(v)); - } - - public Vector2 BasisXformInv(Vector2 v) - { - return new Vector2(x.Dot(v), y.Dot(v)); - } - - public Transform2D InterpolateWith(Transform2D m, real_t c) - { - real_t r1 = Rotation; - real_t r2 = m.Rotation; - - Vector2 s1 = Scale; - Vector2 s2 = m.Scale; - - // Slerp rotation - var v1 = new Vector2(Mathf.Cos(r1), Mathf.Sin(r1)); - var v2 = new Vector2(Mathf.Cos(r2), Mathf.Sin(r2)); - - real_t dot = v1.Dot(v2); - - // Clamp dot to [-1, 1] - dot = dot < -1.0f ? -1.0f : (dot > 1.0f ? 1.0f : dot); - - Vector2 v; - - if (dot > 0.9995f) - { - // Linearly interpolate to avoid numerical precision issues - v = v1.LinearInterpolate(v2, c).Normalized(); - } - else - { - real_t angle = c * Mathf.Acos(dot); - Vector2 v3 = (v2 - v1 * dot).Normalized(); - v = v1 * Mathf.Cos(angle) + v3 * Mathf.Sin(angle); - } - - // Extract parameters - Vector2 p1 = origin; - Vector2 p2 = m.origin; - - // Construct matrix - var res = new Transform2D(Mathf.Atan2(v.y, v.x), p1.LinearInterpolate(p2, c)); - Vector2 scale = s1.LinearInterpolate(s2, c); - res.x *= scale; - res.y *= scale; - - return res; - } - - public Transform2D Inverse() - { - var inv = this; - - // Swap - real_t temp = inv.x.y; - inv.x.y = inv.y.x; - inv.y.x = temp; - - inv.origin = inv.BasisXform(-inv.origin); - - return inv; - } - - public Transform2D Orthonormalized() - { - var on = this; - - Vector2 onX = on.x; - Vector2 onY = on.y; - - onX.Normalize(); - onY = onY - onX * onX.Dot(onY); - onY.Normalize(); - - on.x = onX; - on.y = onY; - - return on; - } - - public Transform2D Rotated(real_t phi) - { - return this * new Transform2D(phi, new Vector2()); - } - - public Transform2D Scaled(Vector2 scale) - { - var copy = this; - copy.x *= scale; - copy.y *= scale; - copy.origin *= scale; - return copy; - } - - private void ScaleBasis(Vector2 scale) - { - x.x *= scale.x; - x.y *= scale.y; - y.x *= scale.x; - y.y *= scale.y; - } - - private real_t Tdotx(Vector2 with) - { - return this[0, 0] * with[0] + this[1, 0] * with[1]; - } - - private real_t Tdoty(Vector2 with) - { - return this[0, 1] * with[0] + this[1, 1] * with[1]; - } - - public Transform2D Translated(Vector2 offset) - { - var copy = this; - copy.origin += copy.BasisXform(offset); - return copy; - } - - public Vector2 Xform(Vector2 v) - { - return new Vector2(Tdotx(v), Tdoty(v)) + origin; - } - - public Vector2 XformInv(Vector2 v) - { - Vector2 vInv = v - origin; - return new Vector2(x.Dot(vInv), y.Dot(vInv)); - } - - // Constants - private static readonly Transform2D _identity = new Transform2D(1, 0, 0, 1, 0, 0); - private static readonly Transform2D _flipX = new Transform2D(-1, 0, 0, 1, 0, 0); - private static readonly Transform2D _flipY = new Transform2D(1, 0, 0, -1, 0, 0); - - public static Transform2D Identity => _identity; - public static Transform2D FlipX => _flipX; - public static Transform2D FlipY => _flipY; - - // Constructors - public Transform2D(Vector2 xAxis, Vector2 yAxis, Vector2 originPos) - { - x = xAxis; - y = yAxis; - origin = originPos; - } - - // Arguments are named such that xy is equal to calling x.y - public Transform2D(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy) - { - x = new Vector2(xx, xy); - y = new Vector2(yx, yy); - origin = new Vector2(ox, oy); - } - - public Transform2D(real_t rot, Vector2 pos) - { - x.x = y.y = Mathf.Cos(rot); - x.y = y.x = Mathf.Sin(rot); - y.x *= -1; - origin = pos; - } - - public static Transform2D operator *(Transform2D left, Transform2D right) - { - left.origin = left.Xform(right.origin); - - real_t x0 = left.Tdotx(right.x); - real_t x1 = left.Tdoty(right.x); - real_t y0 = left.Tdotx(right.y); - real_t y1 = left.Tdoty(right.y); - - left.x.x = x0; - left.x.y = x1; - left.y.x = y0; - left.y.y = y1; - - return left; - } - - public static bool operator ==(Transform2D left, Transform2D right) - { - return left.Equals(right); - } - - public static bool operator !=(Transform2D left, Transform2D right) - { - return !left.Equals(right); - } - - public override bool Equals(object obj) - { - return obj is Transform2D transform2D && Equals(transform2D); - } - - public bool Equals(Transform2D other) - { - return x.Equals(other.x) && y.Equals(other.y) && origin.Equals(other.origin); - } - - public bool IsEqualApprox(Transform2D other) - { - return x.IsEqualApprox(other.x) && y.IsEqualApprox(other.y) && origin.IsEqualApprox(other.origin); - } - - public override int GetHashCode() - { - return x.GetHashCode() ^ y.GetHashCode() ^ origin.GetHashCode(); - } - - public override string ToString() - { - return String.Format("({0}, {1}, {2})", new object[] - { - x.ToString(), - y.ToString(), - origin.ToString() - }); - } - - public string ToString(string format) - { - return String.Format("({0}, {1}, {2})", new object[] - { - x.ToString(format), - y.ToString(format), - origin.ToString(format) - }); - } - } -} diff --git a/modules/mono/glue/Managed/Files/Vector2.cs b/modules/mono/glue/Managed/Files/Vector2.cs deleted file mode 100644 index f92453f546..0000000000 --- a/modules/mono/glue/Managed/Files/Vector2.cs +++ /dev/null @@ -1,489 +0,0 @@ -// file: core/math/math_2d.h -// commit: 7ad14e7a3e6f87ddc450f7e34621eb5200808451 -// file: core/math/math_2d.cpp -// commit: 7ad14e7a3e6f87ddc450f7e34621eb5200808451 -// file: core/variant_call.cpp -// commit: 5ad9be4c24e9d7dc5672fdc42cea896622fe5685 -using System; -using System.Runtime.InteropServices; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - /// <summary> - /// 2-element structure that can be used to represent positions in 2D space or any other pair of numeric values. - /// </summary> - [Serializable] - [StructLayout(LayoutKind.Sequential)] - public struct Vector2 : IEquatable<Vector2> - { - public enum Axis - { - X = 0, - Y - } - - public real_t x; - public real_t y; - - public real_t this[int index] - { - get - { - switch (index) - { - case 0: - return x; - case 1: - return y; - default: - throw new IndexOutOfRangeException(); - } - } - set - { - switch (index) - { - case 0: - x = value; - return; - case 1: - y = value; - return; - default: - throw new IndexOutOfRangeException(); - } - } - } - - internal void Normalize() - { - real_t lengthsq = LengthSquared(); - - if (lengthsq == 0) - { - x = y = 0f; - } - else - { - real_t length = Mathf.Sqrt(lengthsq); - x /= length; - y /= length; - } - } - - public real_t Cross(Vector2 b) - { - return x * b.y - y * b.x; - } - - public Vector2 Abs() - { - return new Vector2(Mathf.Abs(x), Mathf.Abs(y)); - } - - public real_t Angle() - { - return Mathf.Atan2(y, x); - } - - public real_t AngleTo(Vector2 to) - { - return Mathf.Atan2(Cross(to), Dot(to)); - } - - public real_t AngleToPoint(Vector2 to) - { - return Mathf.Atan2(y - to.y, x - to.x); - } - - public real_t Aspect() - { - return x / y; - } - - public Vector2 Bounce(Vector2 n) - { - return -Reflect(n); - } - - public Vector2 Ceil() - { - return new Vector2(Mathf.Ceil(x), Mathf.Ceil(y)); - } - - public Vector2 Clamped(real_t length) - { - var v = this; - real_t l = Length(); - - if (l > 0 && length < l) - { - v /= l; - v *= length; - } - - return v; - } - - public Vector2 CubicInterpolate(Vector2 b, Vector2 preA, Vector2 postB, real_t t) - { - var p0 = preA; - var p1 = this; - var p2 = b; - var p3 = postB; - - real_t t2 = t * t; - real_t t3 = t2 * t; - - return 0.5f * (p1 * 2.0f + - (-p0 + p2) * t + - (2.0f * p0 - 5.0f * p1 + 4 * p2 - p3) * t2 + - (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3); - } - - public Vector2 DirectionTo(Vector2 b) - { - return new Vector2(b.x - x, b.y - y).Normalized(); - } - - public real_t DistanceSquaredTo(Vector2 to) - { - return (x - to.x) * (x - to.x) + (y - to.y) * (y - to.y); - } - - public real_t DistanceTo(Vector2 to) - { - return Mathf.Sqrt((x - to.x) * (x - to.x) + (y - to.y) * (y - to.y)); - } - - public real_t Dot(Vector2 with) - { - return x * with.x + y * with.y; - } - - public Vector2 Floor() - { - return new Vector2(Mathf.Floor(x), Mathf.Floor(y)); - } - - public bool IsNormalized() - { - return Mathf.Abs(LengthSquared() - 1.0f) < Mathf.Epsilon; - } - - public real_t Length() - { - return Mathf.Sqrt(x * x + y * y); - } - - public real_t LengthSquared() - { - return x * x + y * y; - } - - public Vector2 LinearInterpolate(Vector2 b, real_t t) - { - var res = this; - - res.x += t * (b.x - x); - res.y += t * (b.y - y); - - return res; - } - - public Vector2 MoveToward(Vector2 to, real_t delta) - { - var v = this; - var vd = to - v; - var len = vd.Length(); - return len <= delta || len < Mathf.Epsilon ? to : v + vd / len * delta; - } - - public Vector2 Normalized() - { - var v = this; - v.Normalize(); - return v; - } - - public Vector2 PosMod(real_t mod) - { - Vector2 v; - v.x = Mathf.PosMod(x, mod); - v.y = Mathf.PosMod(y, mod); - return v; - } - - public Vector2 PosMod(Vector2 modv) - { - Vector2 v; - v.x = Mathf.PosMod(x, modv.x); - v.y = Mathf.PosMod(y, modv.y); - return v; - } - - public Vector2 Project(Vector2 onNormal) - { - return onNormal * (Dot(onNormal) / onNormal.LengthSquared()); - } - - public Vector2 Reflect(Vector2 n) - { - return 2.0f * n * Dot(n) - this; - } - - public Vector2 Rotated(real_t phi) - { - real_t rads = Angle() + phi; - return new Vector2(Mathf.Cos(rads), Mathf.Sin(rads)) * Length(); - } - - public Vector2 Round() - { - return new Vector2(Mathf.Round(x), Mathf.Round(y)); - } - - [Obsolete("Set is deprecated. Use the Vector2(" + nameof(real_t) + ", " + nameof(real_t) + ") constructor instead.", error: true)] - public void Set(real_t x, real_t y) - { - this.x = x; - this.y = y; - } - [Obsolete("Set is deprecated. Use the Vector2(" + nameof(Vector2) + ") constructor instead.", error: true)] - public void Set(Vector2 v) - { - x = v.x; - y = v.y; - } - - public Vector2 Sign() - { - Vector2 v; - v.x = Mathf.Sign(x); - v.y = Mathf.Sign(y); - return v; - } - - public Vector2 Slerp(Vector2 b, real_t t) - { - real_t theta = AngleTo(b); - return Rotated(theta * t); - } - - public Vector2 Slide(Vector2 n) - { - return this - n * Dot(n); - } - - public Vector2 Snapped(Vector2 by) - { - return new Vector2(Mathf.Stepify(x, by.x), Mathf.Stepify(y, by.y)); - } - - public Vector2 Tangent() - { - return new Vector2(y, -x); - } - - // Constants - private static readonly Vector2 _zero = new Vector2(0, 0); - private static readonly Vector2 _one = new Vector2(1, 1); - private static readonly Vector2 _negOne = new Vector2(-1, -1); - private static readonly Vector2 _inf = new Vector2(Mathf.Inf, Mathf.Inf); - - private static readonly Vector2 _up = new Vector2(0, -1); - private static readonly Vector2 _down = new Vector2(0, 1); - private static readonly Vector2 _right = new Vector2(1, 0); - private static readonly Vector2 _left = new Vector2(-1, 0); - - public static Vector2 Zero { get { return _zero; } } - public static Vector2 NegOne { get { return _negOne; } } - public static Vector2 One { get { return _one; } } - public static Vector2 Inf { get { return _inf; } } - - public static Vector2 Up { get { return _up; } } - public static Vector2 Down { get { return _down; } } - public static Vector2 Right { get { return _right; } } - public static Vector2 Left { get { return _left; } } - - // Constructors - public Vector2(real_t x, real_t y) - { - this.x = x; - this.y = y; - } - public Vector2(Vector2 v) - { - x = v.x; - y = v.y; - } - - public static Vector2 operator +(Vector2 left, Vector2 right) - { - left.x += right.x; - left.y += right.y; - return left; - } - - public static Vector2 operator -(Vector2 left, Vector2 right) - { - left.x -= right.x; - left.y -= right.y; - return left; - } - - public static Vector2 operator -(Vector2 vec) - { - vec.x = -vec.x; - vec.y = -vec.y; - return vec; - } - - public static Vector2 operator *(Vector2 vec, real_t scale) - { - vec.x *= scale; - vec.y *= scale; - return vec; - } - - public static Vector2 operator *(real_t scale, Vector2 vec) - { - vec.x *= scale; - vec.y *= scale; - return vec; - } - - public static Vector2 operator *(Vector2 left, Vector2 right) - { - left.x *= right.x; - left.y *= right.y; - return left; - } - - public static Vector2 operator /(Vector2 vec, real_t scale) - { - vec.x /= scale; - vec.y /= scale; - return vec; - } - - public static Vector2 operator /(Vector2 left, Vector2 right) - { - left.x /= right.x; - left.y /= right.y; - return left; - } - - public static Vector2 operator %(Vector2 vec, real_t divisor) - { - vec.x %= divisor; - vec.y %= divisor; - return vec; - } - - public static Vector2 operator %(Vector2 vec, Vector2 divisorv) - { - vec.x %= divisorv.x; - vec.y %= divisorv.y; - return vec; - } - - public static bool operator ==(Vector2 left, Vector2 right) - { - return left.Equals(right); - } - - public static bool operator !=(Vector2 left, Vector2 right) - { - return !left.Equals(right); - } - - public static bool operator <(Vector2 left, Vector2 right) - { - if (Mathf.IsEqualApprox(left.x, right.x)) - { - return left.y < right.y; - } - - return left.x < right.x; - } - - public static bool operator >(Vector2 left, Vector2 right) - { - if (Mathf.IsEqualApprox(left.x, right.x)) - { - return left.y > right.y; - } - - return left.x > right.x; - } - - public static bool operator <=(Vector2 left, Vector2 right) - { - if (Mathf.IsEqualApprox(left.x, right.x)) - { - return left.y <= right.y; - } - - return left.x <= right.x; - } - - public static bool operator >=(Vector2 left, Vector2 right) - { - if (Mathf.IsEqualApprox(left.x, right.x)) - { - return left.y >= right.y; - } - - return left.x >= right.x; - } - - public override bool Equals(object obj) - { - if (obj is Vector2) - { - return Equals((Vector2)obj); - } - - return false; - } - - public bool Equals(Vector2 other) - { - return x == other.x && y == other.y; - } - - public bool IsEqualApprox(Vector2 other) - { - return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y); - } - - public override int GetHashCode() - { - return y.GetHashCode() ^ x.GetHashCode(); - } - - public override string ToString() - { - return String.Format("({0}, {1})", new object[] - { - x.ToString(), - y.ToString() - }); - } - - public string ToString(string format) - { - return String.Format("({0}, {1})", new object[] - { - x.ToString(format), - y.ToString(format) - }); - } - } -} diff --git a/modules/mono/glue/Managed/Files/Vector3.cs b/modules/mono/glue/Managed/Files/Vector3.cs deleted file mode 100644 index 025b09199f..0000000000 --- a/modules/mono/glue/Managed/Files/Vector3.cs +++ /dev/null @@ -1,549 +0,0 @@ -// file: core/math/vector3.h -// commit: bd282ff43f23fe845f29a3e25c8efc01bd65ffb0 -// file: core/math/vector3.cpp -// commit: 7ad14e7a3e6f87ddc450f7e34621eb5200808451 -// file: core/variant_call.cpp -// commit: 5ad9be4c24e9d7dc5672fdc42cea896622fe5685 -using System; -using System.Runtime.InteropServices; -#if REAL_T_IS_DOUBLE -using real_t = System.Double; -#else -using real_t = System.Single; -#endif - -namespace Godot -{ - /// <summary> - /// 3-element structure that can be used to represent positions in 3D space or any other pair of numeric values. - /// </summary> - [Serializable] - [StructLayout(LayoutKind.Sequential)] - public struct Vector3 : IEquatable<Vector3> - { - public enum Axis - { - X = 0, - Y, - Z - } - - public real_t x; - public real_t y; - public real_t z; - - public real_t this[int index] - { - get - { - switch (index) - { - case 0: - return x; - case 1: - return y; - case 2: - return z; - default: - throw new IndexOutOfRangeException(); - } - } - set - { - switch (index) - { - case 0: - x = value; - return; - case 1: - y = value; - return; - case 2: - z = value; - return; - default: - throw new IndexOutOfRangeException(); - } - } - } - - internal void Normalize() - { - real_t lengthsq = LengthSquared(); - - if (lengthsq == 0) - { - x = y = z = 0f; - } - else - { - real_t length = Mathf.Sqrt(lengthsq); - x /= length; - y /= length; - z /= length; - } - } - - public Vector3 Abs() - { - return new Vector3(Mathf.Abs(x), Mathf.Abs(y), Mathf.Abs(z)); - } - - public real_t AngleTo(Vector3 to) - { - return Mathf.Atan2(Cross(to).Length(), Dot(to)); - } - - public Vector3 Bounce(Vector3 n) - { - return -Reflect(n); - } - - public Vector3 Ceil() - { - return new Vector3(Mathf.Ceil(x), Mathf.Ceil(y), Mathf.Ceil(z)); - } - - public Vector3 Cross(Vector3 b) - { - return new Vector3 - ( - y * b.z - z * b.y, - z * b.x - x * b.z, - x * b.y - y * b.x - ); - } - - public Vector3 CubicInterpolate(Vector3 b, Vector3 preA, Vector3 postB, real_t t) - { - var p0 = preA; - var p1 = this; - var p2 = b; - var p3 = postB; - - real_t t2 = t * t; - real_t t3 = t2 * t; - - return 0.5f * ( - p1 * 2.0f + (-p0 + p2) * t + - (2.0f * p0 - 5.0f * p1 + 4f * p2 - p3) * t2 + - (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3 - ); - } - - public Vector3 DirectionTo(Vector3 b) - { - return new Vector3(b.x - x, b.y - y, b.z - z).Normalized(); - } - - public real_t DistanceSquaredTo(Vector3 b) - { - return (b - this).LengthSquared(); - } - - public real_t DistanceTo(Vector3 b) - { - return (b - this).Length(); - } - - public real_t Dot(Vector3 b) - { - return x * b.x + y * b.y + z * b.z; - } - - public Vector3 Floor() - { - return new Vector3(Mathf.Floor(x), Mathf.Floor(y), Mathf.Floor(z)); - } - - public Vector3 Inverse() - { - return new Vector3(1.0f / x, 1.0f / y, 1.0f / z); - } - - public bool IsNormalized() - { - return Mathf.Abs(LengthSquared() - 1.0f) < Mathf.Epsilon; - } - - public real_t Length() - { - real_t x2 = x * x; - real_t y2 = y * y; - real_t z2 = z * z; - - return Mathf.Sqrt(x2 + y2 + z2); - } - - public real_t LengthSquared() - { - real_t x2 = x * x; - real_t y2 = y * y; - real_t z2 = z * z; - - return x2 + y2 + z2; - } - - public Vector3 LinearInterpolate(Vector3 b, real_t t) - { - return new Vector3 - ( - x + t * (b.x - x), - y + t * (b.y - y), - z + t * (b.z - z) - ); - } - - public Vector3 MoveToward(Vector3 to, real_t delta) - { - var v = this; - var vd = to - v; - var len = vd.Length(); - return len <= delta || len < Mathf.Epsilon ? to : v + vd / len * delta; - } - - public Axis MaxAxis() - { - return x < y ? (y < z ? Axis.Z : Axis.Y) : (x < z ? Axis.Z : Axis.X); - } - - public Axis MinAxis() - { - return x < y ? (x < z ? Axis.X : Axis.Z) : (y < z ? Axis.Y : Axis.Z); - } - - public Vector3 Normalized() - { - var v = this; - v.Normalize(); - return v; - } - - public Basis Outer(Vector3 b) - { - return new Basis( - x * b.x, x * b.y, x * b.z, - y * b.x, y * b.y, y * b.z, - z * b.x, z * b.y, z * b.z - ); - } - - public Vector3 PosMod(real_t mod) - { - Vector3 v; - v.x = Mathf.PosMod(x, mod); - v.y = Mathf.PosMod(y, mod); - v.z = Mathf.PosMod(z, mod); - return v; - } - - public Vector3 PosMod(Vector3 modv) - { - Vector3 v; - v.x = Mathf.PosMod(x, modv.x); - v.y = Mathf.PosMod(y, modv.y); - v.z = Mathf.PosMod(z, modv.z); - return v; - } - - public Vector3 Project(Vector3 onNormal) - { - return onNormal * (Dot(onNormal) / onNormal.LengthSquared()); - } - - public Vector3 Reflect(Vector3 n) - { -#if DEBUG - if (!n.IsNormalized()) - throw new ArgumentException(String.Format("{0} is not normalized", n), nameof(n)); -#endif - return 2.0f * n * Dot(n) - this; - } - - public Vector3 Round() - { - return new Vector3(Mathf.Round(x), Mathf.Round(y), Mathf.Round(z)); - } - - public Vector3 Rotated(Vector3 axis, real_t phi) - { - return new Basis(axis, phi).Xform(this); - } - - [Obsolete("Set is deprecated. Use the Vector3(" + nameof(real_t) + ", " + nameof(real_t) + ", " + nameof(real_t) + ") constructor instead.", error: true)] - public void Set(real_t x, real_t y, real_t z) - { - this.x = x; - this.y = y; - this.z = z; - } - [Obsolete("Set is deprecated. Use the Vector3(" + nameof(Vector3) + ") constructor instead.", error: true)] - public void Set(Vector3 v) - { - x = v.x; - y = v.y; - z = v.z; - } - - public Vector3 Sign() - { - Vector3 v; - v.x = Mathf.Sign(x); - v.y = Mathf.Sign(y); - v.z = Mathf.Sign(z); - return v; - } - - public Vector3 Slerp(Vector3 b, real_t t) - { - real_t theta = AngleTo(b); - return Rotated(Cross(b), theta * t); - } - - public Vector3 Slide(Vector3 n) - { - return this - n * Dot(n); - } - - public Vector3 Snapped(Vector3 by) - { - return new Vector3 - ( - Mathf.Stepify(x, by.x), - Mathf.Stepify(y, by.y), - Mathf.Stepify(z, by.z) - ); - } - - public Basis ToDiagonalMatrix() - { - return new Basis( - x, 0f, 0f, - 0f, y, 0f, - 0f, 0f, z - ); - } - - // Constants - private static readonly Vector3 _zero = new Vector3(0, 0, 0); - private static readonly Vector3 _one = new Vector3(1, 1, 1); - private static readonly Vector3 _negOne = new Vector3(-1, -1, -1); - private static readonly Vector3 _inf = new Vector3(Mathf.Inf, Mathf.Inf, Mathf.Inf); - - private static readonly Vector3 _up = new Vector3(0, 1, 0); - private static readonly Vector3 _down = new Vector3(0, -1, 0); - private static readonly Vector3 _right = new Vector3(1, 0, 0); - private static readonly Vector3 _left = new Vector3(-1, 0, 0); - private static readonly Vector3 _forward = new Vector3(0, 0, -1); - private static readonly Vector3 _back = new Vector3(0, 0, 1); - - public static Vector3 Zero { get { return _zero; } } - public static Vector3 One { get { return _one; } } - public static Vector3 NegOne { get { return _negOne; } } - public static Vector3 Inf { get { return _inf; } } - - public static Vector3 Up { get { return _up; } } - public static Vector3 Down { get { return _down; } } - public static Vector3 Right { get { return _right; } } - public static Vector3 Left { get { return _left; } } - public static Vector3 Forward { get { return _forward; } } - public static Vector3 Back { get { return _back; } } - - // Constructors - public Vector3(real_t x, real_t y, real_t z) - { - this.x = x; - this.y = y; - this.z = z; - } - public Vector3(Vector3 v) - { - x = v.x; - y = v.y; - z = v.z; - } - - public static Vector3 operator +(Vector3 left, Vector3 right) - { - left.x += right.x; - left.y += right.y; - left.z += right.z; - return left; - } - - public static Vector3 operator -(Vector3 left, Vector3 right) - { - left.x -= right.x; - left.y -= right.y; - left.z -= right.z; - return left; - } - - public static Vector3 operator -(Vector3 vec) - { - vec.x = -vec.x; - vec.y = -vec.y; - vec.z = -vec.z; - return vec; - } - - public static Vector3 operator *(Vector3 vec, real_t scale) - { - vec.x *= scale; - vec.y *= scale; - vec.z *= scale; - return vec; - } - - public static Vector3 operator *(real_t scale, Vector3 vec) - { - vec.x *= scale; - vec.y *= scale; - vec.z *= scale; - return vec; - } - - public static Vector3 operator *(Vector3 left, Vector3 right) - { - left.x *= right.x; - left.y *= right.y; - left.z *= right.z; - return left; - } - - public static Vector3 operator /(Vector3 vec, real_t scale) - { - vec.x /= scale; - vec.y /= scale; - vec.z /= scale; - return vec; - } - - public static Vector3 operator /(Vector3 left, Vector3 right) - { - left.x /= right.x; - left.y /= right.y; - left.z /= right.z; - return left; - } - - public static Vector3 operator %(Vector3 vec, real_t divisor) - { - vec.x %= divisor; - vec.y %= divisor; - vec.z %= divisor; - return vec; - } - - public static Vector3 operator %(Vector3 vec, Vector3 divisorv) - { - vec.x %= divisorv.x; - vec.y %= divisorv.y; - vec.z %= divisorv.z; - return vec; - } - - public static bool operator ==(Vector3 left, Vector3 right) - { - return left.Equals(right); - } - - public static bool operator !=(Vector3 left, Vector3 right) - { - return !left.Equals(right); - } - - public static bool operator <(Vector3 left, Vector3 right) - { - if (Mathf.IsEqualApprox(left.x, right.x)) - { - if (Mathf.IsEqualApprox(left.y, right.y)) - return left.z < right.z; - return left.y < right.y; - } - - return left.x < right.x; - } - - public static bool operator >(Vector3 left, Vector3 right) - { - if (Mathf.IsEqualApprox(left.x, right.x)) - { - if (Mathf.IsEqualApprox(left.y, right.y)) - return left.z > right.z; - return left.y > right.y; - } - - return left.x > right.x; - } - - public static bool operator <=(Vector3 left, Vector3 right) - { - if (Mathf.IsEqualApprox(left.x, right.x)) - { - if (Mathf.IsEqualApprox(left.y, right.y)) - return left.z <= right.z; - return left.y < right.y; - } - - return left.x < right.x; - } - - public static bool operator >=(Vector3 left, Vector3 right) - { - if (Mathf.IsEqualApprox(left.x, right.x)) - { - if (Mathf.IsEqualApprox(left.y, right.y)) - return left.z >= right.z; - return left.y > right.y; - } - - return left.x > right.x; - } - - public override bool Equals(object obj) - { - if (obj is Vector3) - { - return Equals((Vector3)obj); - } - - return false; - } - - public bool Equals(Vector3 other) - { - return x == other.x && y == other.y && z == other.z; - } - - public bool IsEqualApprox(Vector3 other) - { - return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y) && Mathf.IsEqualApprox(z, other.z); - } - - public override int GetHashCode() - { - return y.GetHashCode() ^ x.GetHashCode() ^ z.GetHashCode(); - } - - public override string ToString() - { - return String.Format("({0}, {1}, {2})", new object[] - { - x.ToString(), - y.ToString(), - z.ToString() - }); - } - - public string ToString(string format) - { - return String.Format("({0}, {1}, {2})", new object[] - { - x.ToString(format), - y.ToString(format), - z.ToString(format) - }); - } - } -} |