private CompassDirection2 GetDirection(Vector2 v) { double angle = Math.Atan2(v.X, v.Y); int octant = (int)Math.Round(8 * angle / (2 * Math.PI) + 8) % 8; CompassDirection2 dir = (CompassDirection2)octant; return(dir); }
private void MoveMapOneTile(Vector2 direction) { CompassDirection2 dir = GetDirection(direction); switch (dir) { case CompassDirection2.North: CenterOnViewPosition(new Point((int)ViewCenter.X, (int)ViewCenter.Y - CellHeight)); break; case CompassDirection2.NorthEast: CenterOnViewPosition(new Point((int)ViewCenter.X + CellWidth, (int)ViewCenter.Y - CellHeight)); break; case CompassDirection2.East: CenterOnViewPosition(new Point((int)ViewCenter.X + CellWidth, (int)ViewCenter.Y)); break; case CompassDirection2.SouthEast: CenterOnViewPosition(new Point((int)ViewCenter.X + CellWidth, (int)ViewCenter.Y + CellHeight)); break; case CompassDirection2.South: CenterOnViewPosition(new Point((int)ViewCenter.X, (int)ViewCenter.Y + CellHeight)); break; case CompassDirection2.SouthWest: CenterOnViewPosition(new Point((int)ViewCenter.X - CellWidth, (int)ViewCenter.Y + CellHeight)); break; case CompassDirection2.West: CenterOnViewPosition(new Point((int)ViewCenter.X - CellWidth, (int)ViewCenter.Y)); break; case CompassDirection2.NorthWest: CenterOnViewPosition(new Point((int)ViewCenter.X - CellWidth, (int)ViewCenter.Y - CellHeight)); break; } }