mirror of
https://github.com/SFML/SFML.git
synced 2025-02-08 17:38:00 +08:00
115 lines
4.5 KiB
C#
115 lines
4.5 KiB
C#
|
using System;
|
||
|
using System.Runtime.InteropServices;
|
||
|
|
||
|
namespace SFML
|
||
|
{
|
||
|
namespace Graphics
|
||
|
{
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// <summary>
|
||
|
/// Vector2 is an utility class for manipulating 2 dimensional
|
||
|
/// vectors with float components
|
||
|
/// </summary>
|
||
|
////////////////////////////////////////////////////////////
|
||
|
[StructLayout(LayoutKind.Sequential)]
|
||
|
public struct Vector2
|
||
|
{
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// <summary>
|
||
|
/// Construct the vector from its coordinates
|
||
|
/// </summary>
|
||
|
/// <param name="x">X coordinate</param>
|
||
|
/// <param name="y">Y coordinate</param>
|
||
|
////////////////////////////////////////////////////////////
|
||
|
public Vector2(float x, float y)
|
||
|
{
|
||
|
X = x;
|
||
|
Y = y;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// <summary>
|
||
|
/// Operator - overload ; returns the opposite of a vector
|
||
|
/// </summary>
|
||
|
/// <param name="v">Vector to negate</param>
|
||
|
/// <returns>-v</returns>
|
||
|
////////////////////////////////////////////////////////////
|
||
|
public static Vector2 operator -(Vector2 v)
|
||
|
{
|
||
|
return new Vector2(-v.X, -v.Y);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// <summary>
|
||
|
/// Operator - overload ; subtracts two vectors
|
||
|
/// </summary>
|
||
|
/// <param name="v1">First vector</param>
|
||
|
/// <param name="v2">Second vector</param>
|
||
|
/// <returns>v1 - v2</returns>
|
||
|
////////////////////////////////////////////////////////////
|
||
|
public static Vector2 operator -(Vector2 v1, Vector2 v2)
|
||
|
{
|
||
|
return new Vector2(v1.X - v2.X, v1.Y - v2.Y);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// <summary>
|
||
|
/// Operator + overload ; add two vectors
|
||
|
/// </summary>
|
||
|
/// <param name="v1">First vector</param>
|
||
|
/// <param name="v2">Second vector</param>
|
||
|
/// <returns>v1 + v2</returns>
|
||
|
////////////////////////////////////////////////////////////
|
||
|
public static Vector2 operator +(Vector2 v1, Vector2 v2)
|
||
|
{
|
||
|
return new Vector2(v1.X + v2.X, v1.Y + v2.Y);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// <summary>
|
||
|
/// Operator * overload ; multiply a vector by a scalar value
|
||
|
/// </summary>
|
||
|
/// <param name="v">Vector</param>
|
||
|
/// <param name="x">Scalar value</param>
|
||
|
/// <returns>v * x</returns>
|
||
|
////////////////////////////////////////////////////////////
|
||
|
public static Vector2 operator *(Vector2 v, float x)
|
||
|
{
|
||
|
return new Vector2(v.X * x, v.Y * x);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// <summary>
|
||
|
/// Operator * overload ; multiply a scalar value by a vector
|
||
|
/// </summary>
|
||
|
/// <param name="x">Scalar value</param>
|
||
|
/// <param name="v">Vector</param>
|
||
|
/// <returns>x * v</returns>
|
||
|
////////////////////////////////////////////////////////////
|
||
|
public static Vector2 operator *(float x, Vector2 v)
|
||
|
{
|
||
|
return new Vector2(v.X * x, v.Y * x);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////
|
||
|
/// <summary>
|
||
|
/// Operator / overload ; divide a vector by a scalar value
|
||
|
/// </summary>
|
||
|
/// <param name="v">Vector</param>
|
||
|
/// <param name="x">Scalar value</param>
|
||
|
/// <returns>v / x</returns>
|
||
|
////////////////////////////////////////////////////////////
|
||
|
public static Vector2 operator /(Vector2 v, float x)
|
||
|
{
|
||
|
return new Vector2(v.X / x, v.Y / x);
|
||
|
}
|
||
|
|
||
|
/// <summary>X (horizontal) component of the vector</summary>
|
||
|
public float X;
|
||
|
|
||
|
/// <summary>Y (vertical) component of the vector</summary>
|
||
|
public float Y;
|
||
|
}
|
||
|
}
|
||
|
}
|