Skip to content

Offset is not applying to pointy hex when using distance method #109

@enpepolicy

Description

@enpepolicy

Describe the bug
Offset is not applying to pointy hex when using grid distance method

To Reproduce
const WideHex = defineHex({
dimensions: { xRadius: 50, yRadius: 30 }, // wide hexes
offset: -1, // or 1
})
const distanceCalculator = new Grid(WideHex, rectangle({ width: 10, height: 10 }))

console.log(
Starting coordinates:${boardTile.x},${boardTile.y},
Destination coordinates:${qBoardCoordinate},${rBoardCoordinate},
Distance:${distanceCalculator.distance( [boardTile.x, boardTile.y], [qBoardCoordinate, rBoardCoordinate] )},
distanceCalculator.toJSON(),
)

// Case 1

Starting coordinates:3,1 Destination coordinates:4,2 Distance:2 {
hexSettings: {
dimensions: { xRadius: 50, yRadius: 30 },
orientation: 'POINTY',
origin: { x: 0, y: 0 },
offset: -1
},
coordinates: [
W { q: 0, r: 0 }, W { q: 1, r: 0 }, W { q: 2, r:
0 }, W { q: 3, r: 0 },
W { q: 4, r: 0 }, W { q: 5, r: 0 }, W { q: 6, r:
0 }, W { q: 7, r: 0 },
W { q: 8, r: 0 }, W { q: 9, r: 0 }, W { q: 0, r:
1 }, W { q: 1, r: 1 },
W { q: 2, r: 1 }, W { q: 3, r: 1 }, W { q: 4, r:
1 }, W { q: 5, r: 1 },
W { q: 6, r: 1 }, W { q: 7, r: 1 }, W { q: 8, r:
1 }, W { q: 9, r: 1 },
W { q: -1, r: 2 }, W { q: 0, r: 2 }, W { q: 1, r:
2 }, W { q: 2, r: 2 },
W { q: 3, r: 2 }, W { q: 4, r: 2 }, W { q: 5, r:
2 }, W { q: 6, r: 2 },
W { q: 7, r: 2 }, W { q: 8, r: 2 }, W { q: -1, r: 3 }, W { q: 0, r: 3 },
W { q: 1, r: 3 }, W { q: 2, r: 3 }, W { q: 3, r:
3 }, W { q: 4, r: 3 },
W { q: 5, r: 3 }, W { q: 6, r: 3 }, W { q: 7, r:
3 }, W { q: 8, r: 3 },
W { q: -2, r: 4 }, W { q: -1, r: 4 }, W { q: 0, r:
4 }, W { q: 1, r: 4 },
W { q: 2, r: 4 }, W { q: 3, r: 4 }, W { q: 4, r:
4 }, W { q: 5, r: 4 },
W { q: 6, r: 4 }, W { q: 7, r: 4 }, W { q: -2, r: 5 }, W { q: -1, r: 5 },
W { q: 0, r: 5 }, W { q: 1, r: 5 }, W { q: 2, r:
5 }, W { q: 3, r: 5 },
W { q: 4, r: 5 }, W { q: 5, r: 5 }, W { q: 6, r:
5 }, W { q: 7, r: 5 },
W { q: -3, r: 6 }, W { q: -2, r: 6 }, W { q: -1, r: 6 }, W { q: 0, r: 6 },
W { q: 1, r: 6 }, W { q: 2, r: 6 }, W { q: 3, r:
6 }, W { q: 4, r: 6 },
W { q: 5, r: 6 }, W { q: 6, r: 6 }, W { q: -3, r: 7 }, W { q: -2, r: 7 },
W { q: -1, r: 7 }, W { q: 0, r: 7 }, W { q: 1, r:
7 }, W { q: 2, r: 7 },
W { q: 3, r: 7 }, W { q: 4, r: 7 }, W { q: 5, r:
7 }, W { q: 6, r: 7 },
W { q: -4, r: 8 }, W { q: -3, r: 8 }, W { q: -2, r: 8 }, W { q: -1, r: 8 },
W { q: 0, r: 8 }, W { q: 1, r: 8 }, W { q: 2, r:
8 }, W { q: 3, r: 8 },
W { q: 4, r: 8 }, W { q: 5, r: 8 }, W { q: -4, r: 9 }, W { q: -3, r: 9 },
W { q: -2, r: 9 }, W { q: -1, r: 9 }, W { q: 0, r:
9 }, W { q: 1, r: 9 },
W { q: 2, r: 9 }, W { q: 3, r: 9 }, W { q: 4, r:
9 }, W { q: 5, r: 9 }
]
}

