-
-
Save Metapyziks/de886423fa31c6ebfe65 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using Jurassic; | |
namespace GameAPI | |
{ | |
/// <summary> | |
/// A two component vector of floats. | |
/// </summary> | |
[GenerateBindings] | |
public struct Vector2f | |
{ | |
[BindMember] | |
public static explicit operator Vector2i(Vector2f vec) | |
{ | |
return new Vector2i((int) vec.X, (int) vec.Y); | |
} | |
[BindMember] | |
public static readonly Vector2f Zero = new Vector2f(0f, 0f); | |
[BindMember] | |
public static readonly Vector2f UnitX = new Vector2f(1f, 0f); | |
[BindMember] | |
public static readonly Vector2f UnitY = new Vector2f(0f, 1f); | |
#region Operators | |
public static Vector2f operator +(Vector2f vec) | |
{ | |
return vec; | |
} | |
[BindMember] | |
public static Vector2f operator+(Vector2f a, Vector2f b) | |
{ | |
return new Vector2f(a.X + b.X, a.Y + b.Y); | |
} | |
public static Vector2f operator -(Vector2f vec) | |
{ | |
return new Vector2f(-vec.X, -vec.Y); | |
} | |
[BindMember] | |
public static Vector2f operator -(Vector2f a, Vector2f b) | |
{ | |
return new Vector2f(a.X - b.X, a.Y - b.Y); | |
} | |
[BindMember("mulVec")] | |
public static Vector2f operator *(Vector2f a, Vector2f b) | |
{ | |
return new Vector2f(a.X * b.X, a.Y * b.Y); | |
} | |
[BindMember] | |
public static Vector2f operator *(Vector2f vec, float val) | |
{ | |
return new Vector2f(vec.X * val, vec.Y * val); | |
} | |
public static Vector2f operator *(float val, Vector2f vec) | |
{ | |
return new Vector2f(vec.X * val, vec.Y * val); | |
} | |
[BindMember("divVec")] | |
public static Vector2f operator /(Vector2f a, Vector2f b) | |
{ | |
return new Vector2f(a.X / b.X, a.Y / b.Y); | |
} | |
[BindMember] | |
public static Vector2f operator /(Vector2f vec, float val) | |
{ | |
return new Vector2f(vec.X / val, vec.Y / val); | |
} | |
public static Vector2f operator /(float val, Vector2f vec) | |
{ | |
return new Vector2f(val / vec.X, val / vec.Y); | |
} | |
#endregion | |
[BindMember] | |
public static Vector2f FromAngle(float radians) | |
{ | |
return new Vector2f(Mathf.Cos(radians), Mathf.Sin(radians)); | |
} | |
[BindMember] | |
public static Vector2f New(float x, float y) | |
{ | |
return new Vector2f(x, y); | |
} | |
[BindMember] | |
public float X; | |
[BindMember] | |
public float Y; | |
[BindMember] | |
public float Length { get { return Mathf.Sqrt(X * X + Y * Y); } } | |
[BindMember] | |
public float LengthSquared { get { return X * X + Y * Y; } } | |
[BindMember] | |
public Vector2f Normalized { get { return this / Length; } } | |
[BindMember] | |
public float Angle { get { return Mathf.Atan2(Y, X); } } | |
public Vector2f(float x, float y) | |
{ | |
X = x; Y = y; | |
} | |
[BindMember] | |
public float Dot(Vector2f vec) | |
{ | |
return X * vec.X + Y * vec.Y; | |
} | |
public override bool Equals(object obj) | |
{ | |
return obj is Vector2f && Equals((Vector2f) obj); | |
} | |
[BindMember] | |
public bool Equals(Vector2f vec) | |
{ | |
return X == vec.X && Y == vec.Y; | |
} | |
public override int GetHashCode() | |
{ | |
return (int) (X * 65536f) ^ (int) (Y * 65536f); | |
} | |
[BindMember] | |
public override String ToString() | |
{ | |
return String.Format("({0:F2}, {1:F2})", X, Y); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment