Packed river directions (both fit in one byte).
bits 2-0 = PRIMARY incoming edge index + 1 (0 = none, 1-6 = edge 0-5)
bits 5-3 = outgoing edge index + 1 (0 = none, 1-6 = edge 0-5)
bits 7-6 = unused
Default value 0x00 → no river (matches zero-initialised ArrayBuffer).
The FULL set of incoming edges (confluences) lives in HexMap.riverInBits;
the primary here is maintained as the lowest set incoming edge.
Packed river directions (both fit in one byte). bits 2-0 = PRIMARY incoming edge index + 1 (0 = none, 1-6 = edge 0-5) bits 5-3 = outgoing edge index + 1 (0 = none, 1-6 = edge 0-5) bits 7-6 = unused Default value 0x00 → no river (matches zero-initialised ArrayBuffer). The FULL set of incoming edges (confluences) lives in HexMap.riverInBits; the primary here is maintained as the lowest set incoming edge.