// Case 2

Starting coordinates:3,1 Destination coordinates:4,2 Distance:2 {
hexSettings: {
dimensions: { xRadius: 50, yRadius: 30 },
orientation: 'POINTY',
origin: { x: 0, y: 0 },
offset: 1
},
coordinates: [
W { q: 0, r: 0 }, W { q: 1, r: 0 }, W { q: 2, r:
0 }, W { q: 3, r: 0 },
W { q: 4, r: 0 }, W { q: 5, r: 0 }, W { q: 6, r:
0 }, W { q: 7, r: 0 },
W { q: 8, r: 0 }, W { q: 9, r: 0 }, W { q: -1, r: 1 }, W { q: 0, r: 1 },
W { q: 1, r: 1 }, W { q: 2, r: 1 }, W { q: 3, r:
1 }, W { q: 4, r: 1 },
W { q: 5, r: 1 }, W { q: 6, r: 1 }, W { q: 7, r:
1 }, W { q: 8, r: 1 },
W { q: -1, r: 2 }, W { q: 0, r: 2 }, W { q: 1, r:
2 }, W { q: 2, r: 2 },
W { q: 3, r: 2 }, W { q: 4, r: 2 }, W { q: 5, r:
2 }, W { q: 6, r: 2 },
W { q: 7, r: 2 }, W { q: 8, r: 2 }, W { q: -2, r: 3 }, W { q: -1, r: 3 },
W { q: 0, r: 3 }, W { q: 1, r: 3 }, W { q: 2, r:
3 }, W { q: 3, r: 3 },
W { q: 4, r: 3 }, W { q: 5, r: 3 }, W { q: 6, r:
3 }, W { q: 7, r: 3 },
W { q: -2, r: 4 }, W { q: -1, r: 4 }, W { q: 0, r:
4 }, W { q: 1, r: 4 },
W { q: 2, r: 4 }, W { q: 3, r: 4 }, W { q: 4, r:
4 }, W { q: 5, r: 4 },
W { q: 6, r: 4 }, W { q: 7, r: 4 }, W { q: -3, r: 5 }, W { q: -2, r: 5 },
W { q: -1, r: 5 }, W { q: 0, r: 5 }, W { q: 1, r:
5 }, W { q: 2, r: 5 },
W { q: 3, r: 5 }, W { q: 4, r: 5 }, W { q: 5, r:
5 }, W { q: 6, r: 5 },
W { q: -3, r: 6 }, W { q: -2, r: 6 }, W { q: -1, r: 6 }, W { q: 0, r: 6 },
W { q: 1, r: 6 }, W { q: 2, r: 6 }, W { q: 3, r:
6 }, W { q: 4, r: 6 },
W { q: 5, r: 6 }, W { q: 6, r: 6 }, W { q: -4, r: 7 }, W { q: -3, r: 7 },
W { q: -2, r: 7 }, W { q: -1, r: 7 }, W { q: 0, r:
7 }, W { q: 1, r: 7 },
W { q: 2, r: 7 }, W { q: 3, r: 7 }, W { q: 4, r:
7 }, W { q: 5, r: 7 },
W { q: -4, r: 8 }, W { q: -3, r: 8 }, W { q: -2, r: 8 }, W { q: -1, r: 8 },
W { q: 0, r: 8 }, W { q: 1, r: 8 }, W { q: 2, r:
8 }, W { q: 3, r: 8 },
W { q: 4, r: 8 }, W { q: 5, r: 8 }, W { q: -5, r: 9 }, W { q: -4, r: 9 },
W { q: -3, r: 9 }, W { q: -2, r: 9 }, W { q: -1, r: 9 }, W { q: 0, r: 9 },
W { q: 1, r: 9 }, W { q: 2, r: 9 }, W { q: 3, r:
9 }, W { q: 4, r: 9 }
]
}

Expected behavior
When changing offset one of them should calculate 1 and the other 2, as distance as seen in redblob blog.

Environment (please complete the following information):

  • Honeycomb version [e.g. 4.1.4]
  • node 18

Screenshots
Not apply

Additional context
Not for the moment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions