using System; using System.Collections; using System.Collections.Generic; using System.Runtime.Serialization; using UnityEngine; /// /// Representation of 2D vectors and points. /// namespace UnityLibrary { [Serializable] public struct Vector2Serializable : ISerializable { #region Parametres /// /// X component of the vector. /// public float x; /// /// Y component of the vector. /// public float y; #endregion #region Constructors /// /// Initializes a new instance of the struct. /// /// Vector. public Vector2Serializable(Vector2 vector) : this(vector.x, vector.y) { } /// /// Initializes a new instance of the struct. /// /// Vector. public Vector2Serializable(Vector3 vector) : this(vector.x, vector.y) { } /// /// Initializes a new instance of the struct. /// /// Vector. public Vector2Serializable(Vector4 vector) : this(vector.x, vector.y) { } /// /// Initializes a new instance of the struct. /// /// The x coordinate. /// The y coordinate. public Vector2Serializable(float x, float y) { this.x = x; this.y = y; } #endregion #region Methods public override bool Equals(object obj) { if (obj is Vector2Serializable || obj is Vector2) { Vector2Serializable vector = (Vector2Serializable)obj; return this.x == vector.x && this.y == vector.y; } return false; } public override int GetHashCode() { return this.x.GetHashCode() ^ this.y.GetHashCode() << 2; } public override string ToString() { return string.Format("({0}, {1})", this.x, this.y); } #endregion #region Operators Overload public static implicit operator Vector2Serializable(Vector2 vector) { return new Vector2Serializable(vector); } public static implicit operator Vector2(Vector2Serializable vector) { return new Vector2(vector.x, vector.y); } public static implicit operator Vector2Serializable(Vector3 vector) { return new Vector2Serializable(vector); } public static implicit operator Vector3(Vector2Serializable vector) { return new Vector3(vector.x, vector.y); } public static implicit operator Vector2Serializable(Vector4 vector) { return new Vector2Serializable(vector); } public static implicit operator Vector4(Vector2Serializable vector) { return new Vector4(vector.x, vector.y); } public static implicit operator Vector2Serializable(Vector3Serializable vector) { return new Vector2Serializable((Vector2)vector); } public static implicit operator Vector3Serializable(Vector2Serializable vector) { return new Vector3Serializable((Vector2)vector); } public static implicit operator Vector2Serializable(Vector4Serializable vector) { return new Vector2Serializable((Vector2)vector); } public static implicit operator Vector4Serializable(Vector2Serializable vector) { return new Vector4Serializable((Vector2)vector); } #endregion #region ISerializable implementation public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("x", this.x, typeof(float)); info.AddValue("y", this.y, typeof(float)); } #endregion } }