computeSize static method
Vector2
computeSize(
- MapOrientation? orientation,
- Vector2 destTileSize,
- int tileWidth,
- int tileHeight,
- int mapWidth,
- int mapHeight,
- 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,
);
}
}