/// <summary> /// Return the world position equivalent to a grid position. /// </summary> public Vector2 GetWorldPosition(int x, int y, CellWorldPositionType cellWorldPositionType = CellWorldPositionType.Corner) { if (cellWorldPositionType == CellWorldPositionType.Corner) { return(new Vector2(x * CellSize, y * CellSize) + OriginPosition.ToVector2()); } else // CellWorldPositionType.Center { float centerBiasX = Width % 2 == 0 ? CellSize / 2 : 0; float centerBiasY = Height % 2 == 0 ? CellSize / 2 : 0; Vector2 centerBias = new Vector2(centerBiasX, centerBiasY); return(new Vector2(x * CellSize, y * CellSize) + OriginPosition.ToVector2() + centerBias); } }
/// <summary> /// Return the equivalent grid position from a world position. (Not necesseraily valid). /// </summary> /// <param name="worldPosition"></param> /// <returns></returns> public int2 GetGridPosition(Vector2 worldPosition, CellWorldPositionType cellWorldPositionType = CellWorldPositionType.Corner) { if (cellWorldPositionType == CellWorldPositionType.Corner) { return(new int2(Mathf.RoundToInt((worldPosition.x - OriginPosition[0]) / CellSize), Mathf.RoundToInt((worldPosition.y - OriginPosition[1]) / CellSize))); } else // CellWorldPositionType.Center { float centerBiasX = Width % 2 == 0 ? CellSize / 2 : 0; float centerBiasY = Height % 2 == 0 ? CellSize / 2 : 0; return(new int2(Mathf.RoundToInt((worldPosition.x - OriginPosition[0] - centerBiasX) / CellSize), Mathf.RoundToInt((worldPosition.y - OriginPosition[1] - centerBiasY) / CellSize))); } }
/// <summary> /// Return the world position equivalent to a grid position. /// </summary> public Vector2 GetWorldPosition(int2 gridPosition, CellWorldPositionType cellWorldPositionType = CellWorldPositionType.Corner) { return(GetWorldPosition(gridPosition.x, gridPosition.y, cellWorldPositionType)); }