using System; using System.Runtime.InteropServices; namespace SFML { namespace Graphics { //////////////////////////////////////////////////////////// /// /// Vector2 is an utility class for manipulating 2 dimensional /// vectors with float components /// //////////////////////////////////////////////////////////// [StructLayout(LayoutKind.Sequential)] public struct Vector2 { //////////////////////////////////////////////////////////// /// /// Construct the vector from its coordinates /// /// X coordinate /// Y coordinate //////////////////////////////////////////////////////////// public Vector2(float x, float y) { X = x; Y = y; } //////////////////////////////////////////////////////////// /// /// Operator - overload ; returns the opposite of a vector /// /// Vector to negate /// -v //////////////////////////////////////////////////////////// public static Vector2 operator -(Vector2 v) { return new Vector2(-v.X, -v.Y); } //////////////////////////////////////////////////////////// /// /// Operator - overload ; subtracts two vectors /// /// First vector /// Second vector /// v1 - v2 //////////////////////////////////////////////////////////// public static Vector2 operator -(Vector2 v1, Vector2 v2) { return new Vector2(v1.X - v2.X, v1.Y - v2.Y); } //////////////////////////////////////////////////////////// /// /// Operator + overload ; add two vectors /// /// First vector /// Second vector /// v1 + v2 //////////////////////////////////////////////////////////// public static Vector2 operator +(Vector2 v1, Vector2 v2) { return new Vector2(v1.X + v2.X, v1.Y + v2.Y); } //////////////////////////////////////////////////////////// /// /// Operator * overload ; multiply a vector by a scalar value /// /// Vector /// Scalar value /// v * x //////////////////////////////////////////////////////////// public static Vector2 operator *(Vector2 v, float x) { return new Vector2(v.X * x, v.Y * x); } //////////////////////////////////////////////////////////// /// /// Operator * overload ; multiply a scalar value by a vector /// /// Scalar value /// Vector /// x * v //////////////////////////////////////////////////////////// public static Vector2 operator *(float x, Vector2 v) { return new Vector2(v.X * x, v.Y * x); } //////////////////////////////////////////////////////////// /// /// Operator / overload ; divide a vector by a scalar value /// /// Vector /// Scalar value /// v / x //////////////////////////////////////////////////////////// public static Vector2 operator /(Vector2 v, float x) { return new Vector2(v.X / x, v.Y / x); } //////////////////////////////////////////////////////////// /// /// Provide a string describing the object /// /// String description of the object //////////////////////////////////////////////////////////// public override string ToString() { return "[Vector2]" + " X(" + X + ")" + " Y(" + Y + ")"; } /// X (horizontal) component of the vector public float X; /// Y (vertical) component of the vector public float Y; } } }