public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
if (ReferenceEquals(this, obj))
return true;
DetailedMove move = (DetailedMove)obj;
return OriginalPosition.Equals(move.OriginalPosition)
&& NewPosition.Equals(move.NewPosition)
&& Player == move.Player
&& Promotion == move.Promotion
&& Piece == move.Piece
&& IsCapture == move.IsCapture
&& Castling == move.Castling;
}