Initial implementation of guide.
This commit is contained in:
parent
f34f695098
commit
842a945a01
@ -166,7 +166,7 @@ async fn main()
|
|||||||
/*
|
/*
|
||||||
** Initialize central bus and data serivce.
|
** Initialize central bus and data serivce.
|
||||||
*/
|
*/
|
||||||
let (data_tx, data_rx) = mpsc::channel::<QRPacket>(64);
|
let (data_tx, data_rx) = mpsc::channel::<QRPacket>(1024);
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
manager::thread_system(app, data_rx).await;
|
manager::thread_system(app, data_rx).await;
|
||||||
});
|
});
|
||||||
@ -221,6 +221,8 @@ async fn main()
|
|||||||
WebCache::file("www/js/game_asset.js"),
|
WebCache::file("www/js/game_asset.js"),
|
||||||
WebCache::string(&js_asset_data),
|
WebCache::string(&js_asset_data),
|
||||||
WebCache::file("www/js/game.js"),
|
WebCache::file("www/js/game.js"),
|
||||||
|
WebCache::file("www/js/game_config.js"),
|
||||||
|
WebCache::file("www/js/game_config_const.js"),
|
||||||
WebCache::file("www/js/interface.js"),
|
WebCache::file("www/js/interface.js"),
|
||||||
WebCache::file("www/js/ui.js"),
|
WebCache::file("www/js/ui.js"),
|
||||||
WebCache::file("www/js/scene.js"),
|
WebCache::file("www/js/scene.js"),
|
||||||
|
@ -173,6 +173,11 @@ main>nav>section:first-child>button:hover {
|
|||||||
color:#e0e0e0;
|
color:#e0e0e0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main>nav>section>button>canvas {
|
||||||
|
width: 2.5rem;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
main>nav>section>div{
|
main>nav>section>div{
|
||||||
display:block;
|
display:block;
|
||||||
position:relative;
|
position:relative;
|
||||||
|
103
www/js/game.js
103
www/js/game.js
@ -2,69 +2,32 @@ const GAME = { };
|
|||||||
let GAME_DATA = null;
|
let GAME_DATA = null;
|
||||||
|
|
||||||
GAME.Board = class {
|
GAME.Board = class {
|
||||||
constructor() {
|
constructor(config=null) {
|
||||||
this.tiles = [ ]; for(let i = 0; i < 61; ++i) { this.tiles.push(new GAME.Tile(i)); }
|
this.tiles = [ ]; for(let i = 0; i < 61; ++i) { this.tiles.push(new GAME.Tile(i)); }
|
||||||
this.pieces = [ ]; for(let i = 0; i < GAME.Const.Count.Pieces; ++i) { this.pieces.push(null); }
|
|
||||||
this.columns = [ ]; for(let i = 0; i < 9; ++i) { this.columns.push(new GAME.Column()); }
|
this.columns = [ ]; for(let i = 0; i < 9; ++i) { this.columns.push(new GAME.Column()); }
|
||||||
|
this.pieces = [ ];
|
||||||
|
|
||||||
this.init();
|
console.log(config);
|
||||||
}
|
|
||||||
|
|
||||||
init() {
|
if(config !== null) {
|
||||||
this.pieces = [ ]; for(let i = 0; i < GAME.Const.Count.Pieces; ++i) { this.pieces.push(null); }
|
for(let i = 0; i < config.count_pieces(); ++i) { this.pieces.push(null); }
|
||||||
|
|
||||||
// Describe Dawn layout
|
for(let lay of config.layout.pieces) {
|
||||||
let layout = [
|
this.set_piece(
|
||||||
{ piece:GAME.Const.PieceId.Militia, hex:new MATH.Vec2(0, 1) },
|
lay.piece,
|
||||||
{ piece:GAME.Const.PieceId.Militia, hex:new MATH.Vec2(1, 1) },
|
lay.player,
|
||||||
{ piece:GAME.Const.PieceId.Militia, hex:new MATH.Vec2(2, 2) },
|
lay.promote,
|
||||||
{ piece:GAME.Const.PieceId.Militia, hex:new MATH.Vec2(3, 2) },
|
HEX.hex_to_tile(lay.hex)
|
||||||
{ piece:GAME.Const.PieceId.Militia, hex:new MATH.Vec2(4, 3) },
|
);
|
||||||
{ piece:GAME.Const.PieceId.Militia, hex:new MATH.Vec2(5, 3) },
|
}
|
||||||
{ piece:GAME.Const.PieceId.Militia, hex:new MATH.Vec2(6, 4) },
|
|
||||||
{ piece:GAME.Const.PieceId.Militia, hex:new MATH.Vec2(7, 4) },
|
|
||||||
{ piece:GAME.Const.PieceId.Militia, hex:new MATH.Vec2(8, 5) },
|
|
||||||
|
|
||||||
{ piece:GAME.Const.PieceId.Lance, hex:new MATH.Vec2(0, 0) },
|
|
||||||
{ piece:GAME.Const.PieceId.Lance, hex:new MATH.Vec2(8, 4) },
|
|
||||||
|
|
||||||
{ piece:GAME.Const.PieceId.Knight, hex:new MATH.Vec2(1, 0) },
|
|
||||||
{ piece:GAME.Const.PieceId.Knight, hex:new MATH.Vec2(7, 3) },
|
|
||||||
|
|
||||||
{ piece:GAME.Const.PieceId.Castle, hex:new MATH.Vec2(2, 0) },
|
|
||||||
{ piece:GAME.Const.PieceId.Castle, hex:new MATH.Vec2(6, 2) },
|
|
||||||
|
|
||||||
{ piece:GAME.Const.PieceId.Tower, hex:new MATH.Vec2(3, 0) },
|
|
||||||
{ piece:GAME.Const.PieceId.Tower, hex:new MATH.Vec2(5, 1) },
|
|
||||||
|
|
||||||
{ piece:GAME.Const.PieceId.Dragon, hex:new MATH.Vec2(4, 2) },
|
|
||||||
{ piece:GAME.Const.PieceId.Behemoth, hex:new MATH.Vec2(4, 1) },
|
|
||||||
|
|
||||||
{ piece:GAME.Const.PieceId.Heart, hex:new MATH.Vec2(4, 0) },
|
|
||||||
];
|
|
||||||
|
|
||||||
// Add Dawn pieces
|
|
||||||
for(let lay of layout) {
|
|
||||||
this.set_piece(
|
|
||||||
lay.piece,
|
|
||||||
GAME.Const.Player.Dawn,
|
|
||||||
HEX.hex_to_tile(lay.hex)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add Dusk pieces
|
|
||||||
for(let lay of layout) {
|
|
||||||
this.set_piece(
|
|
||||||
lay.piece,
|
|
||||||
GAME.Const.Player.Dusk,
|
|
||||||
HEX.hex_to_tile(new MATH.Vec2(8 - lay.hex.x, 8 - lay.hex.y))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clone() {
|
clone() {
|
||||||
let board = new GAME.Board();
|
let board = new GAME.Board();
|
||||||
for(let i = 0; i < this.tiles.length; ++i) { board.tiles[i] = this.tiles[i].clone(); }
|
for(let i = 0; i < this.tiles.length; ++i) { board.tiles[i] = this.tiles[i].clone(); }
|
||||||
|
|
||||||
|
for(let i = 0; i < this.pieces.length; ++i) { this.pieces.push(null); }
|
||||||
for(let i = 0; i < this.pieces.length; ++i) {
|
for(let i = 0; i < this.pieces.length; ++i) {
|
||||||
if(this.pieces[i] !== null) {
|
if(this.pieces[i] !== null) {
|
||||||
board.pieces[i] = this.pieces[i].clone();
|
board.pieces[i] = this.pieces[i].clone();
|
||||||
@ -72,14 +35,16 @@ GAME.Board = class {
|
|||||||
board.pieces[i] = null;
|
board.pieces[i] = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return board;
|
return board;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_piece(piece, player, tile) {
|
set_piece(piece, player, promote, tile) {
|
||||||
let index = 0;
|
let index = 0;
|
||||||
while(this.pieces[index] !== null) { index++; }
|
while(index < this.pieces.length && this.pieces[index] !== null) { index++; }
|
||||||
|
if(index == this.pieces.length) { this.pieces.push(null); }
|
||||||
|
|
||||||
let game_piece = new GAME.Piece(piece, player);
|
let game_piece = new GAME.Piece(piece, player, promote);
|
||||||
game_piece.tile = tile;
|
game_piece.tile = tile;
|
||||||
this.tiles[tile].piece = index;
|
this.tiles[tile].piece = index;
|
||||||
this.pieces[index] = game_piece;
|
this.pieces[index] = game_piece;
|
||||||
@ -199,10 +164,10 @@ GAME.PieceMovement = class {
|
|||||||
};
|
};
|
||||||
|
|
||||||
GAME.Piece = class {
|
GAME.Piece = class {
|
||||||
constructor(piece, player) {
|
constructor(piece, player, promote=false) {
|
||||||
this.piece = piece;
|
this.piece = piece;
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.promoted = false;
|
this.promoted = promote;
|
||||||
|
|
||||||
this.tile = 0;
|
this.tile = 0;
|
||||||
this.blocking = 0;
|
this.blocking = 0;
|
||||||
@ -234,15 +199,24 @@ GAME.Piece = class {
|
|||||||
};
|
};
|
||||||
|
|
||||||
GAME.Game = class {
|
GAME.Game = class {
|
||||||
constructor() {
|
constructor(config) {
|
||||||
|
this.config = config;
|
||||||
|
|
||||||
this.turn = 0;
|
this.turn = 0;
|
||||||
|
|
||||||
this.board = new GAME.Board();
|
this.board = new GAME.Board(this.config);
|
||||||
this.pools = [
|
this.pools = [
|
||||||
new GAME.Pool(),
|
new GAME.Pool(),
|
||||||
new GAME.Pool(),
|
new GAME.Pool(),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
for(let i = 0; i < 7; ++i) {
|
||||||
|
this.pools[0].pieces[i] = this.config.pool[i];
|
||||||
|
}
|
||||||
|
for(let i = 0; i < 7; ++i) {
|
||||||
|
this.pools[1].pieces[i] = this.config.pool[i + 7];
|
||||||
|
}
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
code:0,
|
code:0,
|
||||||
check:false,
|
check:false,
|
||||||
@ -408,6 +382,7 @@ GAME.Game = class {
|
|||||||
this.board.set_piece(
|
this.board.set_piece(
|
||||||
play.from,
|
play.from,
|
||||||
player,
|
player,
|
||||||
|
false,
|
||||||
play.to
|
play.to
|
||||||
);
|
);
|
||||||
this.pools[this.turn & 1].pieces[play.from] -= 1;
|
this.pools[this.turn & 1].pieces[play.from] -= 1;
|
||||||
@ -431,7 +406,7 @@ GAME.Game = class {
|
|||||||
let piece_id = this.board.tiles[play.from].piece;
|
let piece_id = this.board.tiles[play.from].piece;
|
||||||
if(piece_id !== null) {
|
if(piece_id !== null) {
|
||||||
let piece = this.board.pieces[piece_id];
|
let piece = this.board.pieces[piece_id];
|
||||||
if(piece.player == player) {
|
if(piece.player == player || !this.config.rules.turn) {
|
||||||
let moves = this.movement_tiles(piece, play.from);
|
let moves = this.movement_tiles(piece, play.from);
|
||||||
for(let move of moves) {
|
for(let move of moves) {
|
||||||
if(move.tile == play.to && move.valid) {
|
if(move.tile == play.to && move.valid) {
|
||||||
@ -874,10 +849,6 @@ GAME.Const = {
|
|||||||
Heart: 7,
|
Heart: 7,
|
||||||
},
|
},
|
||||||
|
|
||||||
Count: {
|
|
||||||
Pieces:40,
|
|
||||||
},
|
|
||||||
|
|
||||||
Piece: [
|
Piece: [
|
||||||
new GAME.GamePiece(
|
new GAME.GamePiece(
|
||||||
"Militia",
|
"Militia",
|
||||||
@ -1039,6 +1010,6 @@ GAME.Const = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
GAME.init = () => {
|
GAME.init = (config) => {
|
||||||
GAME_DATA = new GAME.Game();
|
GAME_DATA = new GAME.Game(config);
|
||||||
};
|
};
|
||||||
|
@ -2,18 +2,81 @@ class GameConfig {
|
|||||||
constructor() {
|
constructor() {
|
||||||
this.key = new Uint8Array(4);
|
this.key = new Uint8Array(4);
|
||||||
this.name = "";
|
this.name = "";
|
||||||
//this.user = 0;
|
//this.user = null;
|
||||||
|
|
||||||
this.pieces = [ ];
|
this.pieces = [ ];
|
||||||
this.layout = [ ];
|
this.layout = new GameConfig.Layout();
|
||||||
this.pools = new Uint8Array(14);
|
this.pool = new Uint8Array(14);
|
||||||
|
|
||||||
this.actions = [ ];
|
this.rules = {
|
||||||
this.states = [ ];
|
turn:true,
|
||||||
|
};
|
||||||
|
|
||||||
|
//this.actions = [ ];
|
||||||
|
//this.states = [ ];
|
||||||
|
}
|
||||||
|
|
||||||
|
add_piece(piece) {
|
||||||
|
this.pieces.push(piece);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_pieces(pieces) {
|
||||||
|
this.pieces = pieces;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_layout(layout) {
|
||||||
|
this.layout = layout;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_pool(pool) {
|
||||||
|
this.pool = pool;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_rule(rule, value) {
|
||||||
|
this.rules[rule] = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
count_pieces() {
|
||||||
|
let count = this.layout.pieces.length;
|
||||||
|
|
||||||
|
for(let i = 0; i < this.pool.length; ++i) {
|
||||||
|
count += this.pool[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GameConfig.State = class {
|
GameConfig.Layout = class {
|
||||||
//this.name = "";
|
constructor() {
|
||||||
|
this.pieces = [ ];
|
||||||
};
|
}
|
||||||
|
|
||||||
|
add_piece(piece_id, player, promote, hex) {
|
||||||
|
this.pieces.push({
|
||||||
|
piece:piece_id,
|
||||||
|
player:player,
|
||||||
|
promote:promote,
|
||||||
|
hex:hex,
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
mirror(player) {
|
||||||
|
let length = this.pieces.length;
|
||||||
|
for(let i = 0; i < length; ++i) {
|
||||||
|
this.pieces.push({
|
||||||
|
piece:this.pieces[i].piece,
|
||||||
|
player:player,
|
||||||
|
promote:this.pieces[i].promote,
|
||||||
|
hex:new MATH.Vec2(8 - this.pieces[i].hex.x, 8 - this.pieces[i].hex.y),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
280
www/js/game_config_const.js
Normal file
280
www/js/game_config_const.js
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
const CONFIG_PIECES_STANDARD = [
|
||||||
|
new GAME.GamePiece(
|
||||||
|
"Militia",
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(0)
|
||||||
|
.add(1)
|
||||||
|
.add(5),
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(0)
|
||||||
|
.add(1)
|
||||||
|
.add(2)
|
||||||
|
.add(3)
|
||||||
|
.add(4)
|
||||||
|
.add(5),
|
||||||
|
),
|
||||||
|
new GAME.GamePiece(
|
||||||
|
"Lance",
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add_stride(0)
|
||||||
|
.add(1)
|
||||||
|
.add(3)
|
||||||
|
.add(5),
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(0)
|
||||||
|
.add_stride(1, 1)
|
||||||
|
.add_stride(2, 1)
|
||||||
|
.add(3)
|
||||||
|
.add_stride(4, 1)
|
||||||
|
.add_stride(5, 1),
|
||||||
|
),
|
||||||
|
new GAME.GamePiece(
|
||||||
|
"Knight",
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(6)
|
||||||
|
.add(8)
|
||||||
|
.add(9)
|
||||||
|
.add(11)
|
||||||
|
.add(13)
|
||||||
|
.add(14)
|
||||||
|
.add(16)
|
||||||
|
.add(17),
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(6)
|
||||||
|
.add(8)
|
||||||
|
.add(9)
|
||||||
|
.add(11)
|
||||||
|
.add(13)
|
||||||
|
.add(14)
|
||||||
|
.add(16)
|
||||||
|
.add(17)
|
||||||
|
.add_alt(1),
|
||||||
|
),
|
||||||
|
new GAME.GamePiece(
|
||||||
|
"Tower",
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(0)
|
||||||
|
.add(1)
|
||||||
|
.add(3)
|
||||||
|
.add(5)
|
||||||
|
.add(6)
|
||||||
|
.add(11),
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(0)
|
||||||
|
.add(1)
|
||||||
|
.add(2)
|
||||||
|
.add(3)
|
||||||
|
.add(4)
|
||||||
|
.add(5)
|
||||||
|
.add(6)
|
||||||
|
.add(8)
|
||||||
|
.add(9)
|
||||||
|
.add(11),
|
||||||
|
),
|
||||||
|
new GAME.GamePiece(
|
||||||
|
"Castle",
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(0)
|
||||||
|
.add(1)
|
||||||
|
.add(2)
|
||||||
|
.add(4)
|
||||||
|
.add(5)
|
||||||
|
.add(7)
|
||||||
|
.add(10),
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(0)
|
||||||
|
.add(1)
|
||||||
|
.add(2)
|
||||||
|
.add(3)
|
||||||
|
.add(4)
|
||||||
|
.add(5)
|
||||||
|
.add(7)
|
||||||
|
.add(10)
|
||||||
|
.add_alt(2),
|
||||||
|
),
|
||||||
|
new GAME.GamePiece(
|
||||||
|
"Dragon",
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add_stride(6)
|
||||||
|
.add_stride(7)
|
||||||
|
.add_stride(8)
|
||||||
|
.add_stride(9)
|
||||||
|
.add_stride(10)
|
||||||
|
.add_stride(11),
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(0)
|
||||||
|
.add(1)
|
||||||
|
.add(2)
|
||||||
|
.add(3)
|
||||||
|
.add(4)
|
||||||
|
.add(5)
|
||||||
|
.add_stride(6)
|
||||||
|
.add_stride(7)
|
||||||
|
.add_stride(8)
|
||||||
|
.add_stride(9)
|
||||||
|
.add_stride(10)
|
||||||
|
.add_stride(11),
|
||||||
|
),
|
||||||
|
new GAME.GamePiece(
|
||||||
|
"Behemoth",
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add_stride(0)
|
||||||
|
.add_stride(1)
|
||||||
|
.add_stride(2)
|
||||||
|
.add_stride(3)
|
||||||
|
.add_stride(4)
|
||||||
|
.add_stride(5),
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add_stride(0)
|
||||||
|
.add_stride(1)
|
||||||
|
.add_stride(2)
|
||||||
|
.add_stride(3)
|
||||||
|
.add_stride(4)
|
||||||
|
.add_stride(5)
|
||||||
|
.add(12)
|
||||||
|
.add(13)
|
||||||
|
.add(14)
|
||||||
|
.add(15)
|
||||||
|
.add(16)
|
||||||
|
.add(17)
|
||||||
|
),
|
||||||
|
new GAME.GamePiece(
|
||||||
|
"Heart",
|
||||||
|
new GAME.PieceMovement()
|
||||||
|
.add(0)
|
||||||
|
.add(1)
|
||||||
|
.add(2)
|
||||||
|
.add(3)
|
||||||
|
.add(4)
|
||||||
|
.add(5)
|
||||||
|
.add(7)
|
||||||
|
.add(10),
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
|
const CONFIG_LAYOUT_STANDARD = new GameConfig.Layout()
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(0, 1))
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(1, 1))
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(2, 2))
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(3, 2))
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(4, 3))
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(5, 3))
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(6, 4))
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(7, 4))
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(8, 5))
|
||||||
|
.add_piece(1, 0, false, new MATH.Vec2(0, 0))
|
||||||
|
.add_piece(1, 0, false, new MATH.Vec2(8, 4))
|
||||||
|
.add_piece(2, 0, false, new MATH.Vec2(1, 0))
|
||||||
|
.add_piece(2, 0, false, new MATH.Vec2(7, 3))
|
||||||
|
.add_piece(3, 0, false, new MATH.Vec2(3, 0))
|
||||||
|
.add_piece(3, 0, false, new MATH.Vec2(5, 1))
|
||||||
|
.add_piece(4, 0, false, new MATH.Vec2(2, 0))
|
||||||
|
.add_piece(4, 0, false, new MATH.Vec2(6, 2))
|
||||||
|
.add_piece(5, 0, false, new MATH.Vec2(4, 2))
|
||||||
|
.add_piece(6, 0, false, new MATH.Vec2(4, 1))
|
||||||
|
.add_piece(7, 0, false, new MATH.Vec2(4, 0))
|
||||||
|
.mirror(1);
|
||||||
|
|
||||||
|
const CONFIG_POOL_DEMO = new Uint8Array([6, 4, 4, 4, 4, 2, 2, 6, 4, 4, 4, 4, 2, 2]);
|
||||||
|
|
||||||
|
const GAME_CONFIGS = {
|
||||||
|
// Standard
|
||||||
|
Standard: new GameConfig()
|
||||||
|
.set_pieces(CONFIG_PIECES_STANDARD)
|
||||||
|
.set_layout(CONFIG_LAYOUT_STANDARD),
|
||||||
|
|
||||||
|
// Militia
|
||||||
|
Guide_Militia: new GameConfig()
|
||||||
|
.set_pieces(CONFIG_PIECES_STANDARD)
|
||||||
|
.set_layout(
|
||||||
|
new GameConfig.Layout()
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(4, 3))
|
||||||
|
.add_piece(0, 0, true, new MATH.Vec2(4, 5))
|
||||||
|
.add_piece(0, 0, false, new MATH.Vec2(0, 0))
|
||||||
|
.add_piece(0, 0, true, new MATH.Vec2(0, 4))
|
||||||
|
)
|
||||||
|
.set_pool(CONFIG_POOL_DEMO)
|
||||||
|
.set_rule("turn", false),
|
||||||
|
|
||||||
|
// Lance
|
||||||
|
Guide_Lance: new GameConfig()
|
||||||
|
.set_pieces(CONFIG_PIECES_STANDARD)
|
||||||
|
.set_layout(
|
||||||
|
new GameConfig.Layout()
|
||||||
|
.add_piece(1, 0, false, new MATH.Vec2(4, 3))
|
||||||
|
.add_piece(1, 0, true, new MATH.Vec2(4, 5))
|
||||||
|
)
|
||||||
|
.set_pool(CONFIG_POOL_DEMO)
|
||||||
|
.set_rule("turn", false),
|
||||||
|
|
||||||
|
// Knight
|
||||||
|
Guide_Knight: new GameConfig()
|
||||||
|
.set_pieces(CONFIG_PIECES_STANDARD)
|
||||||
|
.set_layout(
|
||||||
|
new GameConfig.Layout()
|
||||||
|
.add_piece(2, 0, false, new MATH.Vec2(4, 3))
|
||||||
|
.add_piece(2, 0, true, new MATH.Vec2(4, 5))
|
||||||
|
)
|
||||||
|
.set_pool(CONFIG_POOL_DEMO)
|
||||||
|
.set_rule("turn", false),
|
||||||
|
|
||||||
|
// Tower
|
||||||
|
Guide_Tower: new GameConfig()
|
||||||
|
.set_pieces(CONFIG_PIECES_STANDARD)
|
||||||
|
.set_layout(
|
||||||
|
new GameConfig.Layout()
|
||||||
|
.add_piece(3, 0, false, new MATH.Vec2(4, 3))
|
||||||
|
.add_piece(3, 0, true, new MATH.Vec2(4, 5))
|
||||||
|
.add_piece(4, 0, false, new MATH.Vec2(5, 4))
|
||||||
|
.add_piece(2, 0, false, new MATH.Vec2(5, 7))
|
||||||
|
)
|
||||||
|
.set_pool(CONFIG_POOL_DEMO)
|
||||||
|
.set_rule("turn", false),
|
||||||
|
|
||||||
|
// Castle
|
||||||
|
Guide_Castle: new GameConfig()
|
||||||
|
.set_pieces(CONFIG_PIECES_STANDARD)
|
||||||
|
.set_layout(
|
||||||
|
new GameConfig.Layout()
|
||||||
|
.add_piece(4, 0, false, new MATH.Vec2(4, 3))
|
||||||
|
.add_piece(4, 0, true, new MATH.Vec2(4, 5))
|
||||||
|
)
|
||||||
|
.set_pool(CONFIG_POOL_DEMO)
|
||||||
|
.set_rule("turn", false),
|
||||||
|
|
||||||
|
// Dragon
|
||||||
|
Guide_Dragon: new GameConfig()
|
||||||
|
.set_pieces(CONFIG_PIECES_STANDARD)
|
||||||
|
.set_layout(
|
||||||
|
new GameConfig.Layout()
|
||||||
|
.add_piece(5, 0, false, new MATH.Vec2(4, 3))
|
||||||
|
.add_piece(5, 0, true, new MATH.Vec2(4, 5))
|
||||||
|
)
|
||||||
|
.set_pool(CONFIG_POOL_DEMO)
|
||||||
|
.set_rule("turn", false),
|
||||||
|
|
||||||
|
// Behemoth
|
||||||
|
Guide_Behemoth: new GameConfig()
|
||||||
|
.set_pieces(CONFIG_PIECES_STANDARD)
|
||||||
|
.set_layout(
|
||||||
|
new GameConfig.Layout()
|
||||||
|
.add_piece(6, 0, false, new MATH.Vec2(4, 3))
|
||||||
|
.add_piece(6, 0, true, new MATH.Vec2(4, 5))
|
||||||
|
.add_piece(2, 1, false, new MATH.Vec2(5, 4))
|
||||||
|
.add_piece(2, 1, false, new MATH.Vec2(3, 4))
|
||||||
|
)
|
||||||
|
.set_pool(CONFIG_POOL_DEMO)
|
||||||
|
.set_rule("turn", false),
|
||||||
|
|
||||||
|
// Heart
|
||||||
|
Guide_Heart: new GameConfig()
|
||||||
|
.set_pieces(CONFIG_PIECES_STANDARD)
|
||||||
|
.set_layout(
|
||||||
|
new GameConfig.Layout()
|
||||||
|
.add_piece(7, 0, false, new MATH.Vec2(4, 4))
|
||||||
|
.add_piece(7, 1, false, new MATH.Vec2(3, 5))
|
||||||
|
.add_piece(1, 1, false, new MATH.Vec2(5, 7))
|
||||||
|
)
|
||||||
|
.set_pool(CONFIG_POOL_DEMO)
|
||||||
|
.set_rule("turn", false),
|
||||||
|
};
|
@ -236,7 +236,7 @@ const INTERFACE = {
|
|||||||
console.log("Select not null");
|
console.log("Select not null");
|
||||||
|
|
||||||
// Play selection.
|
// Play selection.
|
||||||
if(INTERFACE_DATA.hover.source == 0 && (INTERFACE_DATA.mode == INTERFACE.Mode.Local || INTERFACE_DATA.player == (GAME_DATA.turn & 1))) {
|
if(INTERFACE_DATA.hover.source == 0 && (INTERFACE_DATA.mode == INTERFACE.Mode.Local || (INTERFACE_DATA.player == (GAME_DATA.turn & 1) || !GAME_DATA.config.rules.turn))) {
|
||||||
console.log("D1");
|
console.log("D1");
|
||||||
|
|
||||||
let tile_state = INTERFACE_DATA.Game.board_state[INTERFACE_DATA.hover.tile][1];
|
let tile_state = INTERFACE_DATA.Game.board_state[INTERFACE_DATA.hover.tile][1];
|
||||||
@ -560,7 +560,8 @@ const INTERFACE = {
|
|||||||
|
|
||||||
let is_play = null;
|
let is_play = null;
|
||||||
if(GAME_DATA.turn > 0 && play.source != 0xF && (play.to == i || ((play.source == 0 || play.source == 2) && play.from == i))) {
|
if(GAME_DATA.turn > 0 && play.source != 0xF && (play.to == i || ((play.source == 0 || play.source == 2) && play.from == i))) {
|
||||||
is_play = +!(GAME_DATA.turn & 1);
|
let piece_id = GAME_DATA.board.tiles[play.to].piece;
|
||||||
|
is_play = GAME_DATA.board.pieces[piece_id].player;
|
||||||
}
|
}
|
||||||
let is_check = (GAME_DATA.state.check != 0 || GAME_DATA.state.code == GAME.Const.State.Checkmate)
|
let is_check = (GAME_DATA.state.check != 0 || GAME_DATA.state.code == GAME.Const.State.Checkmate)
|
||||||
&& piece !== null
|
&& piece !== null
|
||||||
@ -603,7 +604,7 @@ const INTERFACE = {
|
|||||||
border_color = INTERFACE.Color.HintHover;
|
border_color = INTERFACE.Color.HintHover;
|
||||||
} else if(background_color == null) {
|
} else if(background_color == null) {
|
||||||
if(INTERFACE_DATA.select === null && is_play !== null) {
|
if(INTERFACE_DATA.select === null && is_play !== null) {
|
||||||
if((GAME_DATA.turn & 1) != GAME.Const.Player.Dawn) { border_color = INTERFACE.Color.DawnDark; }
|
if(is_play == GAME.Const.Player.Dawn) { border_color = INTERFACE.Color.DawnDark; }
|
||||||
else { border_color = INTERFACE.Color.DuskDark; }
|
else { border_color = INTERFACE.Color.DuskDark; }
|
||||||
background_scale = 0.9;
|
background_scale = 0.9;
|
||||||
}
|
}
|
||||||
@ -1129,7 +1130,7 @@ const INTERFACE = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Draw border
|
// Draw border
|
||||||
let turn_indicator = player == (GAME_DATA.turn & 1) && (INTERFACE_DATA.player == player || INTERFACE_DATA.player == 2);
|
let turn_indicator = !GAME_DATA.config.rules.turn || (player == (GAME_DATA.turn & 1) && (INTERFACE_DATA.player == player || INTERFACE_DATA.player == 2));
|
||||||
if(is_hover || background_color !== null || turn_indicator) {
|
if(is_hover || background_color !== null || turn_indicator) {
|
||||||
if(is_hover) { this.ctx.fillStyle = INTERFACE.Color.HintHover; }
|
if(is_hover) { this.ctx.fillStyle = INTERFACE.Color.HintHover; }
|
||||||
else { this.ctx.fillStyle = player_color; }
|
else { this.ctx.fillStyle = player_color; }
|
||||||
@ -1194,8 +1195,8 @@ const INTERFACE = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
init(token, mode, params={}) {
|
init(token, config, mode, params={}) {
|
||||||
GAME.init();
|
GAME.init(config);
|
||||||
|
|
||||||
let player = 2;
|
let player = 2;
|
||||||
|
|
||||||
@ -1304,6 +1305,11 @@ const INTERFACE = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
load(config) {
|
||||||
|
GAME.init(config);
|
||||||
|
INTERFACE.reset();
|
||||||
|
},
|
||||||
|
|
||||||
uninit() {
|
uninit() {
|
||||||
if(INTERFACE_DATA !== null) {
|
if(INTERFACE_DATA !== null) {
|
||||||
if(INTERFACE_DATA.mode != INTERFACE.Mode.Local) {
|
if(INTERFACE_DATA.mode != INTERFACE.Mode.Local) {
|
||||||
@ -1485,7 +1491,7 @@ const INTERFACE = {
|
|||||||
case 2: {
|
case 2: {
|
||||||
let piece_id = GAME_DATA.board.tiles[play.from].piece;
|
let piece_id = GAME_DATA.board.tiles[play.from].piece;
|
||||||
let piece = GAME_DATA.board.pieces[piece_id];
|
let piece = GAME_DATA.board.pieces[piece_id];
|
||||||
valid = piece.player == (GAME_DATA.turn & 1);
|
valid = piece.player == (GAME_DATA.turn & 1) || !GAME_DATA.config.rules.turn;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case 1: {
|
case 1: {
|
||||||
@ -1586,7 +1592,7 @@ const INTERFACE = {
|
|||||||
if(turn >= 0 && turn <= INTERFACE_DATA.Game.history.length) {
|
if(turn >= 0 && turn <= INTERFACE_DATA.Game.history.length) {
|
||||||
if(turn <= INTERFACE_DATA.Replay.turn) {
|
if(turn <= INTERFACE_DATA.Replay.turn) {
|
||||||
INTERFACE_DATA.Replay.turn = 0;
|
INTERFACE_DATA.Replay.turn = 0;
|
||||||
GAME.init();
|
GAME.init(GAME_DATA.config);
|
||||||
}
|
}
|
||||||
|
|
||||||
let play = null;
|
let play = null;
|
||||||
|
@ -649,35 +649,54 @@ const SCENES = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
Guide:class{
|
Guide:class{
|
||||||
constructor() { }
|
constructor() {
|
||||||
|
this.game = null;
|
||||||
|
}
|
||||||
load() {
|
load() {
|
||||||
UI.mainmenu("guide");
|
let buttons_bottom = [ ];
|
||||||
|
buttons_bottom.push(UI.button(LANG("undo"), () => { INTERFACE.undo(); }));
|
||||||
|
buttons_bottom.push(UI.button(LANG("reset"), () => { INTERFACE.reset(); }));
|
||||||
|
buttons_bottom.push(UI.button(LANG("back"), () => { SCENE.load(SCENES.Browse); }));
|
||||||
|
|
||||||
|
UI.nav([ ], buttons_bottom);
|
||||||
UI.mainnav([
|
UI.mainnav([
|
||||||
UI.button("Game", () => { SCENE.refresh("game.html"); }),
|
UI.button_piece(0, () => {
|
||||||
UI.button("Pieces", () => { SCENE.refresh("pieces.html"); }),
|
INTERFACE.load(GAME_CONFIGS.Guide_Militia);
|
||||||
UI.button("Interface", () => { SCENE.refresh("interface.html"); }),
|
}),
|
||||||
|
UI.button_piece(1, () => {
|
||||||
|
INTERFACE.load(GAME_CONFIGS.Guide_Lance);
|
||||||
|
}),
|
||||||
|
UI.button_piece(2, () => {
|
||||||
|
INTERFACE.load(GAME_CONFIGS.Guide_Knight);
|
||||||
|
}),
|
||||||
|
UI.button_piece(3, () => {
|
||||||
|
INTERFACE.load(GAME_CONFIGS.Guide_Tower);
|
||||||
|
}),
|
||||||
|
UI.button_piece(4, () => {
|
||||||
|
INTERFACE.load(GAME_CONFIGS.Guide_Castle);
|
||||||
|
}),
|
||||||
|
UI.button_piece(5, () => {
|
||||||
|
INTERFACE.load(GAME_CONFIGS.Guide_Dragon);
|
||||||
|
}),
|
||||||
|
UI.button_piece(6, () => {
|
||||||
|
INTERFACE.load(GAME_CONFIGS.Guide_Behemoth);
|
||||||
|
}),
|
||||||
|
UI.button_piece(7, () => {
|
||||||
|
INTERFACE.load(GAME_CONFIGS.Guide_Heart);
|
||||||
|
}),
|
||||||
], []);
|
], []);
|
||||||
|
|
||||||
let body = document.createElement("article");
|
let canvas = document.createElement("canvas");
|
||||||
body.setAttribute("id", "article");
|
canvas.setAttribute("id", "game");
|
||||||
body.setAttribute("class", "text");
|
MAIN.appendChild(canvas);
|
||||||
UI.maincontent(body);
|
|
||||||
|
|
||||||
this.refresh("game.html");
|
INTERFACE.init(null, GAME_CONFIGS.Guide_Militia, INTERFACE.Mode.Local, {});
|
||||||
|
|
||||||
history.pushState(null, "Dzura - Guide", "/guide/");
|
history.pushState(null, "Dzura - Guide", "/guide/");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
refresh(page) {
|
unload() {
|
||||||
fetch("/guide/" + page)
|
INTERFACE.uninit();
|
||||||
.then((response) => {
|
|
||||||
return response.text();
|
|
||||||
})
|
|
||||||
.then((text) => {
|
|
||||||
let parser = new DOMParser();
|
|
||||||
let body = parser.parseFromString(text, "text/html");
|
|
||||||
document.getElementById("article").innerHTML = body.body.innerHTML;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1080,7 +1099,7 @@ const SCENES = {
|
|||||||
MAIN.appendChild(canvas);
|
MAIN.appendChild(canvas);
|
||||||
|
|
||||||
// Interface
|
// Interface
|
||||||
INTERFACE.init(this.token, this.mode, {
|
INTERFACE.init(this.token, GAME_CONFIGS.Standard, this.mode, {
|
||||||
rotate:this.rotate,
|
rotate:this.rotate,
|
||||||
});
|
});
|
||||||
if(this.turn !== null) {
|
if(this.turn !== null) {
|
||||||
@ -1146,7 +1165,7 @@ const SCENES = {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
INTERFACE.init(data, INTERFACE.Mode.Local, params);
|
INTERFACE.init(data, GAME_CONFIGS.Standard, INTERFACE.Mode.Local, params);
|
||||||
if(data !== null) {
|
if(data !== null) {
|
||||||
for(let i = 0; i < data.turn; ++i) {
|
for(let i = 0; i < data.turn; ++i) {
|
||||||
INTERFACE_DATA.Game.history_begin.push(data.history[i]);
|
INTERFACE_DATA.Game.history_begin.push(data.history[i]);
|
||||||
|
10
www/js/ui.js
10
www/js/ui.js
@ -25,6 +25,16 @@ const UI = {
|
|||||||
return button;
|
return button;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
button_piece(piece, callback=null, select=false) {
|
||||||
|
let button = document.createElement("button");
|
||||||
|
let moves = document.createElement("canvas");
|
||||||
|
button.appendChild(moves);
|
||||||
|
setTimeout(UI.draw_play_icons, 10, moves, [piece]);
|
||||||
|
if(select) { button.setAttribute("class", "selected"); }
|
||||||
|
if(callback !== null) { button.addEventListener("click", callback); }
|
||||||
|
return button;
|
||||||
|
},
|
||||||
|
|
||||||
submit(text) {
|
submit(text) {
|
||||||
let button = document.createElement("input");
|
let button = document.createElement("input");
|
||||||
button.setAttribute("type", "submit");
|
button.setAttribute("type", "submit");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user