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()); }
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()); }