Fix bitwise block rotation for new stride format.
This commit is contained in:
parent
24e5e9d609
commit
bbeed407bb
@ -192,8 +192,8 @@ GAME.PieceMovement = class {
|
|||||||
|
|
||||||
rotate() {
|
rotate() {
|
||||||
let copy = new GAME.PieceMovement();
|
let copy = new GAME.PieceMovement();
|
||||||
copy.direction = BITWISE.rotate_blocks(this.direction);
|
copy.direction = BITWISE.rotate_blocks6(this.direction);
|
||||||
copy.stride = BITWISE.rotate_blocks(this.stride);
|
copy.stride = BITWISE.rotate_blocks12(this.stride);
|
||||||
copy.alt = this.alt;
|
copy.alt = this.alt;
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
@ -425,7 +425,7 @@ GAME.Game = class {
|
|||||||
let hex = this.board.tiles[tile].hex;
|
let hex = this.board.tiles[tile].hex;
|
||||||
|
|
||||||
let directions = moves.direction;
|
let directions = moves.direction;
|
||||||
let block_directions = piece.blocking | BITWISE.rotate_blocks(piece.blocking);
|
let block_directions = piece.blocking | BITWISE.rotate_blocks6(piece.blocking);
|
||||||
|
|
||||||
// Check directions of movement.
|
// Check directions of movement.
|
||||||
for(let mask = BITWISE.lsb(directions); directions > 0; mask = BITWISE.lsb(directions)) {
|
for(let mask = BITWISE.lsb(directions); directions > 0; mask = BITWISE.lsb(directions)) {
|
||||||
@ -565,7 +565,7 @@ GAME.Game = class {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
mask = BITWISE.rotate_blocks(mask);
|
mask = BITWISE.rotate_blocks6(mask);
|
||||||
let moves = target.moves();
|
let moves = target.moves();
|
||||||
|
|
||||||
// King cannot swap onto tile that is threatened.
|
// King cannot swap onto tile that is threatened.
|
||||||
@ -582,7 +582,7 @@ GAME.Game = class {
|
|||||||
|
|
||||||
if(piece.promoted) {
|
if(piece.promoted) {
|
||||||
let hex = this.board.tiles[piece.tile].hex;
|
let hex = this.board.tiles[piece.tile].hex;
|
||||||
let block_directions = piece.blocking | BITWISE.rotate_blocks(piece.blocking);
|
let block_directions = piece.blocking | BITWISE.rotate_blocks6(piece.blocking);
|
||||||
|
|
||||||
switch(piece.piece) {
|
switch(piece.piece) {
|
||||||
case GAME.Const.PieceId.Knight: {
|
case GAME.Const.PieceId.Knight: {
|
||||||
@ -629,9 +629,9 @@ GAME.Game = class {
|
|||||||
case GAME.Const.PieceId.Castle: {
|
case GAME.Const.PieceId.Castle: {
|
||||||
let mask_back = 1 << 3;
|
let mask_back = 1 << 3;
|
||||||
if(piece.player == GAME.Const.Player.Dusk) {
|
if(piece.player == GAME.Const.Player.Dusk) {
|
||||||
mask_back = BITWISE.rotate_blocks(mask_back);
|
mask_back = BITWISE.rotate_blocks6(mask_back);
|
||||||
}
|
}
|
||||||
let mask_column = mask_back | BITWISE.rotate_blocks(mask_back);
|
let mask_column = mask_back | BITWISE.rotate_blocks6(mask_back);
|
||||||
|
|
||||||
let direction = GAME.Const.get_direction(BITWISE.ffs(mask_back));
|
let direction = GAME.Const.get_direction(BITWISE.ffs(mask_back));
|
||||||
let move_hex = hex.copy();
|
let move_hex = hex.copy();
|
||||||
|
@ -159,7 +159,7 @@ const BITWISE = {
|
|||||||
return ((mask + (mask >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;
|
return ((mask + (mask >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;
|
||||||
},
|
},
|
||||||
|
|
||||||
rotate_blocks(mask)
|
rotate_blocks6(mask)
|
||||||
{
|
{
|
||||||
const r1 = 0x00003F; // first 6 bits
|
const r1 = 0x00003F; // first 6 bits
|
||||||
const r2 = 0x000FC0; // second 6 bits
|
const r2 = 0x000FC0; // second 6 bits
|
||||||
@ -175,6 +175,20 @@ const BITWISE = {
|
|||||||
|
|
||||||
return v1 | v2 | v3;
|
return v1 | v2 | v3;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
rotate_blocks12(mask)
|
||||||
|
{
|
||||||
|
const r1 = 0x00000FFF; // first 12 bits
|
||||||
|
const r2 = 0x00FFF000; // second 12 bits
|
||||||
|
|
||||||
|
let v1 = (r1 & mask) << 6;
|
||||||
|
let v2 = (r2 & mask) << 6;
|
||||||
|
|
||||||
|
v1 = (v1 & r1) | ((v1 & ~r1) >> 12);
|
||||||
|
v2 = (v2 & r2) | ((v2 & ~r2) >> 12);
|
||||||
|
|
||||||
|
return v1 | v2;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const MATH = {
|
const MATH = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user