working UI, all player controlled
This commit is contained in:
parent
cd2b2779b6
commit
0c839402ae
@ -127,6 +127,7 @@ pub struct BrdIdx {
|
|||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
impl BrdIdx {
|
impl BrdIdx {
|
||||||
|
#[wasm_bindgen(constructor)]
|
||||||
pub fn from(row: usize, col: usize) -> BrdIdx {
|
pub fn from(row: usize, col: usize) -> BrdIdx {
|
||||||
BrdIdx{
|
BrdIdx{
|
||||||
row, col
|
row, col
|
||||||
|
@ -32,7 +32,7 @@ macro_rules! log {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn init_game() {
|
pub fn init_wasm() {
|
||||||
log!("Initialising WebAssembly");
|
log!("Initialising WebAssembly");
|
||||||
utils::set_panic_hook();
|
utils::set_panic_hook();
|
||||||
}
|
}
|
10
src/paint.rs
10
src/paint.rs
@ -14,6 +14,7 @@ use crate::board::{Board};
|
|||||||
use crate::board::iter::PieceIterator;
|
use crate::board::iter::PieceIterator;
|
||||||
|
|
||||||
use crate::board::enums::Team::*;
|
use crate::board::enums::Team::*;
|
||||||
|
use crate::board::enums::Strength::*;
|
||||||
|
|
||||||
/// Default hex colour value for white square background
|
/// Default hex colour value for white square background
|
||||||
const WHITE_SQUARE: &str = "#FFFFFF";
|
const WHITE_SQUARE: &str = "#FFFFFF";
|
||||||
@ -36,6 +37,8 @@ const BLACK_PIECE: &str = "#ed0000";
|
|||||||
const WHITE_PIECE_OUTLINE: &str = "#9c9c9c";
|
const WHITE_PIECE_OUTLINE: &str = "#9c9c9c";
|
||||||
/// Default hex colour value for black piece outline
|
/// Default hex colour value for black piece outline
|
||||||
const BLACK_PIECE_OUTLINE: &str = "#a60000";
|
const BLACK_PIECE_OUTLINE: &str = "#a60000";
|
||||||
|
/// Default hex colour value for black piece outline
|
||||||
|
const KING_OUTLINE: &str = "#ffea00";
|
||||||
/// Whether to outline pieces
|
/// Whether to outline pieces
|
||||||
const DRAW_PIECE_OUTLINES: bool = true;
|
const DRAW_PIECE_OUTLINES: bool = true;
|
||||||
/// Line width for outlining pieces
|
/// Line width for outlining pieces
|
||||||
@ -59,6 +62,7 @@ pub struct Painter {
|
|||||||
|
|
||||||
white_piece_line: JsValue,
|
white_piece_line: JsValue,
|
||||||
black_piece_line: JsValue,
|
black_piece_line: JsValue,
|
||||||
|
king_line: JsValue,
|
||||||
|
|
||||||
piece_lines: bool,
|
piece_lines: bool,
|
||||||
piece_line_width: f64,
|
piece_line_width: f64,
|
||||||
@ -147,6 +151,7 @@ impl Painter {
|
|||||||
|
|
||||||
white_piece_line: JsValue::from_str(WHITE_PIECE_OUTLINE),
|
white_piece_line: JsValue::from_str(WHITE_PIECE_OUTLINE),
|
||||||
black_piece_line: JsValue::from_str(BLACK_PIECE_OUTLINE),
|
black_piece_line: JsValue::from_str(BLACK_PIECE_OUTLINE),
|
||||||
|
king_line: JsValue::from_str(KING_OUTLINE),
|
||||||
piece_lines: DRAW_PIECE_OUTLINES,
|
piece_lines: DRAW_PIECE_OUTLINES,
|
||||||
piece_line_width: PIECE_OUTLINE_WIDTH,
|
piece_line_width: PIECE_OUTLINE_WIDTH,
|
||||||
|
|
||||||
@ -176,6 +181,7 @@ impl Painter {
|
|||||||
|
|
||||||
white_piece_line: JsValue::from_str(WHITE_PIECE_OUTLINE),
|
white_piece_line: JsValue::from_str(WHITE_PIECE_OUTLINE),
|
||||||
black_piece_line: JsValue::from_str(BLACK_PIECE_OUTLINE),
|
black_piece_line: JsValue::from_str(BLACK_PIECE_OUTLINE),
|
||||||
|
king_line: JsValue::from_str(KING_OUTLINE),
|
||||||
piece_lines: DRAW_PIECE_OUTLINES,
|
piece_lines: DRAW_PIECE_OUTLINES,
|
||||||
piece_line_width: PIECE_OUTLINE_WIDTH,
|
piece_line_width: PIECE_OUTLINE_WIDTH,
|
||||||
|
|
||||||
@ -301,6 +307,10 @@ impl Painter {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if piece.strength == King {
|
||||||
|
self.context.set_stroke_style(&self.king_line);
|
||||||
|
}
|
||||||
|
|
||||||
let center_x: f64 = (brd_idx.col as f64 * cell_width as f64) + (cell_width as f64) / 2.0;
|
let center_x: f64 = (brd_idx.col as f64 * cell_width as f64) + (cell_width as f64) / 2.0;
|
||||||
let center_y: f64 = (brd_idx.row as f64 * cell_height as f64) + (cell_height as f64) / 2.0;
|
let center_y: f64 = (brd_idx.row as f64 * cell_height as f64) + (cell_height as f64) / 2.0;
|
||||||
|
|
||||||
|
93
www/index.js
93
www/index.js
@ -1,7 +1,9 @@
|
|||||||
import { Game, Board, Painter, Team, init_game } from "draught";
|
import { Game, Board, BrdIdx, Painter, Team, init_wasm } from "draught";
|
||||||
import { memory } from "draught/draught_bg.wasm";
|
import { memory } from "draught/draught_bg.wasm";
|
||||||
|
|
||||||
init_game();
|
///////////////////
|
||||||
|
// CONSTS
|
||||||
|
///////////////////
|
||||||
|
|
||||||
const CANVAS_WIDTH = 480;
|
const CANVAS_WIDTH = 480;
|
||||||
const CANVAS_HEIGHT = 480;
|
const CANVAS_HEIGHT = 480;
|
||||||
@ -11,17 +13,86 @@ const BOARD_HEIGHT = 8;
|
|||||||
|
|
||||||
const PIECE_ROWS = 3;
|
const PIECE_ROWS = 3;
|
||||||
|
|
||||||
|
const GameState = {
|
||||||
|
HUMAN_TURN: {
|
||||||
|
THINKING: "human_turn.thinking",
|
||||||
|
FROM_SELECTED: "human_turn.from_selected"
|
||||||
|
},
|
||||||
|
AI_TURN: "ai_turn"
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////
|
||||||
|
// GAME STUFF
|
||||||
|
//////////////////
|
||||||
|
|
||||||
|
init_wasm();
|
||||||
|
|
||||||
|
// let board = new Board(BOARD_WIDTH, BOARD_HEIGHT, Team.Black);
|
||||||
|
|
||||||
|
let current_state = GameState.HUMAN_TURN.THINKING;
|
||||||
|
let painter = new Painter(CANVAS_WIDTH, CANVAS_HEIGHT, "game-canvas");
|
||||||
|
// painter.draw(board);
|
||||||
|
|
||||||
|
let from = null;
|
||||||
|
let to = null;
|
||||||
|
|
||||||
|
let game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black);
|
||||||
|
game.set_painter(painter);
|
||||||
|
game.draw();
|
||||||
|
|
||||||
|
/////////////////
|
||||||
|
// CANVAS
|
||||||
|
/////////////////
|
||||||
|
|
||||||
const canvas = document.getElementById("game-canvas");
|
const canvas = document.getElementById("game-canvas");
|
||||||
canvas.addEventListener("click", (event) => {
|
canvas.addEventListener("click", (event) => {
|
||||||
var mousepos = getMousePos(canvas, event);
|
var mousepos = getMousePos(canvas, event);
|
||||||
// console.log(mousepos);
|
// console.log(mousepos);
|
||||||
var cell = {
|
var cell = new BrdIdx(
|
||||||
x: Math.floor((mousepos.x / CANVAS_WIDTH) * BOARD_WIDTH),
|
Math.floor((mousepos.y / CANVAS_HEIGHT) * BOARD_HEIGHT),
|
||||||
y: Math.floor((mousepos.y / CANVAS_HEIGHT) * BOARD_HEIGHT),
|
Math.floor((mousepos.x / CANVAS_WIDTH) * BOARD_WIDTH),
|
||||||
}
|
);
|
||||||
console.log(cell);
|
// console.log(cell);
|
||||||
|
process_canvas_click(cell);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
////////////////
|
||||||
|
// FUNCS
|
||||||
|
////////////////
|
||||||
|
|
||||||
|
function start_game() {
|
||||||
|
game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black);
|
||||||
|
game.set_painter(painter);
|
||||||
|
game.draw();
|
||||||
|
|
||||||
|
current_state = GameState.HUMAN_TURN.THINKING;
|
||||||
|
}
|
||||||
|
|
||||||
|
function process_canvas_click(cell_coord) {
|
||||||
|
switch(current_state) {
|
||||||
|
case GameState.HUMAN_TURN.THINKING:
|
||||||
|
console.log("Your turn, first piece picked");
|
||||||
|
|
||||||
|
from = cell_coord;
|
||||||
|
current_state = GameState.HUMAN_TURN.FROM_SELECTED;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case GameState.HUMAN_TURN.FROM_SELECTED:
|
||||||
|
console.log("Your turn, first piece already picked, picking second");
|
||||||
|
|
||||||
|
to = cell_coord;
|
||||||
|
game.make_move(from, to);
|
||||||
|
game.draw();
|
||||||
|
|
||||||
|
current_state = GameState.HUMAN_TURN.THINKING;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case GameState.AI_TURN:
|
||||||
|
console.log("It's the AI's turn!");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getMousePos(canvas, evt) {
|
function getMousePos(canvas, evt) {
|
||||||
var rect = canvas.getBoundingClientRect();
|
var rect = canvas.getBoundingClientRect();
|
||||||
return {
|
return {
|
||||||
@ -30,11 +101,3 @@ function getMousePos(canvas, evt) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
let painter = new Painter(CANVAS_WIDTH, CANVAS_HEIGHT, "game-canvas");
|
|
||||||
|
|
||||||
// let board = new Board(BOARD_WIDTH, BOARD_HEIGHT, Team.Black);
|
|
||||||
// painter.draw(board);
|
|
||||||
|
|
||||||
let game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black, "game-canvas", CANVAS_WIDTH, CANVAS_HEIGHT);
|
|
||||||
game.set_painter(painter);
|
|
||||||
game.draw();
|
|
||||||
|
Loading…
Reference in New Issue
Block a user