computeSize static method

  1. @visibleForTesting
Vector2 computeSize(
  1. MapOrientation? orientation,
  2. Vector2 destTileSize,
  3. int tileWidth,
  4. int tileHeight,
  5. int mapWidth,
  6. int mapHeight,
  7. StaggerAxis? staggerAxis,
)

Implementation

@visibleForTesting
static Vector2 computeSize(
  MapOrientation? orientation,
  Vector2 destTileSize,
  int tileWidth,
  int tileHeight,
  int mapWidth,
  int mapHeight,
  StaggerAxis? staggerAxis,
) {
  if (orientation == null) {
    return NotifyingVector2.zero();
  }
  final xScale = destTileSize.x / tileWidth;
  final yScale = destTileSize.y / tileHeight;

  final tileScaled = Vector2(
    tileWidth * xScale,
    tileHeight * yScale,
  );

  switch (orientation) {
    case MapOrientation.staggered:
      return staggerAxis == StaggerAxis.y
          ? Vector2(
              tileScaled.x * mapWidth + tileScaled.x / 2,
              (mapHeight + 1) * (tileScaled.y / 2),
            )
          : Vector2(
              (mapWidth + 1) * (tileScaled.x / 2),
              tileScaled.y * mapHeight + tileScaled.y / 2,
            );

    case MapOrientation.hexagonal:
      return staggerAxis == StaggerAxis.y
          ? Vector2(
              mapWidth * tileScaled.x + tileScaled.x / 2,
              tileScaled.y + ((mapHeight - 1) * tileScaled.y * 0.75),
            )
          : Vector2(
              tileScaled.x + ((mapWidth - 1) * tileScaled.x * 0.75),
              (mapHeight * tileScaled.y) + tileScaled.y / 2,
            );

    case MapOrientation.isometric:
      final halfTile = tileScaled / 2;
      final dimensions = mapWidth + mapHeight;
      return halfTile..scale(dimensions.toDouble());

    case MapOrientation.orthogonal:
      return Vector2(
        mapWidth * tileScaled.x,
        mapHeight * tileScaled.y,
      );
  }
}