В настоящее время я пытаюсь написать несколько классов, чтобы помочь мне в написании различных приложений и / или игр, которые в основном 2D. Одной из вещей, которые мне действительно нужны (так как класс C # XNA "Point" отстой) был класс IntVector2, который должен быть очень похож на стандартный класс XNA "Vector2".
В настоящее время у меня есть эта кодировка (больше вещей после перерыва):
using System;
using Microsoft.Xna.Framework;
namespace LPG.Utilities
{
public class IntVector2
{
//Properties
public readonly int X = 0;
public readonly int Y = 0;
private float magnitude = 0;
//Special properties
public float Magnitude
{
get
{
if (this.magnitude == 0)
{
return (float)Math.Sqrt((Math.Abs(this.X ^ 2) + Math.Abs(this.Y ^ 2)));
}
else
{
return this.magnitude;
}
}
}
//Methods
public Vector2 Normalize()
{
return new Vector2(this.X / (float)this.Magnitude, this.Y / (float)this.Magnitude);
}
//Constructors
public IntVector2()
{
}
public IntVector2(int Both)
{
this.X = Both;
this.Y = Both;
}
public IntVector2(int X, int Y)
{
this.X = X;
this.Y = Y;
}
//Casts
public static implicit operator Vector2(IntVector2 From)
{
return new Vector2(From.X, From.Y);
}
public static implicit operator IntVector2(Vector2 From)
{
return new IntVector2((int)From.X, (int)From.Y);
}
public static implicit operator string(IntVector2 From)
{
return "(" + From.X + ", " + From.Y + ")";
}
//IntVector2-IntVector2 operators
public static IntVector2 operator +(IntVector2 First, IntVector2 Second)
{
return new IntVector2(First.X + Second.X, First.Y + Second.Y);
}
public static IntVector2 operator -(IntVector2 First, IntVector2 Second)
{
return new IntVector2(First.X - Second.X, First.Y - Second.Y);
}
public static IntVector2 operator *(IntVector2 First, IntVector2 Second)
{
return new IntVector2(First.X * Second.X, First.Y * Second.Y);
}
public static IntVector2 operator /(IntVector2 First, IntVector2 Second)
{
return new IntVector2(First.X / Second.X, First.Y / Second.Y);
}
//IntVector2-int operators:
public static IntVector2 operator +(IntVector2 First, int Second)
{
return new IntVector2(First.X + Second, First.Y + Second);
}
public static IntVector2 operator -(IntVector2 First, int Second)
{
return new IntVector2(First.X - Second, First.Y - Second);
}
public static IntVector2 operator *(IntVector2 First, int Second)
{
return new IntVector2(First.X * Second, First.Y * Second);
}
public static IntVector2 operator /(IntVector2 First, int Second)
{
return new IntVector2(First.X / Second, First.Y / Second);
}
}
}
Что я должен сделать, чтобы улучшить этот класс? Я думал об использовании структуры вместо класса, но я не достаточно опытен, чтобы принять реальное решение.
Заранее спасибо.