generatePositions method
List<HexCoordinate>
generatePositions({
- required int columns,
- required int rows,
- required HexOrientation orientation,
- int? count,
override
根据策略生成坐标序列
columns 网格列数
rows 网格行数
orientation 六边形方向
count 需要的坐标数量(如果为null,返回所有可用坐标)
Implementation
@override
List<HexCoordinate> generatePositions({
required int columns,
required int rows,
required HexOrientation orientation,
int? count,
}) {
final isPointy = orientation == HexOrientation.pointy;
// 确定起始位置(网格中心)
final centerCol = columns ~/ 2;
final centerRow = rows ~/ 2;
final center =
startPosition ??
(isPointy
? HexCoordinate.fromOffsetPointy(centerCol, centerRow)
: HexCoordinate.fromOffsetFlat(centerCol, centerRow));
final positions = <HexCoordinate>[];
final maxRadius = (columns > rows ? columns : rows) + 1;
// 从中心开始螺旋向外
for (var radius = 0; radius <= maxRadius; radius++) {
final ring = center.spiral(radius);
for (final coord in ring) {
// 检查坐标是否在网格范围内
final (col, row) = isPointy
? coord.toOffsetPointy()
: coord.toOffsetFlat();
if (col >= 0 && col < columns && row >= 0 && row < rows) {
if (!positions.contains(coord)) {
positions.add(coord);
if (count != null && positions.length >= count) {
return positions;
}
}
}
}
}
return positions;
}