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;
}
}
}