static public Vector2 GetPosition(int x, int y, Orientation orientation, int tileWidth, int tileHeight, int height, StaggerAxis staggerAxis, StaggerIndex staggerIndex, int hexSideLength) { if (orientation == Orientation.Orthogonal) { return(new Vector2(x * tileWidth, y * tileHeight)); } if (orientation == Orientation.Isometric) { var originX = (tileHeight * (height - 1)) / 2f; var originY = 0f; return(new Vector2( originX + (x * tileWidth - y * tileHeight) / 2f, originY + (x * tileWidth + y * tileHeight) / 2f)); } if (orientation == Orientation.Staggered) { return(GetPosition(x, y, Orientation.Hexagonal, tileWidth, tileHeight, height, staggerAxis, staggerIndex, 0)); } if (orientation == Orientation.Hexagonal) { if (staggerAxis == StaggerAxis.X) { var p = x * (tileWidth + hexSideLength) / 2; if (staggerIndex == StaggerIndex.Odd) { var q = y * tileHeight + (x % 2) * tileHeight * 0.5f; return(new Vector2(p, q)); } if (staggerIndex == StaggerIndex.Even) { var q = y * tileHeight + (1 - x % 2) * tileHeight * 0.5f; return(new Vector2(p, q)); } throw new System.ArgumentException(staggerIndex.ToString()); } if (staggerAxis == StaggerAxis.Y) { var reversedPosition = GetPosition(y, x, orientation, tileHeight, tileWidth, 0, StaggerAxis.X, staggerIndex, hexSideLength); return(new Vector2(reversedPosition.y, reversedPosition.x)); } throw new System.ArgumentException(staggerAxis.ToString()); } throw new System.ArgumentException(orientation.ToString()); }
public static void WriteAttribute(this XmlWriter writer, string localName, StaggerAxis value) { if (value == StaggerAxis.None) { return; } switch (value) { case StaggerAxis.x: writer.WriteAttributeString(localName, "x"); break; case StaggerAxis.y: writer.WriteAttributeString(localName, "y"); break; default: throw new ArgumentOutOfRangeException(nameof(value)); } }
static public Vector2 GetLayerPixelSize(Orientation orientation, int width, int height, int tileWidth, int tileHeight, StaggerAxis staggerAxis, int hexSideLength) { if (orientation == Orientation.Orthogonal) { return(new Vector2( tileWidth * width, tileHeight * height)); } if (orientation == Orientation.Isometric) { var length = (tileWidth * width + tileHeight * height) / 2f; return(new Vector2(length, length)); } if (orientation == Orientation.Staggered) { return(GetLayerPixelSize(Orientation.Hexagonal, width, height, tileWidth, tileHeight, staggerAxis, 0)); } if (orientation == Orientation.Hexagonal) { if (staggerAxis == StaggerAxis.X) { var x = (width - 1) * (tileWidth + hexSideLength) / 2 + tileWidth; float y = height * tileHeight; if (width > 1) { y += tileHeight / 2f; } return(new Vector2(x, y)); } if (staggerAxis == StaggerAxis.Y) { var reversedSize = GetLayerPixelSize(orientation, height, width, tileHeight, tileWidth, StaggerAxis.X, hexSideLength); return(new Vector2(reversedSize.y, reversedSize.x)); } throw new System.ArgumentException(staggerAxis.ToString()); } throw new System.ArgumentException(orientation.ToString()); }
/// <summary> /// Default constructor that initializes every render parameter /// </summary> /// <param name="orientation">Map's Orientation</param> /// <param name="renderOrder">Map's RenderOrder</param> /// <param name="staggerAxis">Map's StaggerAxis</param> /// <param name="staggerIndex">Map's StaggerIndex</param> /// <param name="width">Map's Width</param> /// <param name="height">Map's Height</param> /// <param name="tileWidth">Map's TileWidth</param> /// <param name="tileHeight">Map's TileHeight</param> /// <param name="hexSideLength">Hexagonal Map's stagger length</param> /// <param name="backgroundColor">Map's Background Color</param> public MapRenderParameters( Orientation orientation, RenderOrder renderOrder, StaggerAxis staggerAxis, StaggerIndex staggerIndex, int width, int height, int tileWidth, int tileHeight, int hexSideLength, Color backgroundColor) { Orientation = orientation; MapRenderOrder = renderOrder; MapStaggerAxis = staggerAxis; MapStaggerIndex = staggerIndex; Width = width; Height = height; TileWidth = tileWidth; TileHeight = tileHeight; HexSideLength = hexSideLength; BackgroundColor = backgroundColor; }