From 55a29fbd6f8eb3bca82d1b630ef8130ae190d771 Mon Sep 17 00:00:00 2001 From: Sarsoo Date: Sat, 10 Jul 2021 20:02:28 +0000 Subject: [PATCH] deploy: 13a17d538b8ddb019ef807874e0dfc0380a09bed --- 10.bootstrap.js | 2 +- 10.bootstrap.js.map | 2 +- ...e.wasm => 96b9a573923750a3ae94.module.wasm | Bin 122111 -> 122311 bytes doc/draught/game/index.html | 2 +- doc/draught/game/struct.Game.html | 16 ++++++++-------- doc/src/draught/game/mod.rs.html | 12 +++++++----- index.html | 11 +++++++++-- 7 files changed, 27 insertions(+), 18 deletions(-) rename 29964598fec03e30f3aa.module.wasm => 96b9a573923750a3ae94.module.wasm (62%) diff --git a/10.bootstrap.js b/10.bootstrap.js index 71e40f0..d680d46 100644 --- a/10.bootstrap.js +++ b/10.bootstrap.js @@ -1,2 +1,2 @@ -(self.webpackChunkdraught=self.webpackChunkdraught||[]).push([[10],{171:(t,e,r)=>{"use strict";r.a(t,(async n=>{r.d(e,{wc:()=>x,SZ:()=>T,Tt:()=>O,rh:()=>E,lA:()=>q,Ck:()=>I,ug:()=>A,h4:()=>U,h9:()=>W,Dz:()=>$,kF:()=>M,s8:()=>D,WB:()=>J,cP:()=>P,a:()=>R,l_:()=>z,U_:()=>F,EN:()=>N,qu:()=>Y,Wg:()=>K,B3:()=>L,I6:()=>Q,Qb:()=>X,cI:()=>H,QK:()=>Z,Md:()=>G,ox:()=>V,ES:()=>tt,Ae:()=>et,UL:()=>rt,qw:()=>nt,tS:()=>_t,R$:()=>at,md:()=>ct,IF:()=>it,XP:()=>ot,m_:()=>st,fY:()=>ut,Or:()=>pt});var _=r(813);t=r.hmd(t);var a=n([_]);_=(a.then?await a:a)[0];const c=new Array(32).fill(void 0);function i(t){return c[t]}c.push(void 0,null,!0,!1);let o=c.length;let s=new("undefined"==typeof TextDecoder?(0,t.require)("util").TextDecoder:TextDecoder)("utf-8",{ignoreBOM:!0,fatal:!0});s.decode();let u=null;function p(){return null!==u&&u.buffer===_.memory.buffer||(u=new Uint8Array(_.memory.buffer)),u}function l(t,e){return s.decode(p().subarray(t,t+e))}function d(t){o===c.length&&c.push(c.length+1);const e=o;return o=c[e],c[e]=t,e}function b(t){const e=typeof t;if("number"==e||"boolean"==e||null==t)return`${t}`;if("string"==e)return`"${t}"`;if("symbol"==e){const e=t.description;return null==e?"Symbol":`Symbol(${e})`}if("function"==e){const e=t.name;return"string"==typeof e&&e.length>0?`Function(${e})`:"Function"}if(Array.isArray(t)){const e=t.length;let r="[";e>0&&(r+=b(t[0]));for(let n=1;n1))return toString.call(t);if(n=r[1],"Object"==n)try{return"Object("+JSON.stringify(t)+")"}catch(t){return"Object"}return t instanceof Error?`${t.name}: ${t.message}\n${t.stack}`:n}let g=0,f=new("undefined"==typeof TextEncoder?(0,t.require)("util").TextEncoder:TextEncoder)("utf-8");const w="function"==typeof f.encodeInto?function(t,e){return f.encodeInto(t,e)}:function(t,e){const r=f.encode(t);return e.set(r),{read:t.length,written:r.length}};function h(t,e,r){if(void 0===r){const r=f.encode(t),n=e(r.length);return p().subarray(n,n+r.length).set(r),g=r.length,n}let n=t.length,_=e(n);const a=p();let c=0;for(;c127)break;a[_+c]=e}if(c!==n){0!==c&&(t=t.slice(c)),_=r(_,n,n=c+3*t.length);const e=p().subarray(_+c,_+n);c+=w(t,e).written}return g=c,_}let m=null;function v(){return null!==m&&m.buffer===_.memory.buffer||(m=new Int32Array(_.memory.buffer)),m}function y(t){return null==t}function k(t,e){if(!(t instanceof e))throw new Error(`expected instance of ${e.name}`);return t.ptr}function x(){_.init_wasm()}function j(t,e){try{return t.apply(this,e)}catch(t){_.__wbindgen_exn_store(d(t))}}Object.freeze({Move:0,0:"Move",Jump:1,1:"Jump"});const T=Object.freeze({Black:0,0:"Black",White:1,1:"White"}),O=(Object.freeze({Man:0,0:"Man",King:1,1:"King"}),Object.freeze({Empty:0,0:"Empty",Occupied:1,1:"Occupied",Unplayable:2,2:"Unplayable"}),Object.freeze({Allowed:0,0:"Allowed",UnoccupiedSrc:1,1:"UnoccupiedSrc",OccupiedDest:2,2:"OccupiedDest",OutOfBounds:3,3:"OutOfBounds",Unplayable:4,4:"Unplayable",WrongTeamSrc:5,5:"WrongTeamSrc",IllegalTrajectory:6,6:"IllegalTrajectory",NoJumpablePiece:7,7:"NoJumpablePiece",JumpingSameTeam:8,8:"JumpingSameTeam"}));class S{static __wrap(t){const e=Object.create(S.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_board_free(t)}get width(){return _.__wbg_get_board_width(this.ptr)>>>0}set width(t){_.__wbg_set_board_width(this.ptr,t)}get height(){return _.__wbg_get_board_height(this.ptr)>>>0}set height(t){_.__wbg_set_board_height(this.ptr,t)}get current_turn(){return _.__wbg_get_board_current_turn(this.ptr)>>>0}set current_turn(t){_.__wbg_set_board_current_turn(this.ptr,t)}cell(t){var e=_.board_cell(this.ptr,t);return C.__wrap(e)}set_cell(t,e){k(e,C);var r=e.ptr;e.ptr=0,_.board_set_cell(this.ptr,t,r)}grid_cell(t){k(t,E);var e=t.ptr;t.ptr=0;var r=_.board_grid_cell(this.ptr,e);return C.__wrap(r)}cell_index(t,e){return _.board_cell_index(this.ptr,t,e)>>>0}cell_idx(t){k(t,E);var e=t.ptr;return t.ptr=0,_.board_cell_idx(this.ptr,e)>>>0}board_index(t){var e=_.board_board_index(this.ptr,t);return E.__wrap(e)}can_move(t,e){k(t,E);var r=t.ptr;t.ptr=0,k(e,E);var n=e.ptr;return e.ptr=0,_.board_can_move(this.ptr,r,n)>>>0}validate_man_move(t,e,r){k(t,E);var n=t.ptr;t.ptr=0,k(e,E);var a=e.ptr;e.ptr=0,k(r,B);var c=r.ptr;return r.ptr=0,_.board_validate_man_move(this.ptr,n,a,c)>>>0}validate_king_move(t,e,r){k(t,E);var n=t.ptr;t.ptr=0,k(e,E);var a=e.ptr;e.ptr=0,k(r,B);var c=r.ptr;return r.ptr=0,_.board_validate_king_move(this.ptr,n,a,c)>>>0}jumpee_idx(t,e){k(t,E);var r=t.ptr;t.ptr=0,k(e,E);var n=e.ptr;return e.ptr=0,_.board_jumpee_idx(this.ptr,r,n)>>>0}cells(){return _.board_cells(this.ptr)}num_cells(){return _.board_num_cells(this.ptr)>>>0}num_pieces(){return _.board_num_pieces(this.ptr)>>>0}num_player(t){return _.board_num_player(this.ptr,t)>>>0}score(){return _.board_score(this.ptr)}cell_state(t){return _.board_cell_state(this.ptr,t)>>>0}apply_move(t,e){k(t,E);var r=t.ptr;t.ptr=0,k(e,E);var n=e.ptr;e.ptr=0;var a=_.board_apply_move(this.ptr,r,n);return S.__wrap(a)}apply_jump(t,e){k(t,E);var r=t.ptr;t.ptr=0,k(e,E);var n=e.ptr;e.ptr=0;var a=_.board_apply_jump(this.ptr,r,n);return S.__wrap(a)}static validate_jumpee(t,e){k(t,C);var r=t.ptr;t.ptr=0,k(e,B);var n=e.ptr;return e.ptr=0,_.board_validate_jumpee(r,n)>>>0}static check_jumpee_team(t,e){k(t,B);var r=t.ptr;t.ptr=0,k(e,B);var n=e.ptr;return e.ptr=0,0!==_.board_check_jumpee_team(r,n)}constructor(t,e,r){var n=_.board_new(t,e,r);return S.__wrap(n)}static init_game(t,e){k(t,S);var r=t.ptr;t.ptr=0;var n=_.board_init_game(r,e);return S.__wrap(n)}}class E{static __wrap(t){const e=Object.create(E.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_brdidx_free(t)}get row(){return _.__wbg_get_brdidx_row(this.ptr)>>>0}set row(t){_.__wbg_set_brdidx_row(this.ptr,t)}get col(){return _.__wbg_get_brdidx_col(this.ptr)>>>0}set col(t){_.__wbg_set_brdidx_col(this.ptr,t)}constructor(t,e){var r=_.brdidx_from(t,e);return E.__wrap(r)}eq(t){return k(t,E),0!==_.brdidx_eq(this.ptr,t.ptr)}}class q{static __wrap(t){const e=Object.create(q.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_game_free(t)}current_board_cells(){return _.game_current_board_cells(this.ptr)}current_board_len(){return _.game_current_board_len(this.ptr)>>>0}current_turn(){return _.game_current_turn(this.ptr)>>>0}current_cell_state(t){k(t,E);var e=t.ptr;t.ptr=0;var r=_.game_current_cell_state(this.ptr,e);return C.__wrap(r)}make_move(t,e){k(t,E);var r=t.ptr;t.ptr=0,k(e,E);var n=e.ptr;return e.ptr=0,_.game_make_move(this.ptr,r,n)>>>0}execute_move(t,e){k(t,E);var r=t.ptr;t.ptr=0,k(e,E);var n=e.ptr;e.ptr=0,_.game_execute_move(this.ptr,r,n)}execute_jump(t,e){k(t,E);var r=t.ptr;t.ptr=0,k(e,E);var n=e.ptr;e.ptr=0,_.game_execute_jump(this.ptr,r,n)}push_new_board(t){k(t,S);var e=t.ptr;t.ptr=0,_.game_push_new_board(this.ptr,e)}set_current(t){k(t,S);var e=t.ptr;t.ptr=0,_.game_set_current(this.ptr,e)}constructor(t,e,r,n){var a=_.game_new(t,e,r,n);return q.__wrap(a)}static new_with_canvas(t,e,r,n,a,c,i){var o=h(a,_.__wbindgen_malloc,_.__wbindgen_realloc),s=g,u=_.game_new_with_canvas(t,e,r,n,o,s,c,i);return q.__wrap(u)}set_painter(t){k(t,I);var e=t.ptr;t.ptr=0,_.game_set_painter(this.ptr,e)}draw(){_.game_draw(this.ptr)}}class I{static __wrap(t){const e=Object.create(I.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_painter_free(t)}constructor(t,e,r){var n=h(r,_.__wbindgen_malloc,_.__wbindgen_realloc),a=g,c=_.painter_new(t,e,n,a);return I.__wrap(c)}static new_with_canvas(t,e,r){var n=_.painter_new_with_canvas(t,e,d(r));return I.__wrap(n)}set_square_outline(t){_.painter_set_square_outline(this.ptr,d(t))}set_outline_width(t){_.painter_set_outline_width(this.ptr,t)}set_draw_outline(t){_.painter_set_draw_outline(this.ptr,t)}reset_dimensions(){_.painter_reset_dimensions(this.ptr)}validate_board_dim(t){return k(t,S),0!==_.painter_validate_board_dim(this.ptr,t.ptr)}draw(t){k(t,S),_.painter_draw(this.ptr,t.ptr)}}class B{static __wrap(t){const e=Object.create(B.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_piece_free(t)}get team(){return _.__wbg_get_piece_team(this.ptr)>>>0}set team(t){_.__wbg_set_piece_team(this.ptr,t)}get strength(){return _.__wbg_get_piece_strength(this.ptr)>>>0}set strength(t){_.__wbg_set_piece_strength(this.ptr,t)}constructor(t,e){var r=_.piece_new(t,e);return B.__wrap(r)}}class C{static __wrap(t){const e=Object.create(C.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_square_free(t)}get occupant(){var t=_.__wbg_get_square_occupant(this.ptr);return 0===t?void 0:B.__wrap(t)}set occupant(t){let e=0;y(t)||(k(t,B),e=t.ptr,t.ptr=0),_.__wbg_set_square_occupant(this.ptr,e)}get state(){return _.__wbg_get_square_state(this.ptr)>>>0}set state(t){_.__wbg_set_square_state(this.ptr,t)}constructor(t,e){let r=0;y(e)||(k(e,B),r=e.ptr,e.ptr=0);var n=_.square_new(t,r);return C.__wrap(n)}static pc(t,e){var r=_.square_pc(t,e);return C.__wrap(r)}static empty(){var t=_.square_empty();return C.__wrap(t)}static unplay(){var t=_.square_unplay();return C.__wrap(t)}}function A(t){!function(t){const e=i(t);(function(t){t<36||(c[t]=o,o=t)})(t)}(t)}function U(t,e){return d(l(t,e))}function W(){return d(new Error)}function $(t,e){var r=h(i(e).stack,_.__wbindgen_malloc,_.__wbindgen_realloc),n=g;v()[t/4+1]=n,v()[t/4+0]=r}function M(t,e){try{console.error(l(t,e))}finally{_.__wbindgen_free(t,e)}}function D(t){return i(t)instanceof Window}function J(t){var e=i(t).document;return y(e)?0:d(e)}function P(t,e,r){var n=i(t).getElementById(l(e,r));return y(n)?0:d(n)}function R(t){console.log(i(t))}function z(t){return i(t)instanceof CanvasRenderingContext2D}function F(t,e){i(t).strokeStyle=i(e)}function N(t,e){i(t).fillStyle=i(e)}function Y(t,e){i(t).lineWidth=e}function K(t){i(t).beginPath()}function L(t){i(t).fill()}function Q(t){i(t).stroke()}function X(){return j((function(t,e,r,n,_,a){i(t).arc(e,r,n,_,a)}),arguments)}function H(t,e,r,n,_){i(t).fillRect(e,r,n,_)}function Z(t,e,r,n,_){i(t).strokeRect(e,r,n,_)}function G(t){return i(t)instanceof HTMLCanvasElement}function V(t,e){i(t).width=e>>>0}function tt(t,e){i(t).height=e>>>0}function et(){return j((function(t,e,r){var n=i(t).getContext(l(e,r));return y(n)?0:d(n)}),arguments)}function rt(t,e){return d(new Function(l(t,e)))}function nt(){return j((function(t,e){return d(i(t).call(i(e)))}),arguments)}function _t(){return j((function(){return d(self.self)}),arguments)}function at(){return j((function(){return d(window.window)}),arguments)}function ct(){return j((function(){return d(globalThis.globalThis)}),arguments)}function it(){return j((function(){return d(r.g.global)}),arguments)}function ot(t){return void 0===i(t)}function st(t){return d(i(t))}function ut(t,e){var r=h(b(i(e)),_.__wbindgen_malloc,_.__wbindgen_realloc),n=g;v()[t/4+1]=n,v()[t/4+0]=r}function pt(t,e){throw new Error(l(t,e))}}))},813:(t,e,r)=>{"use strict";var n=([n])=>r.v(e,t.id,"29964598fec03e30f3aa",{"./draught_bg.js":{__wbindgen_object_drop_ref:n.ug,__wbindgen_string_new:n.h4,__wbg_new_59cb74e423758ede:n.h9,__wbg_stack_558ba5917b466edd:n.Dz,__wbg_error_4bb6c2a97407129a:n.kF,__wbg_instanceof_Window_11e25482011fc506:n.s8,__wbg_document_5aff8cd83ef968f5:n.WB,__wbg_getElementById_b180ea4ada06a837:n.cP,__wbg_log_9a99fb1af846153b:n.a,__wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b:n.l_,__wbg_setstrokeStyle_2939ee453716e462:n.U_,__wbg_setfillStyle_af790b5baf4d3210:n.EN,__wbg_setlineWidth_3e6b1837ae38d099:n.qu,__wbg_beginPath_2378575e37027ad3:n.Wg,__wbg_fill_558339447ed6ad43:n.B3,__wbg_stroke_c1e0313c58997dcf:n.I6,__wbg_arc_fffd87d9113dce32:n.Qb,__wbg_fillRect_46ffc8d2cef7e298:n.cI,__wbg_strokeRect_7ea34fad8a7f0fe2:n.QK,__wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792:n.Md,__wbg_setwidth_f3c88eb520ba8d47:n.ox,__wbg_setheight_5a1abba41e35c42a:n.ES,__wbg_getContext_813df131fcbd6e91:n.Ae,__wbg_newnoargs_9fdd8f3961dd1bee:n.UL,__wbg_call_ba36642bd901572b:n.qw,__wbg_self_bb69a836a72ec6e9:n.tS,__wbg_window_3304fc4b414c9693:n.R$,__wbg_globalThis_e0d21cabc6630763:n.md,__wbg_global_8463719227271676:n.IF,__wbindgen_is_undefined:n.XP,__wbindgen_object_clone_ref:n.m_,__wbindgen_debug_string:n.fY,__wbindgen_throw:n.Or}});r.a(t,(t=>{var e=t([r(171)]);return e.then?e.then(n):n(e)}),1)},10:(t,e,r)=>{"use strict";r.a(t,(async t=>{r.r(e);var n=r(171),_=t([n]);n=(_.then?await _:_)[0];const a="human_turn.thinking",c="human_turn.from_selected";(0,n.wc)();const i=document.getElementById("status-p");let o=a,s=new n.Ck(480,480,"game-canvas"),u=[],p=new n.lA(8,8,3,n.SZ.Black);p.set_painter(s),p.draw();const l=document.getElementById("game-canvas");function d(t){i.hidden=!1,i.innerText=t}l.addEventListener("click",(t=>{var e=function(t,e){var r=t.getBoundingClientRect();return{x:e.clientX-r.left,y:e.clientY-r.top}}(l,t);!function(t){switch(o){case a:console.log("Your turn, first piece picked"),u.push(t),o=c;break;case c:if(console.log("Your turn, first piece already picked, picking second"),u.push(t),2!=u.length)return d(`Error: wrong number of clicks to process ${u.length}`),void console.error(`Error: wrong number of clicks to process ${u.length}`);if(u[0].eq(u[1]))d("Move Cancelled");else switch(p.make_move(u[0],u[1])){case n.Tt.Allowed:case n.Tt.IllegalTrajectory:case n.Tt.JumpingSameTeam:case n.Tt.NoJumpablePiece:case n.Tt.OccupiedDest:case n.Tt.OutOfBounds:case n.Tt.UnoccupiedSrc:case n.Tt.Unplayable:case n.Tt.WrongTeamSrc:}p.draw(),u=[],o=a;break;case"ai_turn":console.log("It's the AI's turn!")}}(new n.rh(Math.floor(e.y/480*8),Math.floor(e.x/480*8)))}))}))}}]); +(self.webpackChunkdraught=self.webpackChunkdraught||[]).push([[10],{171:(t,e,r)=>{"use strict";r.a(t,(async n=>{r.d(e,{wc:()=>x,SZ:()=>j,i0:()=>O,Tt:()=>S,rh:()=>q,lA:()=>I,Ck:()=>B,ug:()=>A,h4:()=>U,h9:()=>$,Dz:()=>M,kF:()=>D,s8:()=>J,WB:()=>P,cP:()=>R,a:()=>z,l_:()=>F,U_:()=>N,EN:()=>Y,qu:()=>K,Wg:()=>L,B3:()=>Q,I6:()=>Z,Qb:()=>X,cI:()=>H,QK:()=>G,Md:()=>V,ox:()=>tt,ES:()=>et,Ae:()=>rt,UL:()=>nt,qw:()=>_t,tS:()=>at,R$:()=>ct,md:()=>it,IF:()=>ot,XP:()=>st,m_:()=>ut,fY:()=>pt,Or:()=>lt});var _=r(813);t=r.hmd(t);var a=n([_]);_=(a.then?await a:a)[0];const c=new Array(32).fill(void 0);function i(t){return c[t]}c.push(void 0,null,!0,!1);let o=c.length;let s=new("undefined"==typeof TextDecoder?(0,t.require)("util").TextDecoder:TextDecoder)("utf-8",{ignoreBOM:!0,fatal:!0});s.decode();let u=null;function p(){return null!==u&&u.buffer===_.memory.buffer||(u=new Uint8Array(_.memory.buffer)),u}function l(t,e){return s.decode(p().subarray(t,t+e))}function d(t){o===c.length&&c.push(c.length+1);const e=o;return o=c[e],c[e]=t,e}function b(t){const e=typeof t;if("number"==e||"boolean"==e||null==t)return`${t}`;if("string"==e)return`"${t}"`;if("symbol"==e){const e=t.description;return null==e?"Symbol":`Symbol(${e})`}if("function"==e){const e=t.name;return"string"==typeof e&&e.length>0?`Function(${e})`:"Function"}if(Array.isArray(t)){const e=t.length;let r="[";e>0&&(r+=b(t[0]));for(let n=1;n1))return toString.call(t);if(n=r[1],"Object"==n)try{return"Object("+JSON.stringify(t)+")"}catch(t){return"Object"}return t instanceof Error?`${t.name}: ${t.message}\n${t.stack}`:n}let g=0,w=new("undefined"==typeof TextEncoder?(0,t.require)("util").TextEncoder:TextEncoder)("utf-8");const f="function"==typeof w.encodeInto?function(t,e){return w.encodeInto(t,e)}:function(t,e){const r=w.encode(t);return e.set(r),{read:t.length,written:r.length}};function h(t,e,r){if(void 0===r){const r=w.encode(t),n=e(r.length);return p().subarray(n,n+r.length).set(r),g=r.length,n}let n=t.length,_=e(n);const a=p();let c=0;for(;c127)break;a[_+c]=e}if(c!==n){0!==c&&(t=t.slice(c)),_=r(_,n,n=c+3*t.length);const e=p().subarray(_+c,_+n);c+=f(t,e).written}return g=c,_}let m=null;function v(){return null!==m&&m.buffer===_.memory.buffer||(m=new Int32Array(_.memory.buffer)),m}function y(t){return null==t}function k(t,e){if(!(t instanceof e))throw new Error(`expected instance of ${e.name}`);return t.ptr}function x(){_.init_wasm()}function T(t,e){try{return t.apply(this,e)}catch(t){_.__wbindgen_exn_store(d(t))}}Object.freeze({Move:0,0:"Move",Jump:1,1:"Jump"});const j=Object.freeze({Black:0,0:"Black",White:1,1:"White"}),O=(Object.freeze({Man:0,0:"Man",King:1,1:"King"}),Object.freeze({Empty:0,0:"Empty",Occupied:1,1:"Occupied",Unplayable:2,2:"Unplayable"})),S=Object.freeze({Allowed:0,0:"Allowed",UnoccupiedSrc:1,1:"UnoccupiedSrc",OccupiedDest:2,2:"OccupiedDest",OutOfBounds:3,3:"OutOfBounds",Unplayable:4,4:"Unplayable",WrongTeamSrc:5,5:"WrongTeamSrc",IllegalTrajectory:6,6:"IllegalTrajectory",NoJumpablePiece:7,7:"NoJumpablePiece",JumpingSameTeam:8,8:"JumpingSameTeam"});class E{static __wrap(t){const e=Object.create(E.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_board_free(t)}get width(){return _.__wbg_get_board_width(this.ptr)>>>0}set width(t){_.__wbg_set_board_width(this.ptr,t)}get height(){return _.__wbg_get_board_height(this.ptr)>>>0}set height(t){_.__wbg_set_board_height(this.ptr,t)}get current_turn(){return _.__wbg_get_board_current_turn(this.ptr)>>>0}set current_turn(t){_.__wbg_set_board_current_turn(this.ptr,t)}cell(t){var e=_.board_cell(this.ptr,t);return W.__wrap(e)}set_cell(t,e){k(e,W);var r=e.ptr;e.ptr=0,_.board_set_cell(this.ptr,t,r)}grid_cell(t){k(t,q);var e=t.ptr;t.ptr=0;var r=_.board_grid_cell(this.ptr,e);return W.__wrap(r)}cell_index(t,e){return _.board_cell_index(this.ptr,t,e)>>>0}cell_idx(t){k(t,q);var e=t.ptr;return t.ptr=0,_.board_cell_idx(this.ptr,e)>>>0}board_index(t){var e=_.board_board_index(this.ptr,t);return q.__wrap(e)}can_move(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;return e.ptr=0,_.board_can_move(this.ptr,r,n)>>>0}validate_man_move(t,e,r){k(t,q);var n=t.ptr;t.ptr=0,k(e,q);var a=e.ptr;e.ptr=0,k(r,C);var c=r.ptr;return r.ptr=0,_.board_validate_man_move(this.ptr,n,a,c)>>>0}validate_king_move(t,e,r){k(t,q);var n=t.ptr;t.ptr=0,k(e,q);var a=e.ptr;e.ptr=0,k(r,C);var c=r.ptr;return r.ptr=0,_.board_validate_king_move(this.ptr,n,a,c)>>>0}jumpee_idx(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;return e.ptr=0,_.board_jumpee_idx(this.ptr,r,n)>>>0}cells(){return _.board_cells(this.ptr)}num_cells(){return _.board_num_cells(this.ptr)>>>0}num_pieces(){return _.board_num_pieces(this.ptr)>>>0}num_player(t){return _.board_num_player(this.ptr,t)>>>0}score(){return _.board_score(this.ptr)}cell_state(t){return _.board_cell_state(this.ptr,t)>>>0}apply_move(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;e.ptr=0;var a=_.board_apply_move(this.ptr,r,n);return E.__wrap(a)}apply_jump(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;e.ptr=0;var a=_.board_apply_jump(this.ptr,r,n);return E.__wrap(a)}static validate_jumpee(t,e){k(t,W);var r=t.ptr;t.ptr=0,k(e,C);var n=e.ptr;return e.ptr=0,_.board_validate_jumpee(r,n)>>>0}static check_jumpee_team(t,e){k(t,C);var r=t.ptr;t.ptr=0,k(e,C);var n=e.ptr;return e.ptr=0,0!==_.board_check_jumpee_team(r,n)}constructor(t,e,r){var n=_.board_new(t,e,r);return E.__wrap(n)}static init_game(t,e){k(t,E);var r=t.ptr;t.ptr=0;var n=_.board_init_game(r,e);return E.__wrap(n)}}class q{static __wrap(t){const e=Object.create(q.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_brdidx_free(t)}get row(){return _.__wbg_get_brdidx_row(this.ptr)>>>0}set row(t){_.__wbg_set_brdidx_row(this.ptr,t)}get col(){return _.__wbg_get_brdidx_col(this.ptr)>>>0}set col(t){_.__wbg_set_brdidx_col(this.ptr,t)}constructor(t,e){var r=_.brdidx_from(t,e);return q.__wrap(r)}eq(t){return k(t,q),0!==_.brdidx_eq(this.ptr,t.ptr)}}class I{static __wrap(t){const e=Object.create(I.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_game_free(t)}current_board_cells(){return _.game_current_board_cells(this.ptr)}current_board_len(){return _.game_current_board_len(this.ptr)>>>0}current_turn(){return _.game_current_turn(this.ptr)>>>0}current_cell_state(t){k(t,q);var e=_.game_current_cell_state(this.ptr,t.ptr);return W.__wrap(e)}make_move(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;return e.ptr=0,_.game_make_move(this.ptr,r,n)>>>0}execute_move(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;e.ptr=0,_.game_execute_move(this.ptr,r,n)}execute_jump(t,e){k(t,q);var r=t.ptr;t.ptr=0,k(e,q);var n=e.ptr;e.ptr=0,_.game_execute_jump(this.ptr,r,n)}push_new_board(t){k(t,E);var e=t.ptr;t.ptr=0,_.game_push_new_board(this.ptr,e)}set_current(t){k(t,E);var e=t.ptr;t.ptr=0,_.game_set_current(this.ptr,e)}constructor(t,e,r,n){var a=_.game_new(t,e,r,n);return I.__wrap(a)}static new_with_canvas(t,e,r,n,a,c,i){var o=h(a,_.__wbindgen_malloc,_.__wbindgen_realloc),s=g,u=_.game_new_with_canvas(t,e,r,n,o,s,c,i);return I.__wrap(u)}set_painter(t){k(t,B);var e=t.ptr;t.ptr=0,_.game_set_painter(this.ptr,e)}draw(){_.game_draw(this.ptr)}}class B{static __wrap(t){const e=Object.create(B.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_painter_free(t)}constructor(t,e,r){var n=h(r,_.__wbindgen_malloc,_.__wbindgen_realloc),a=g,c=_.painter_new(t,e,n,a);return B.__wrap(c)}static new_with_canvas(t,e,r){var n=_.painter_new_with_canvas(t,e,d(r));return B.__wrap(n)}set_square_outline(t){_.painter_set_square_outline(this.ptr,d(t))}set_outline_width(t){_.painter_set_outline_width(this.ptr,t)}set_draw_outline(t){_.painter_set_draw_outline(this.ptr,t)}reset_dimensions(){_.painter_reset_dimensions(this.ptr)}validate_board_dim(t){return k(t,E),0!==_.painter_validate_board_dim(this.ptr,t.ptr)}draw(t){k(t,E),_.painter_draw(this.ptr,t.ptr)}}class C{static __wrap(t){const e=Object.create(C.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_piece_free(t)}get team(){return _.__wbg_get_piece_team(this.ptr)>>>0}set team(t){_.__wbg_set_piece_team(this.ptr,t)}get strength(){return _.__wbg_get_piece_strength(this.ptr)>>>0}set strength(t){_.__wbg_set_piece_strength(this.ptr,t)}constructor(t,e){var r=_.piece_new(t,e);return C.__wrap(r)}}class W{static __wrap(t){const e=Object.create(W.prototype);return e.ptr=t,e}__destroy_into_raw(){const t=this.ptr;return this.ptr=0,t}free(){const t=this.__destroy_into_raw();_.__wbg_square_free(t)}get occupant(){var t=_.__wbg_get_square_occupant(this.ptr);return 0===t?void 0:C.__wrap(t)}set occupant(t){let e=0;y(t)||(k(t,C),e=t.ptr,t.ptr=0),_.__wbg_set_square_occupant(this.ptr,e)}get state(){return _.__wbg_get_square_state(this.ptr)>>>0}set state(t){_.__wbg_set_square_state(this.ptr,t)}constructor(t,e){let r=0;y(e)||(k(e,C),r=e.ptr,e.ptr=0);var n=_.square_new(t,r);return W.__wrap(n)}static pc(t,e){var r=_.square_pc(t,e);return W.__wrap(r)}static empty(){var t=_.square_empty();return W.__wrap(t)}static unplay(){var t=_.square_unplay();return W.__wrap(t)}}function A(t){!function(t){const e=i(t);(function(t){t<36||(c[t]=o,o=t)})(t)}(t)}function U(t,e){return d(l(t,e))}function $(){return d(new Error)}function M(t,e){var r=h(i(e).stack,_.__wbindgen_malloc,_.__wbindgen_realloc),n=g;v()[t/4+1]=n,v()[t/4+0]=r}function D(t,e){try{console.error(l(t,e))}finally{_.__wbindgen_free(t,e)}}function J(t){return i(t)instanceof Window}function P(t){var e=i(t).document;return y(e)?0:d(e)}function R(t,e,r){var n=i(t).getElementById(l(e,r));return y(n)?0:d(n)}function z(t){console.log(i(t))}function F(t){return i(t)instanceof CanvasRenderingContext2D}function N(t,e){i(t).strokeStyle=i(e)}function Y(t,e){i(t).fillStyle=i(e)}function K(t,e){i(t).lineWidth=e}function L(t){i(t).beginPath()}function Q(t){i(t).fill()}function Z(t){i(t).stroke()}function X(){return T((function(t,e,r,n,_,a){i(t).arc(e,r,n,_,a)}),arguments)}function H(t,e,r,n,_){i(t).fillRect(e,r,n,_)}function G(t,e,r,n,_){i(t).strokeRect(e,r,n,_)}function V(t){return i(t)instanceof HTMLCanvasElement}function tt(t,e){i(t).width=e>>>0}function et(t,e){i(t).height=e>>>0}function rt(){return T((function(t,e,r){var n=i(t).getContext(l(e,r));return y(n)?0:d(n)}),arguments)}function nt(t,e){return d(new Function(l(t,e)))}function _t(){return T((function(t,e){return d(i(t).call(i(e)))}),arguments)}function at(){return T((function(){return d(self.self)}),arguments)}function ct(){return T((function(){return d(window.window)}),arguments)}function it(){return T((function(){return d(globalThis.globalThis)}),arguments)}function ot(){return T((function(){return d(r.g.global)}),arguments)}function st(t){return void 0===i(t)}function ut(t){return d(i(t))}function pt(t,e){var r=h(b(i(e)),_.__wbindgen_malloc,_.__wbindgen_realloc),n=g;v()[t/4+1]=n,v()[t/4+0]=r}function lt(t,e){throw new Error(l(t,e))}}))},813:(t,e,r)=>{"use strict";var n=([n])=>r.v(e,t.id,"96b9a573923750a3ae94",{"./draught_bg.js":{__wbindgen_object_drop_ref:n.ug,__wbindgen_string_new:n.h4,__wbg_new_59cb74e423758ede:n.h9,__wbg_stack_558ba5917b466edd:n.Dz,__wbg_error_4bb6c2a97407129a:n.kF,__wbg_instanceof_Window_11e25482011fc506:n.s8,__wbg_document_5aff8cd83ef968f5:n.WB,__wbg_getElementById_b180ea4ada06a837:n.cP,__wbg_log_9a99fb1af846153b:n.a,__wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b:n.l_,__wbg_setstrokeStyle_2939ee453716e462:n.U_,__wbg_setfillStyle_af790b5baf4d3210:n.EN,__wbg_setlineWidth_3e6b1837ae38d099:n.qu,__wbg_beginPath_2378575e37027ad3:n.Wg,__wbg_fill_558339447ed6ad43:n.B3,__wbg_stroke_c1e0313c58997dcf:n.I6,__wbg_arc_fffd87d9113dce32:n.Qb,__wbg_fillRect_46ffc8d2cef7e298:n.cI,__wbg_strokeRect_7ea34fad8a7f0fe2:n.QK,__wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792:n.Md,__wbg_setwidth_f3c88eb520ba8d47:n.ox,__wbg_setheight_5a1abba41e35c42a:n.ES,__wbg_getContext_813df131fcbd6e91:n.Ae,__wbg_newnoargs_9fdd8f3961dd1bee:n.UL,__wbg_call_ba36642bd901572b:n.qw,__wbg_self_bb69a836a72ec6e9:n.tS,__wbg_window_3304fc4b414c9693:n.R$,__wbg_globalThis_e0d21cabc6630763:n.md,__wbg_global_8463719227271676:n.IF,__wbindgen_is_undefined:n.XP,__wbindgen_object_clone_ref:n.m_,__wbindgen_debug_string:n.fY,__wbindgen_throw:n.Or}});r.a(t,(t=>{var e=t([r(171)]);return e.then?e.then(n):n(e)}),1)},10:(t,e,r)=>{"use strict";r.a(t,(async t=>{r.r(e);var n=r(171),_=t([n]);n=(_.then?await _:_)[0];const a="human_turn.thinking",c="human_turn.from_selected";(0,n.wc)(),document.getElementById("status-p");const i=document.getElementById("status-d"),o=document.getElementById("team-p");let s=null,u=function(t,e="danger",r=!0){null!=s&&clearInterval(s),i.className=`alert alert-${e}`,i.innerText=t,i.hidden=!1,r&&(s=setTimeout((()=>{i.hidden=!0}),3e3))},p=a,l=new n.Ck(480,480,"game-canvas"),d=[],b=new n.lA(8,8,3,n.SZ.Black);b.set_painter(l),b.draw(),w();const g=document.getElementById("game-canvas");function w(){switch(b.current_turn()){case n.SZ.White:o.innerText="⚪ White ⚪";break;case n.SZ.Black:o.innerText="🔴 Black 🔴"}}g.addEventListener("click",(t=>{var e=function(t,e){var r=t.getBoundingClientRect();return{x:e.clientX-r.left,y:e.clientY-r.top}}(g,t);!function(t){switch(p){case a:if(b.current_cell_state(t).state!=n.i0.Occupied)return;if(b.current_cell_state(t).occupant.team!=b.current_turn())return;console.log("Your turn, first piece picked"),d.push(t),p=c;break;case c:if(b.current_cell_state(t).state!=n.i0.Empty)return;if(console.log("Your turn, first piece already picked, picking second"),d.push(t),2!=d.length)return u(`Error: wrong number of clicks to process ${d.length}`),void console.error(`Error: wrong number of clicks to process ${d.length}`);if(d[0].eq(d[1]))u("Move Cancelled");else switch(b.make_move(d[0],d[1])){case n.Tt.Allowed:break;case n.Tt.IllegalTrajectory:u("You can't move like that!");break;case n.Tt.JumpingSameTeam:u("You can't jump your own piece!");break;case n.Tt.NoJumpablePiece:u("There's nothing to jump!");break;case n.Tt.OccupiedDest:u("There's a piece there!");break;case n.Tt.OutOfBounds:u("That square's not on the board! (how have you managed that?)");break;case n.Tt.UnoccupiedSrc:u("There's no piece to move!");break;case n.Tt.Unplayable:u("That's not a playable square!");break;case n.Tt.WrongTeamSrc:u("That's not your piece!")}b.draw(),d=[],p=a;break;case"ai_turn":console.log("It's the AI's turn!")}w()}(new n.rh(Math.floor(e.y/480*8),Math.floor(e.x/480*8)))}))}))}}]); //# sourceMappingURL=10.bootstrap.js.map \ No newline at end of file diff --git a/10.bootstrap.js.map b/10.bootstrap.js.map index deba575..4fc3621 100644 --- a/10.bootstrap.js.map +++ b/10.bootstrap.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://draught/../pkg/draught_bg.js","webpack://draught/./index.js"],"names":["heap","Array","fill","undefined","getObject","idx","push","heap_next","length","cachedTextDecoder","TextDecoder","module","require","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","Uint8Array","getStringFromWasm0","ptr","len","subarray","addHeapObject","obj","debugString","val","type","description","name","isArray","debug","i","builtInMatches","exec","toString","call","className","JSON","stringify","_","Error","message","stack","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","set","read","written","passStringToWasm0","malloc","realloc","mem","offset","code","charCodeAt","slice","cachegetInt32Memory0","getInt32Memory0","Int32Array","isLikeNone","x","_assertClass","instance","klass","init_wasm","handleError","f","args","apply","this","e","Object","freeze","Move","Jump","Team","Black","White","Moveable","Man","King","Empty","Occupied","Unplayable","Allowed","UnoccupiedSrc","OccupiedDest","OutOfBounds","WrongTeamSrc","IllegalTrajectory","NoJumpablePiece","JumpingSameTeam","Board","create","prototype","__destroy_into_raw","arg0","ret","Square","__wrap","square","ptr0","BrdIdx","row","col","from","to","ptr1","from_square_occupant","Piece","ptr2","team","jumpee","from_occ","width","height","current_turn","board","piece_rows","other","Game","first_turn","canvas_id","canvas_width","canvas_height","len0","value","Painter","canvas","strength","state","occupant","__wbindgen_object_drop_ref","dropObject","takeObject","__wbindgen_string_new","arg1","__wbg_new_59cb74e423758ede","__wbg_stack_558ba5917b466edd","__wbg_error_4bb6c2a97407129a","console","error","__wbg_instanceof_Window_11e25482011fc506","Window","__wbg_document_5aff8cd83ef968f5","document","__wbg_getElementById_b180ea4ada06a837","arg2","getElementById","__wbg_log_9a99fb1af846153b","log","__wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b","CanvasRenderingContext2D","__wbg_setstrokeStyle_2939ee453716e462","strokeStyle","__wbg_setfillStyle_af790b5baf4d3210","fillStyle","__wbg_setlineWidth_3e6b1837ae38d099","lineWidth","__wbg_beginPath_2378575e37027ad3","beginPath","__wbg_fill_558339447ed6ad43","__wbg_stroke_c1e0313c58997dcf","stroke","__wbg_arc_fffd87d9113dce32","arg3","arg4","arg5","arc","arguments","__wbg_fillRect_46ffc8d2cef7e298","fillRect","__wbg_strokeRect_7ea34fad8a7f0fe2","strokeRect","__wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792","HTMLCanvasElement","__wbg_setwidth_f3c88eb520ba8d47","__wbg_setheight_5a1abba41e35c42a","__wbg_getContext_813df131fcbd6e91","getContext","__wbg_newnoargs_9fdd8f3961dd1bee","Function","__wbg_call_ba36642bd901572b","__wbg_self_bb69a836a72ec6e9","self","__wbg_window_3304fc4b414c9693","window","__wbg_globalThis_e0d21cabc6630763","globalThis","__wbg_global_8463719227271676","g","global","__wbindgen_is_undefined","__wbindgen_object_clone_ref","__wbindgen_debug_string","__wbindgen_throw","GameState","statusText","current_state","painter","clicks","game","set_painter","draw","setStatusText","txt","hidden","innerText","addEventListener","event","mousepos","evt","rect","getBoundingClientRect","clientX","left","y","clientY","top","getMousePos","cell_coord","eq","make_move","process_canvas_click","Math","floor"],"mappings":"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","file":"10.bootstrap.js","sourcesContent":["import * as wasm from './draught_bg.wasm';\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nlet cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n return instance.ptr;\n}\n/**\n*/\nexport function init_wasm() {\n wasm.init_wasm();\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_exn_store(addHeapObject(e));\n }\n}\n/**\n*/\nexport const MoveType = Object.freeze({ Move:0,\"0\":\"Move\",Jump:1,\"1\":\"Jump\", });\n/**\n*/\nexport const Team = Object.freeze({ Black:0,\"0\":\"Black\",White:1,\"1\":\"White\", });\n/**\n*/\nexport const Strength = Object.freeze({ Man:0,\"0\":\"Man\",King:1,\"1\":\"King\", });\n/**\n*/\nexport const SquareState = Object.freeze({ Empty:0,\"0\":\"Empty\",Occupied:1,\"1\":\"Occupied\",Unplayable:2,\"2\":\"Unplayable\", });\n/**\n*/\nexport const Moveable = Object.freeze({ Allowed:0,\"0\":\"Allowed\",UnoccupiedSrc:1,\"1\":\"UnoccupiedSrc\",OccupiedDest:2,\"2\":\"OccupiedDest\",OutOfBounds:3,\"3\":\"OutOfBounds\",Unplayable:4,\"4\":\"Unplayable\",WrongTeamSrc:5,\"5\":\"WrongTeamSrc\",IllegalTrajectory:6,\"6\":\"IllegalTrajectory\",NoJumpablePiece:7,\"7\":\"NoJumpablePiece\",JumpingSameTeam:8,\"8\":\"JumpingSameTeam\", });\n/**\n* Single state of a checkers board\n*/\nexport class Board {\n\n static __wrap(ptr) {\n const obj = Object.create(Board.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_board_free(ptr);\n }\n /**\n * @returns {number}\n */\n get width() {\n var ret = wasm.__wbg_get_board_width(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set width(arg0) {\n wasm.__wbg_set_board_width(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get height() {\n var ret = wasm.__wbg_get_board_height(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set height(arg0) {\n wasm.__wbg_set_board_height(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get current_turn() {\n var ret = wasm.__wbg_get_board_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set current_turn(arg0) {\n wasm.__wbg_set_board_current_turn(this.ptr, arg0);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @returns {Square}\n */\n cell(idx) {\n var ret = wasm.board_cell(this.ptr, idx);\n return Square.__wrap(ret);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @param {Square} square\n */\n set_cell(idx, square) {\n _assertClass(square, Square);\n var ptr0 = square.ptr;\n square.ptr = 0;\n wasm.board_set_cell(this.ptr, idx, ptr0);\n }\n /**\n * Get a copy of a board square by 2D [`BrdIdx`] index\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n grid_cell(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.board_grid_cell(this.ptr, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {number} row\n * @param {number} col\n * @returns {number}\n */\n cell_index(row, col) {\n var ret = wasm.board_cell_index(this.ptr, row, col);\n return ret >>> 0;\n }\n /**\n * Similar to [`Board::cell_index`] but with a [`BrdIdx`] instead of separate indices. Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {BrdIdx} idx\n * @returns {number}\n */\n cell_idx(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.board_cell_idx(this.ptr, ptr0);\n return ret >>> 0;\n }\n /**\n * Transform a 1D array index (for [`Board::cells`]) into a 2D game board index (by row/col)\n * @param {number} idx\n * @returns {BrdIdx}\n */\n board_index(idx) {\n var ret = wasm.board_board_index(this.ptr, idx);\n return BrdIdx.__wrap(ret);\n }\n /**\n * Check whether a move given by source and destination indices is legal\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n can_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_can_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_man_move(from, to, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = wasm.board_validate_man_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_king_move(from, to, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = wasm.board_validate_king_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n jumpee_idx(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_jumpee_idx(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Get a pointer to the backing array of board squares, [`Board::cells`]\n * @returns {number}\n */\n cells() {\n var ret = wasm.board_cells(this.ptr);\n return ret;\n }\n /**\n * Get the number of board squares\n * @returns {number}\n */\n num_cells() {\n var ret = wasm.board_num_cells(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the number of remaining pieces\n * @returns {number}\n */\n num_pieces() {\n var ret = wasm.board_num_pieces(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the number of remaining pieces for a player\n * @param {number} team\n * @returns {number}\n */\n num_player(team) {\n var ret = wasm.board_num_player(this.ptr, team);\n return ret >>> 0;\n }\n /**\n * Get the score value, Black - White pieces\n * @returns {number}\n */\n score() {\n var ret = wasm.board_score(this.ptr);\n return ret;\n }\n /**\n * Get the state of a board square by 1D array index\n * @param {number} idx\n * @returns {number}\n */\n cell_state(idx) {\n var ret = wasm.board_cell_state(this.ptr, idx);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_apply_move(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_jump(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_apply_jump(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * Unwrap the jumpee piece from the square and [`Board::check_jumpee_team`] with [`Moveable`] response\n * @param {Square} jumpee\n * @param {Piece} from_occ\n * @returns {number}\n */\n static validate_jumpee(jumpee, from_occ) {\n _assertClass(jumpee, Square);\n var ptr0 = jumpee.ptr;\n jumpee.ptr = 0;\n _assertClass(from_occ, Piece);\n var ptr1 = from_occ.ptr;\n from_occ.ptr = 0;\n var ret = wasm.board_validate_jumpee(ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Check that the source piece and the jumpee are of opposing teams\n * @param {Piece} from\n * @param {Piece} jumpee\n * @returns {boolean}\n */\n static check_jumpee_team(from, jumpee) {\n _assertClass(from, Piece);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(jumpee, Piece);\n var ptr1 = jumpee.ptr;\n jumpee.ptr = 0;\n var ret = wasm.board_check_jumpee_team(ptr0, ptr1);\n return ret !== 0;\n }\n /**\n * Initialise a game board without game pieces\n * @param {number} width\n * @param {number} height\n * @param {number} current_turn\n */\n constructor(width, height, current_turn) {\n var ret = wasm.board_new(width, height, current_turn);\n return Board.__wrap(ret);\n }\n /**\n * Reset the given board to a starting layout with 3 rows of opposing pieces\n * @param {Board} board\n * @param {number} piece_rows\n * @returns {Board}\n */\n static init_game(board, piece_rows) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n var ret = wasm.board_init_game(ptr0, piece_rows);\n return Board.__wrap(ret);\n }\n}\n/**\n* Rank 2 tensor index to identify a board square by row and column\n*/\nexport class BrdIdx {\n\n static __wrap(ptr) {\n const obj = Object.create(BrdIdx.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_brdidx_free(ptr);\n }\n /**\n * @returns {number}\n */\n get row() {\n var ret = wasm.__wbg_get_brdidx_row(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set row(arg0) {\n wasm.__wbg_set_brdidx_row(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get col() {\n var ret = wasm.__wbg_get_brdidx_col(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set col(arg0) {\n wasm.__wbg_set_brdidx_col(this.ptr, arg0);\n }\n /**\n * @param {number} row\n * @param {number} col\n */\n constructor(row, col) {\n var ret = wasm.brdidx_from(row, col);\n return BrdIdx.__wrap(ret);\n }\n /**\n * @param {BrdIdx} other\n * @returns {boolean}\n */\n eq(other) {\n _assertClass(other, BrdIdx);\n var ret = wasm.brdidx_eq(this.ptr, other.ptr);\n return ret !== 0;\n }\n}\n/**\n* Root-level structure for managing the game as a collection of board states\n*/\nexport class Game {\n\n static __wrap(ptr) {\n const obj = Object.create(Game.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_game_free(ptr);\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_cells() {\n var ret = wasm.game_current_board_cells(this.ptr);\n return ret;\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_len() {\n var ret = wasm.game_current_board_len(this.ptr);\n return ret >>> 0;\n }\n /**\n * Current turn's team\n * @returns {number}\n */\n current_turn() {\n var ret = wasm.game_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n current_cell_state(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.game_current_cell_state(this.ptr, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Attempt to make a move given a source and destination index\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n make_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.game_make_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Update board state with given move and push new board into current state\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n execute_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_execute_move(this.ptr, ptr0, ptr1);\n }\n /**\n * Update board state with given jump move and push new board into current state\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n execute_jump(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_execute_jump(this.ptr, ptr0, ptr1);\n }\n /**\n * Push current board into the previous turns and set given board to current\n * @param {Board} board\n */\n push_new_board(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n wasm.game_push_new_board(this.ptr, ptr0);\n }\n /**\n * Set current board to given\n * @param {Board} board\n */\n set_current(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n wasm.game_set_current(this.ptr, ptr0);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n */\n constructor(width, height, piece_rows, first_turn) {\n var ret = wasm.game_new(width, height, piece_rows, first_turn);\n return Game.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n * @param {string} canvas_id\n * @param {number} canvas_width\n * @param {number} canvas_height\n * @returns {Game}\n */\n static new_with_canvas(width, height, piece_rows, first_turn, canvas_id, canvas_width, canvas_height) {\n var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.game_new_with_canvas(width, height, piece_rows, first_turn, ptr0, len0, canvas_width, canvas_height);\n return Game.__wrap(ret);\n }\n /**\n * @param {Painter} value\n */\n set_painter(value) {\n _assertClass(value, Painter);\n var ptr0 = value.ptr;\n value.ptr = 0;\n wasm.game_set_painter(this.ptr, ptr0);\n }\n /**\n */\n draw() {\n wasm.game_draw(this.ptr);\n }\n}\n/**\n* Used to paint boards onto HTML canvases\n*/\nexport class Painter {\n\n static __wrap(ptr) {\n const obj = Object.create(Painter.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_painter_free(ptr);\n }\n /**\n * Default constructor which queries for canvas by ID\n * @param {number} width\n * @param {number} height\n * @param {string} canvas_id\n */\n constructor(width, height, canvas_id) {\n var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.painter_new(width, height, ptr0, len0);\n return Painter.__wrap(ret);\n }\n /**\n * Constructor with given canvas element\n * @param {number} width\n * @param {number} height\n * @param {HTMLCanvasElement} canvas\n * @returns {Painter}\n */\n static new_with_canvas(width, height, canvas) {\n var ret = wasm.painter_new_with_canvas(width, height, addHeapObject(canvas));\n return Painter.__wrap(ret);\n }\n /**\n * Set new square outline colour value\n * @param {any} value\n */\n set_square_outline(value) {\n wasm.painter_set_square_outline(this.ptr, addHeapObject(value));\n }\n /**\n * Set new line width for outlining squares\n * @param {number} value\n */\n set_outline_width(value) {\n wasm.painter_set_outline_width(this.ptr, value);\n }\n /**\n * Set whether squares are outlined\n * @param {boolean} value\n */\n set_draw_outline(value) {\n wasm.painter_set_draw_outline(this.ptr, value);\n }\n /**\n * Reset the canvas dimensions to the given width and height\n */\n reset_dimensions() {\n wasm.painter_reset_dimensions(this.ptr);\n }\n /**\n * Check whether given canvas dimensions divide evenly by given board dimenions\n * @param {Board} board\n * @returns {boolean}\n */\n validate_board_dim(board) {\n _assertClass(board, Board);\n var ret = wasm.painter_validate_board_dim(this.ptr, board.ptr);\n return ret !== 0;\n }\n /**\n * Draw a board onto the canvas\n * @param {Board} board\n */\n draw(board) {\n _assertClass(board, Board);\n wasm.painter_draw(this.ptr, board.ptr);\n }\n}\n/**\n* Game piece given by its team and strength (normal or kinged)\n*/\nexport class Piece {\n\n static __wrap(ptr) {\n const obj = Object.create(Piece.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_piece_free(ptr);\n }\n /**\n * @returns {number}\n */\n get team() {\n var ret = wasm.__wbg_get_piece_team(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set team(arg0) {\n wasm.__wbg_set_piece_team(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get strength() {\n var ret = wasm.__wbg_get_piece_strength(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set strength(arg0) {\n wasm.__wbg_set_piece_strength(this.ptr, arg0);\n }\n /**\n * @param {number} team\n * @param {number} strength\n */\n constructor(team, strength) {\n var ret = wasm.piece_new(team, strength);\n return Piece.__wrap(ret);\n }\n}\n/**\n*/\nexport class Player {\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_player_free(ptr);\n }\n}\n/**\n* Board squares given by a state and a possible occupying game piece\n*/\nexport class Square {\n\n static __wrap(ptr) {\n const obj = Object.create(Square.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_square_free(ptr);\n }\n /**\n * Game piece if square is occupied\n * @returns {Piece | undefined}\n */\n get occupant() {\n var ret = wasm.__wbg_get_square_occupant(this.ptr);\n return ret === 0 ? undefined : Piece.__wrap(ret);\n }\n /**\n * Game piece if square is occupied\n * @param {Piece | undefined} arg0\n */\n set occupant(arg0) {\n let ptr0 = 0;\n if (!isLikeNone(arg0)) {\n _assertClass(arg0, Piece);\n ptr0 = arg0.ptr;\n arg0.ptr = 0;\n }\n wasm.__wbg_set_square_occupant(this.ptr, ptr0);\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n * @returns {number}\n */\n get state() {\n var ret = wasm.__wbg_get_square_state(this.ptr);\n return ret >>> 0;\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n * @param {number} arg0\n */\n set state(arg0) {\n wasm.__wbg_set_square_state(this.ptr, arg0);\n }\n /**\n * Standard constructor function to form square from state and occupant\n * @param {number} state\n * @param {Piece | undefined} occupant\n */\n constructor(state, occupant) {\n let ptr0 = 0;\n if (!isLikeNone(occupant)) {\n _assertClass(occupant, Piece);\n ptr0 = occupant.ptr;\n occupant.ptr = 0;\n }\n var ret = wasm.square_new(state, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed piece square by team and strength\n * @param {number} team\n * @param {number} strength\n * @returns {Square}\n */\n static pc(team, strength) {\n var ret = wasm.square_pc(team, strength);\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed empty square\n * @returns {Square}\n */\n static empty() {\n var ret = wasm.square_empty();\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed unplayable square\n * @returns {Square}\n */\n static unplay() {\n var ret = wasm.square_unplay();\n return Square.__wrap(ret);\n }\n}\n\nexport function __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nexport function __wbindgen_string_new(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_59cb74e423758ede() {\n var ret = new Error();\n return addHeapObject(ret);\n};\n\nexport function __wbg_stack_558ba5917b466edd(arg0, arg1) {\n var ret = getObject(arg1).stack;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbg_error_4bb6c2a97407129a(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n};\n\nexport function __wbg_instanceof_Window_11e25482011fc506(arg0) {\n var ret = getObject(arg0) instanceof Window;\n return ret;\n};\n\nexport function __wbg_document_5aff8cd83ef968f5(arg0) {\n var ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_getElementById_b180ea4ada06a837(arg0, arg1, arg2) {\n var ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_log_9a99fb1af846153b(arg0) {\n console.log(getObject(arg0));\n};\n\nexport function __wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b(arg0) {\n var ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n return ret;\n};\n\nexport function __wbg_setstrokeStyle_2939ee453716e462(arg0, arg1) {\n getObject(arg0).strokeStyle = getObject(arg1);\n};\n\nexport function __wbg_setfillStyle_af790b5baf4d3210(arg0, arg1) {\n getObject(arg0).fillStyle = getObject(arg1);\n};\n\nexport function __wbg_setlineWidth_3e6b1837ae38d099(arg0, arg1) {\n getObject(arg0).lineWidth = arg1;\n};\n\nexport function __wbg_beginPath_2378575e37027ad3(arg0) {\n getObject(arg0).beginPath();\n};\n\nexport function __wbg_fill_558339447ed6ad43(arg0) {\n getObject(arg0).fill();\n};\n\nexport function __wbg_stroke_c1e0313c58997dcf(arg0) {\n getObject(arg0).stroke();\n};\n\nexport function __wbg_arc_fffd87d9113dce32() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {\n getObject(arg0).arc(arg1, arg2, arg3, arg4, arg5);\n}, arguments) };\n\nexport function __wbg_fillRect_46ffc8d2cef7e298(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_strokeRect_7ea34fad8a7f0fe2(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).strokeRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792(arg0) {\n var ret = getObject(arg0) instanceof HTMLCanvasElement;\n return ret;\n};\n\nexport function __wbg_setwidth_f3c88eb520ba8d47(arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n};\n\nexport function __wbg_setheight_5a1abba41e35c42a(arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n};\n\nexport function __wbg_getContext_813df131fcbd6e91() { return handleError(function (arg0, arg1, arg2) {\n var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_newnoargs_9fdd8f3961dd1bee(arg0, arg1) {\n var ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_call_ba36642bd901572b() { return handleError(function (arg0, arg1) {\n var ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_self_bb69a836a72ec6e9() { return handleError(function () {\n var ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_window_3304fc4b414c9693() { return handleError(function () {\n var ret = window.window;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_globalThis_e0d21cabc6630763() { return handleError(function () {\n var ret = globalThis.globalThis;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_global_8463719227271676() { return handleError(function () {\n var ret = global.global;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbindgen_is_undefined(arg0) {\n var ret = getObject(arg0) === undefined;\n return ret;\n};\n\nexport function __wbindgen_object_clone_ref(arg0) {\n var ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_debug_string(arg0, arg1) {\n var ret = debugString(getObject(arg1));\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\n","import { Game, Board, BrdIdx, Painter, Team, init_wasm, Moveable, SquareState } from \"draught\";\nimport { memory } from \"draught/draught_bg.wasm\";\n\n///////////////////\n// CONSTS\n///////////////////\n\nconst CANVAS_WIDTH = 480;\nconst CANVAS_HEIGHT = 480;\n\nconst BOARD_WIDTH = 8;\nconst BOARD_HEIGHT = 8;\n\nconst PIECE_ROWS = 3;\n\nconst GameState = {\n HUMAN_TURN: {\n THINKING: \"human_turn.thinking\",\n FROM_SELECTED: \"human_turn.from_selected\"\n },\n AI_TURN: \"ai_turn\"\n}\n\n//////////////////\n// GAME STUFF\n//////////////////\n\ninit_wasm();\n\n// let board = new Board(BOARD_WIDTH, BOARD_HEIGHT, Team.Black);\n\nconst statusText = document.getElementById(\"status-p\");\n\nlet current_state = GameState.HUMAN_TURN.THINKING;\nlet painter = new Painter(CANVAS_WIDTH, CANVAS_HEIGHT, \"game-canvas\");\n// painter.draw(board);\n\nlet clicks = [];\n\nlet from = null;\nlet to = null;\n\nlet game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black);\ngame.set_painter(painter);\ngame.draw();\n\n/////////////////\n// CANVAS\n/////////////////\n\nconst canvas = document.getElementById(\"game-canvas\");\ncanvas.addEventListener(\"click\", (event) => {\n var mousepos = getMousePos(canvas, event);\n // console.log(mousepos);\n var cell = new BrdIdx(\n Math.floor((mousepos.y / CANVAS_HEIGHT) * BOARD_HEIGHT),\n Math.floor((mousepos.x / CANVAS_WIDTH) * BOARD_WIDTH),\n );\n // console.log(cell);\n process_canvas_click(cell);\n})\n\n////////////////\n// FUNCS\n////////////////\n\nfunction start_game() {\n game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black);\n game.set_painter(painter);\n game.draw();\n\n current_state = GameState.HUMAN_TURN.THINKING;\n}\n\nfunction process_canvas_click(cell_coord) {\n\n // if (game.current_cell_state(cell_coord).state == SquareState.Unplayable ) {\n // from = null;\n // to = null;\n // current_state = GameState.HUMAN_TURN.THINKING;\n // setStatusText(\"Unplayable Square!\");\n // return;\n // }\n\n switch(current_state) {\n case GameState.HUMAN_TURN.THINKING:\n console.log(\"Your turn, first piece picked\");\n\n clicks.push(cell_coord);\n\n // from = cell_coord;\n current_state = GameState.HUMAN_TURN.FROM_SELECTED; \n \n break;\n case GameState.HUMAN_TURN.FROM_SELECTED:\n console.log(\"Your turn, first piece already picked, picking second\");\n\n clicks.push(cell_coord);\n\n // to = cell_coord;\n\n if (clicks.length != 2) {\n setStatusText(`Error: wrong number of clicks to process ${clicks.length}`);\n console.error(`Error: wrong number of clicks to process ${clicks.length}`);\n\n return;\n }\n\n // console.log(clicks[0].eq(clicks[1]));\n\n if (clicks[0].eq(clicks[1])) {\n setStatusText(\"Move Cancelled\");\n } else {\n\n let status = game.make_move(clicks[0], clicks[1]);\n\n switch(status) {\n case Moveable.Allowed:\n break;\n case Moveable.IllegalTrajectory:\n break;\n case Moveable.JumpingSameTeam:\n break;\n case Moveable.NoJumpablePiece:\n break;\n case Moveable.OccupiedDest:\n break;\n case Moveable.OutOfBounds:\n break;\n case Moveable.UnoccupiedSrc:\n break;\n case Moveable.Unplayable:\n break;\n case Moveable.WrongTeamSrc:\n break;\n }\n \n }\n\n game.draw();\n clicks = [];\n // from = null;\n // to = null;\n current_state = GameState.HUMAN_TURN.THINKING;\n \n break;\n case GameState.AI_TURN:\n console.log(\"It's the AI's turn!\");\n break;\n }\n}\n\nfunction getMousePos(canvas, evt) {\n var rect = canvas.getBoundingClientRect();\n return {\n x: evt.clientX - rect.left,\n y: evt.clientY - rect.top\n };\n}\n\nfunction setStatusText(txt) {\n statusText.hidden = false;\n statusText.innerText = txt;\n}\n\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://draught/../pkg/draught_bg.js","webpack://draught/./index.js"],"names":["heap","Array","fill","undefined","getObject","idx","push","heap_next","length","cachedTextDecoder","TextDecoder","module","require","ignoreBOM","fatal","decode","cachegetUint8Memory0","getUint8Memory0","buffer","Uint8Array","getStringFromWasm0","ptr","len","subarray","addHeapObject","obj","debugString","val","type","description","name","isArray","debug","i","builtInMatches","exec","toString","call","className","JSON","stringify","_","Error","message","stack","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","arg","view","buf","encode","set","read","written","passStringToWasm0","malloc","realloc","mem","offset","code","charCodeAt","slice","cachegetInt32Memory0","getInt32Memory0","Int32Array","isLikeNone","x","_assertClass","instance","klass","init_wasm","handleError","f","args","apply","this","e","Object","freeze","Move","Jump","Team","Black","White","SquareState","Man","King","Empty","Occupied","Unplayable","Moveable","Allowed","UnoccupiedSrc","OccupiedDest","OutOfBounds","WrongTeamSrc","IllegalTrajectory","NoJumpablePiece","JumpingSameTeam","Board","create","prototype","__destroy_into_raw","arg0","ret","Square","__wrap","square","ptr0","BrdIdx","row","col","from","to","ptr1","from_square_occupant","Piece","ptr2","team","jumpee","from_occ","width","height","current_turn","board","piece_rows","other","Game","first_turn","canvas_id","canvas_width","canvas_height","len0","value","Painter","canvas","strength","state","occupant","__wbindgen_object_drop_ref","dropObject","takeObject","__wbindgen_string_new","arg1","__wbg_new_59cb74e423758ede","__wbg_stack_558ba5917b466edd","__wbg_error_4bb6c2a97407129a","console","error","__wbg_instanceof_Window_11e25482011fc506","Window","__wbg_document_5aff8cd83ef968f5","document","__wbg_getElementById_b180ea4ada06a837","arg2","getElementById","__wbg_log_9a99fb1af846153b","log","__wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b","CanvasRenderingContext2D","__wbg_setstrokeStyle_2939ee453716e462","strokeStyle","__wbg_setfillStyle_af790b5baf4d3210","fillStyle","__wbg_setlineWidth_3e6b1837ae38d099","lineWidth","__wbg_beginPath_2378575e37027ad3","beginPath","__wbg_fill_558339447ed6ad43","__wbg_stroke_c1e0313c58997dcf","stroke","__wbg_arc_fffd87d9113dce32","arg3","arg4","arg5","arc","arguments","__wbg_fillRect_46ffc8d2cef7e298","fillRect","__wbg_strokeRect_7ea34fad8a7f0fe2","strokeRect","__wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792","HTMLCanvasElement","__wbg_setwidth_f3c88eb520ba8d47","__wbg_setheight_5a1abba41e35c42a","__wbg_getContext_813df131fcbd6e91","getContext","__wbg_newnoargs_9fdd8f3961dd1bee","Function","__wbg_call_ba36642bd901572b","__wbg_self_bb69a836a72ec6e9","self","__wbg_window_3304fc4b414c9693","window","__wbg_globalThis_e0d21cabc6630763","globalThis","__wbg_global_8463719227271676","g","global","__wbindgen_is_undefined","__wbindgen_object_clone_ref","__wbindgen_debug_string","__wbindgen_throw","GameState","statusAlert","teamText","statusTimeout","setStatus","txt","alertType","hide","clearInterval","innerText","hidden","setTimeout","current_state","painter","clicks","game","set_painter","draw","updateTeamText","addEventListener","event","mousepos","evt","rect","getBoundingClientRect","clientX","left","y","clientY","top","getMousePos","cell_coord","current_cell_state","eq","make_move","process_canvas_click","Math","floor"],"mappings":"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","file":"10.bootstrap.js","sourcesContent":["import * as wasm from './draught_bg.wasm';\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nlet cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n return instance.ptr;\n}\n/**\n*/\nexport function init_wasm() {\n wasm.init_wasm();\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_exn_store(addHeapObject(e));\n }\n}\n/**\n*/\nexport const MoveType = Object.freeze({ Move:0,\"0\":\"Move\",Jump:1,\"1\":\"Jump\", });\n/**\n*/\nexport const Team = Object.freeze({ Black:0,\"0\":\"Black\",White:1,\"1\":\"White\", });\n/**\n*/\nexport const Strength = Object.freeze({ Man:0,\"0\":\"Man\",King:1,\"1\":\"King\", });\n/**\n*/\nexport const SquareState = Object.freeze({ Empty:0,\"0\":\"Empty\",Occupied:1,\"1\":\"Occupied\",Unplayable:2,\"2\":\"Unplayable\", });\n/**\n*/\nexport const Moveable = Object.freeze({ Allowed:0,\"0\":\"Allowed\",UnoccupiedSrc:1,\"1\":\"UnoccupiedSrc\",OccupiedDest:2,\"2\":\"OccupiedDest\",OutOfBounds:3,\"3\":\"OutOfBounds\",Unplayable:4,\"4\":\"Unplayable\",WrongTeamSrc:5,\"5\":\"WrongTeamSrc\",IllegalTrajectory:6,\"6\":\"IllegalTrajectory\",NoJumpablePiece:7,\"7\":\"NoJumpablePiece\",JumpingSameTeam:8,\"8\":\"JumpingSameTeam\", });\n/**\n* Single state of a checkers board\n*/\nexport class Board {\n\n static __wrap(ptr) {\n const obj = Object.create(Board.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_board_free(ptr);\n }\n /**\n * @returns {number}\n */\n get width() {\n var ret = wasm.__wbg_get_board_width(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set width(arg0) {\n wasm.__wbg_set_board_width(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get height() {\n var ret = wasm.__wbg_get_board_height(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set height(arg0) {\n wasm.__wbg_set_board_height(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get current_turn() {\n var ret = wasm.__wbg_get_board_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set current_turn(arg0) {\n wasm.__wbg_set_board_current_turn(this.ptr, arg0);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @returns {Square}\n */\n cell(idx) {\n var ret = wasm.board_cell(this.ptr, idx);\n return Square.__wrap(ret);\n }\n /**\n * Get a copy of a board square by 1D array index\n * @param {number} idx\n * @param {Square} square\n */\n set_cell(idx, square) {\n _assertClass(square, Square);\n var ptr0 = square.ptr;\n square.ptr = 0;\n wasm.board_set_cell(this.ptr, idx, ptr0);\n }\n /**\n * Get a copy of a board square by 2D [`BrdIdx`] index\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n grid_cell(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.board_grid_cell(this.ptr, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {number} row\n * @param {number} col\n * @returns {number}\n */\n cell_index(row, col) {\n var ret = wasm.board_cell_index(this.ptr, row, col);\n return ret >>> 0;\n }\n /**\n * Similar to [`Board::cell_index`] but with a [`BrdIdx`] instead of separate indices. Transform a 2D row/column board index into a single 1D index for use with [`Board::cells`]\n * @param {BrdIdx} idx\n * @returns {number}\n */\n cell_idx(idx) {\n _assertClass(idx, BrdIdx);\n var ptr0 = idx.ptr;\n idx.ptr = 0;\n var ret = wasm.board_cell_idx(this.ptr, ptr0);\n return ret >>> 0;\n }\n /**\n * Transform a 1D array index (for [`Board::cells`]) into a 2D game board index (by row/col)\n * @param {number} idx\n * @returns {BrdIdx}\n */\n board_index(idx) {\n var ret = wasm.board_board_index(this.ptr, idx);\n return BrdIdx.__wrap(ret);\n }\n /**\n * Check whether a move given by source and destination indices is legal\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n can_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_can_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_man_move(from, to, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = wasm.board_validate_man_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @param {Piece} from_square_occupant\n * @returns {number}\n */\n validate_king_move(from, to, from_square_occupant) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n _assertClass(from_square_occupant, Piece);\n var ptr2 = from_square_occupant.ptr;\n from_square_occupant.ptr = 0;\n var ret = wasm.board_validate_king_move(this.ptr, ptr0, ptr1, ptr2);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n jumpee_idx(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_jumpee_idx(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Get a pointer to the backing array of board squares, [`Board::cells`]\n * @returns {number}\n */\n cells() {\n var ret = wasm.board_cells(this.ptr);\n return ret;\n }\n /**\n * Get the number of board squares\n * @returns {number}\n */\n num_cells() {\n var ret = wasm.board_num_cells(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the number of remaining pieces\n * @returns {number}\n */\n num_pieces() {\n var ret = wasm.board_num_pieces(this.ptr);\n return ret >>> 0;\n }\n /**\n * Get the number of remaining pieces for a player\n * @param {number} team\n * @returns {number}\n */\n num_player(team) {\n var ret = wasm.board_num_player(this.ptr, team);\n return ret >>> 0;\n }\n /**\n * Get the score value, Black - White pieces\n * @returns {number}\n */\n score() {\n var ret = wasm.board_score(this.ptr);\n return ret;\n }\n /**\n * Get the state of a board square by 1D array index\n * @param {number} idx\n * @returns {number}\n */\n cell_state(idx) {\n var ret = wasm.board_cell_state(this.ptr, idx);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_apply_move(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {Board}\n */\n apply_jump(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.board_apply_jump(this.ptr, ptr0, ptr1);\n return Board.__wrap(ret);\n }\n /**\n * Unwrap the jumpee piece from the square and [`Board::check_jumpee_team`] with [`Moveable`] response\n * @param {Square} jumpee\n * @param {Piece} from_occ\n * @returns {number}\n */\n static validate_jumpee(jumpee, from_occ) {\n _assertClass(jumpee, Square);\n var ptr0 = jumpee.ptr;\n jumpee.ptr = 0;\n _assertClass(from_occ, Piece);\n var ptr1 = from_occ.ptr;\n from_occ.ptr = 0;\n var ret = wasm.board_validate_jumpee(ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Check that the source piece and the jumpee are of opposing teams\n * @param {Piece} from\n * @param {Piece} jumpee\n * @returns {boolean}\n */\n static check_jumpee_team(from, jumpee) {\n _assertClass(from, Piece);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(jumpee, Piece);\n var ptr1 = jumpee.ptr;\n jumpee.ptr = 0;\n var ret = wasm.board_check_jumpee_team(ptr0, ptr1);\n return ret !== 0;\n }\n /**\n * Initialise a game board without game pieces\n * @param {number} width\n * @param {number} height\n * @param {number} current_turn\n */\n constructor(width, height, current_turn) {\n var ret = wasm.board_new(width, height, current_turn);\n return Board.__wrap(ret);\n }\n /**\n * Reset the given board to a starting layout with 3 rows of opposing pieces\n * @param {Board} board\n * @param {number} piece_rows\n * @returns {Board}\n */\n static init_game(board, piece_rows) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n var ret = wasm.board_init_game(ptr0, piece_rows);\n return Board.__wrap(ret);\n }\n}\n/**\n* Rank 2 tensor index to identify a board square by row and column\n*/\nexport class BrdIdx {\n\n static __wrap(ptr) {\n const obj = Object.create(BrdIdx.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_brdidx_free(ptr);\n }\n /**\n * @returns {number}\n */\n get row() {\n var ret = wasm.__wbg_get_brdidx_row(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set row(arg0) {\n wasm.__wbg_set_brdidx_row(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get col() {\n var ret = wasm.__wbg_get_brdidx_col(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set col(arg0) {\n wasm.__wbg_set_brdidx_col(this.ptr, arg0);\n }\n /**\n * @param {number} row\n * @param {number} col\n */\n constructor(row, col) {\n var ret = wasm.brdidx_from(row, col);\n return BrdIdx.__wrap(ret);\n }\n /**\n * @param {BrdIdx} other\n * @returns {boolean}\n */\n eq(other) {\n _assertClass(other, BrdIdx);\n var ret = wasm.brdidx_eq(this.ptr, other.ptr);\n return ret !== 0;\n }\n}\n/**\n* Root-level structure for managing the game as a collection of board states\n*/\nexport class Game {\n\n static __wrap(ptr) {\n const obj = Object.create(Game.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_game_free(ptr);\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_cells() {\n var ret = wasm.game_current_board_cells(this.ptr);\n return ret;\n }\n /**\n * Get pointer to current board's squares\n * @returns {number}\n */\n current_board_len() {\n var ret = wasm.game_current_board_len(this.ptr);\n return ret >>> 0;\n }\n /**\n * Current turn's team\n * @returns {number}\n */\n current_turn() {\n var ret = wasm.game_current_turn(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {BrdIdx} idx\n * @returns {Square}\n */\n current_cell_state(idx) {\n _assertClass(idx, BrdIdx);\n var ret = wasm.game_current_cell_state(this.ptr, idx.ptr);\n return Square.__wrap(ret);\n }\n /**\n * Attempt to make a move given a source and destination index\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n * @returns {number}\n */\n make_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n var ret = wasm.game_make_move(this.ptr, ptr0, ptr1);\n return ret >>> 0;\n }\n /**\n * Update board state with given move and push new board into current state\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n execute_move(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_execute_move(this.ptr, ptr0, ptr1);\n }\n /**\n * Update board state with given jump move and push new board into current state\n * @param {BrdIdx} from\n * @param {BrdIdx} to\n */\n execute_jump(from, to) {\n _assertClass(from, BrdIdx);\n var ptr0 = from.ptr;\n from.ptr = 0;\n _assertClass(to, BrdIdx);\n var ptr1 = to.ptr;\n to.ptr = 0;\n wasm.game_execute_jump(this.ptr, ptr0, ptr1);\n }\n /**\n * Push current board into the previous turns and set given board to current\n * @param {Board} board\n */\n push_new_board(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n wasm.game_push_new_board(this.ptr, ptr0);\n }\n /**\n * Set current board to given\n * @param {Board} board\n */\n set_current(board) {\n _assertClass(board, Board);\n var ptr0 = board.ptr;\n board.ptr = 0;\n wasm.game_set_current(this.ptr, ptr0);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n */\n constructor(width, height, piece_rows, first_turn) {\n var ret = wasm.game_new(width, height, piece_rows, first_turn);\n return Game.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} piece_rows\n * @param {number} first_turn\n * @param {string} canvas_id\n * @param {number} canvas_width\n * @param {number} canvas_height\n * @returns {Game}\n */\n static new_with_canvas(width, height, piece_rows, first_turn, canvas_id, canvas_width, canvas_height) {\n var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.game_new_with_canvas(width, height, piece_rows, first_turn, ptr0, len0, canvas_width, canvas_height);\n return Game.__wrap(ret);\n }\n /**\n * @param {Painter} value\n */\n set_painter(value) {\n _assertClass(value, Painter);\n var ptr0 = value.ptr;\n value.ptr = 0;\n wasm.game_set_painter(this.ptr, ptr0);\n }\n /**\n */\n draw() {\n wasm.game_draw(this.ptr);\n }\n}\n/**\n* Used to paint boards onto HTML canvases\n*/\nexport class Painter {\n\n static __wrap(ptr) {\n const obj = Object.create(Painter.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_painter_free(ptr);\n }\n /**\n * Default constructor which queries for canvas by ID\n * @param {number} width\n * @param {number} height\n * @param {string} canvas_id\n */\n constructor(width, height, canvas_id) {\n var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.painter_new(width, height, ptr0, len0);\n return Painter.__wrap(ret);\n }\n /**\n * Constructor with given canvas element\n * @param {number} width\n * @param {number} height\n * @param {HTMLCanvasElement} canvas\n * @returns {Painter}\n */\n static new_with_canvas(width, height, canvas) {\n var ret = wasm.painter_new_with_canvas(width, height, addHeapObject(canvas));\n return Painter.__wrap(ret);\n }\n /**\n * Set new square outline colour value\n * @param {any} value\n */\n set_square_outline(value) {\n wasm.painter_set_square_outline(this.ptr, addHeapObject(value));\n }\n /**\n * Set new line width for outlining squares\n * @param {number} value\n */\n set_outline_width(value) {\n wasm.painter_set_outline_width(this.ptr, value);\n }\n /**\n * Set whether squares are outlined\n * @param {boolean} value\n */\n set_draw_outline(value) {\n wasm.painter_set_draw_outline(this.ptr, value);\n }\n /**\n * Reset the canvas dimensions to the given width and height\n */\n reset_dimensions() {\n wasm.painter_reset_dimensions(this.ptr);\n }\n /**\n * Check whether given canvas dimensions divide evenly by given board dimenions\n * @param {Board} board\n * @returns {boolean}\n */\n validate_board_dim(board) {\n _assertClass(board, Board);\n var ret = wasm.painter_validate_board_dim(this.ptr, board.ptr);\n return ret !== 0;\n }\n /**\n * Draw a board onto the canvas\n * @param {Board} board\n */\n draw(board) {\n _assertClass(board, Board);\n wasm.painter_draw(this.ptr, board.ptr);\n }\n}\n/**\n* Game piece given by its team and strength (normal or kinged)\n*/\nexport class Piece {\n\n static __wrap(ptr) {\n const obj = Object.create(Piece.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_piece_free(ptr);\n }\n /**\n * @returns {number}\n */\n get team() {\n var ret = wasm.__wbg_get_piece_team(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set team(arg0) {\n wasm.__wbg_set_piece_team(this.ptr, arg0);\n }\n /**\n * @returns {number}\n */\n get strength() {\n var ret = wasm.__wbg_get_piece_strength(this.ptr);\n return ret >>> 0;\n }\n /**\n * @param {number} arg0\n */\n set strength(arg0) {\n wasm.__wbg_set_piece_strength(this.ptr, arg0);\n }\n /**\n * @param {number} team\n * @param {number} strength\n */\n constructor(team, strength) {\n var ret = wasm.piece_new(team, strength);\n return Piece.__wrap(ret);\n }\n}\n/**\n*/\nexport class Player {\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_player_free(ptr);\n }\n}\n/**\n* Board squares given by a state and a possible occupying game piece\n*/\nexport class Square {\n\n static __wrap(ptr) {\n const obj = Object.create(Square.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_square_free(ptr);\n }\n /**\n * Game piece if square is occupied\n * @returns {Piece | undefined}\n */\n get occupant() {\n var ret = wasm.__wbg_get_square_occupant(this.ptr);\n return ret === 0 ? undefined : Piece.__wrap(ret);\n }\n /**\n * Game piece if square is occupied\n * @param {Piece | undefined} arg0\n */\n set occupant(arg0) {\n let ptr0 = 0;\n if (!isLikeNone(arg0)) {\n _assertClass(arg0, Piece);\n ptr0 = arg0.ptr;\n arg0.ptr = 0;\n }\n wasm.__wbg_set_square_occupant(this.ptr, ptr0);\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n * @returns {number}\n */\n get state() {\n var ret = wasm.__wbg_get_square_state(this.ptr);\n return ret >>> 0;\n }\n /**\n * Description of whether the square is occupied or an unplayable, i.e. off-lattice square\n * @param {number} arg0\n */\n set state(arg0) {\n wasm.__wbg_set_square_state(this.ptr, arg0);\n }\n /**\n * Standard constructor function to form square from state and occupant\n * @param {number} state\n * @param {Piece | undefined} occupant\n */\n constructor(state, occupant) {\n let ptr0 = 0;\n if (!isLikeNone(occupant)) {\n _assertClass(occupant, Piece);\n ptr0 = occupant.ptr;\n occupant.ptr = 0;\n }\n var ret = wasm.square_new(state, ptr0);\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed piece square by team and strength\n * @param {number} team\n * @param {number} strength\n * @returns {Square}\n */\n static pc(team, strength) {\n var ret = wasm.square_pc(team, strength);\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed empty square\n * @returns {Square}\n */\n static empty() {\n var ret = wasm.square_empty();\n return Square.__wrap(ret);\n }\n /**\n * Helper function for a well-formed unplayable square\n * @returns {Square}\n */\n static unplay() {\n var ret = wasm.square_unplay();\n return Square.__wrap(ret);\n }\n}\n\nexport function __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nexport function __wbindgen_string_new(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nexport function __wbg_new_59cb74e423758ede() {\n var ret = new Error();\n return addHeapObject(ret);\n};\n\nexport function __wbg_stack_558ba5917b466edd(arg0, arg1) {\n var ret = getObject(arg1).stack;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbg_error_4bb6c2a97407129a(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n};\n\nexport function __wbg_instanceof_Window_11e25482011fc506(arg0) {\n var ret = getObject(arg0) instanceof Window;\n return ret;\n};\n\nexport function __wbg_document_5aff8cd83ef968f5(arg0) {\n var ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_getElementById_b180ea4ada06a837(arg0, arg1, arg2) {\n var ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nexport function __wbg_log_9a99fb1af846153b(arg0) {\n console.log(getObject(arg0));\n};\n\nexport function __wbg_instanceof_CanvasRenderingContext2d_779e79c4121aa91b(arg0) {\n var ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n return ret;\n};\n\nexport function __wbg_setstrokeStyle_2939ee453716e462(arg0, arg1) {\n getObject(arg0).strokeStyle = getObject(arg1);\n};\n\nexport function __wbg_setfillStyle_af790b5baf4d3210(arg0, arg1) {\n getObject(arg0).fillStyle = getObject(arg1);\n};\n\nexport function __wbg_setlineWidth_3e6b1837ae38d099(arg0, arg1) {\n getObject(arg0).lineWidth = arg1;\n};\n\nexport function __wbg_beginPath_2378575e37027ad3(arg0) {\n getObject(arg0).beginPath();\n};\n\nexport function __wbg_fill_558339447ed6ad43(arg0) {\n getObject(arg0).fill();\n};\n\nexport function __wbg_stroke_c1e0313c58997dcf(arg0) {\n getObject(arg0).stroke();\n};\n\nexport function __wbg_arc_fffd87d9113dce32() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {\n getObject(arg0).arc(arg1, arg2, arg3, arg4, arg5);\n}, arguments) };\n\nexport function __wbg_fillRect_46ffc8d2cef7e298(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).fillRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_strokeRect_7ea34fad8a7f0fe2(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).strokeRect(arg1, arg2, arg3, arg4);\n};\n\nexport function __wbg_instanceof_HtmlCanvasElement_fd3cbbe3906d7792(arg0) {\n var ret = getObject(arg0) instanceof HTMLCanvasElement;\n return ret;\n};\n\nexport function __wbg_setwidth_f3c88eb520ba8d47(arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n};\n\nexport function __wbg_setheight_5a1abba41e35c42a(arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n};\n\nexport function __wbg_getContext_813df131fcbd6e91() { return handleError(function (arg0, arg1, arg2) {\n var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_newnoargs_9fdd8f3961dd1bee(arg0, arg1) {\n var ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nexport function __wbg_call_ba36642bd901572b() { return handleError(function (arg0, arg1) {\n var ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_self_bb69a836a72ec6e9() { return handleError(function () {\n var ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_window_3304fc4b414c9693() { return handleError(function () {\n var ret = window.window;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_globalThis_e0d21cabc6630763() { return handleError(function () {\n var ret = globalThis.globalThis;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbg_global_8463719227271676() { return handleError(function () {\n var ret = global.global;\n return addHeapObject(ret);\n}, arguments) };\n\nexport function __wbindgen_is_undefined(arg0) {\n var ret = getObject(arg0) === undefined;\n return ret;\n};\n\nexport function __wbindgen_object_clone_ref(arg0) {\n var ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nexport function __wbindgen_debug_string(arg0, arg1) {\n var ret = debugString(getObject(arg1));\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nexport function __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\n","import { Game, Board, BrdIdx, Painter, Team, init_wasm, Moveable, SquareState, Square } from \"draught\";\n// import { memory } from \"draught/draught_bg.wasm\";\n\n///////////////////\n// CONSTS\n///////////////////\n\nconst CANVAS_WIDTH = 480;\nconst CANVAS_HEIGHT = 480;\n\nconst BOARD_WIDTH = 8;\nconst BOARD_HEIGHT = 8;\n\nconst PIECE_ROWS = 3;\n\nconst STATUS_TIMEOUT = 3000;\n\nconst GameState = {\n HUMAN_TURN: {\n THINKING: \"human_turn.thinking\",\n FROM_SELECTED: \"human_turn.from_selected\"\n },\n AI_TURN: \"ai_turn\"\n}\n\n//////////////////\n// GAME STUFF\n//////////////////\n\ninit_wasm();\n\n// let board = new Board(BOARD_WIDTH, BOARD_HEIGHT, Team.Black);\n\nconst statusText = document.getElementById(\"status-p\");\nconst statusAlert = document.getElementById(\"status-d\");\nconst teamText = document.getElementById(\"team-p\");\n\n// const startBtn = document.getElementById(\"startBtn\");\n// startBtn.onclick = start_game;\n\nlet statusTimeout = null;\nlet setStatus = setStatusAlert;\n\nlet current_state = GameState.HUMAN_TURN.THINKING;\nlet painter = new Painter(CANVAS_WIDTH, CANVAS_HEIGHT, \"game-canvas\");\n// painter.draw(board);\n\nlet clicks = [];\n\nlet game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black);\ngame.set_painter(painter);\ngame.draw();\n\nupdateTeamText();\n\n/////////////////\n// CANVAS\n/////////////////\n\nconst canvas = document.getElementById(\"game-canvas\");\ncanvas.addEventListener(\"click\", (event) => {\n var mousepos = getMousePos(canvas, event);\n // console.log(mousepos);\n var cell = new BrdIdx(\n Math.floor((mousepos.y / CANVAS_HEIGHT) * BOARD_HEIGHT),\n Math.floor((mousepos.x / CANVAS_WIDTH) * BOARD_WIDTH),\n );\n // console.log(cell);\n process_canvas_click(cell);\n})\n\n////////////////\n// FUNCS\n////////////////\n\nfunction start_game() {\n game = new Game(BOARD_WIDTH, BOARD_HEIGHT, PIECE_ROWS, Team.Black);\n game.set_painter(painter);\n game.draw();\n\n updateTeamText();\n current_state = GameState.HUMAN_TURN.THINKING;\n}\n\nfunction process_canvas_click(cell_coord) {\n\n switch(current_state) {\n case GameState.HUMAN_TURN.THINKING:\n if (game.current_cell_state(cell_coord).state != SquareState.Occupied ) {\n return;\n }\n\n if (game.current_cell_state(cell_coord).occupant.team != game.current_turn() ) {\n return;\n }\n\n console.log(\"Your turn, first piece picked\");\n\n clicks.push(cell_coord);\n current_state = GameState.HUMAN_TURN.FROM_SELECTED; \n \n break;\n case GameState.HUMAN_TURN.FROM_SELECTED:\n if (game.current_cell_state(cell_coord).state != SquareState.Empty ) {\n return;\n }\n\n console.log(\"Your turn, first piece already picked, picking second\");\n\n clicks.push(cell_coord);\n\n if (clicks.length != 2) {\n setStatus(`Error: wrong number of clicks to process ${clicks.length}`);\n console.error(`Error: wrong number of clicks to process ${clicks.length}`);\n\n return;\n }\n\n if (clicks[0].eq(clicks[1])) {\n setStatus(\"Move Cancelled\");\n } else {\n\n let status = game.make_move(clicks[0], clicks[1]);\n\n switch(status) {\n case Moveable.Allowed:\n break;\n case Moveable.IllegalTrajectory:\n setStatus(\"You can't move like that!\");\n break;\n case Moveable.JumpingSameTeam:\n setStatus(\"You can't jump your own piece!\");\n break;\n case Moveable.NoJumpablePiece:\n setStatus(\"There's nothing to jump!\");\n break;\n case Moveable.OccupiedDest:\n setStatus(\"There's a piece there!\");\n break;\n case Moveable.OutOfBounds:\n setStatus(\"That square's not on the board! (how have you managed that?)\");\n break;\n case Moveable.UnoccupiedSrc:\n setStatus(\"There's no piece to move!\");\n break;\n case Moveable.Unplayable:\n setStatus(\"That's not a playable square!\");\n break;\n case Moveable.WrongTeamSrc:\n setStatus(\"That's not your piece!\");\n break;\n }\n \n }\n\n game.draw();\n clicks = [];\n current_state = GameState.HUMAN_TURN.THINKING;\n \n break;\n case GameState.AI_TURN:\n console.log(\"It's the AI's turn!\");\n break;\n }\n\n updateTeamText();\n}\n\nfunction getMousePos(canvas, evt) {\n var rect = canvas.getBoundingClientRect();\n return {\n x: evt.clientX - rect.left,\n y: evt.clientY - rect.top\n };\n}\n\nfunction setStatusText(txt, hide = true) {\n if(statusTimeout != null) {\n clearInterval(statusTimeout);\n }\n\n statusText.innerText = txt;\n\n if(hide) {\n statusTimeout = setTimeout(() => {\n statusText.innerText = \"\";\n }, STATUS_TIMEOUT);\n }\n}\n\nfunction setStatusAlert(txt, alertType = \"danger\", hide = true) {\n if(statusTimeout != null) {\n clearInterval(statusTimeout);\n }\n\n statusAlert.className = `alert alert-${alertType}`;\n statusAlert.innerText = txt;\n statusAlert.hidden = false;\n\n if(hide) {\n statusTimeout = setTimeout(() => {\n statusAlert.hidden = true;\n }, STATUS_TIMEOUT);\n }\n}\n\nfunction updateTeamText(){\n let team = game.current_turn();\n switch(team) {\n case Team.White:\n teamText.innerText = \"⚪ White ⚪\";\n break;\n case Team.Black:\n teamText.innerText = \"🔴 Black 🔴\";\n break;\n }\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/29964598fec03e30f3aa.module.wasm b/96b9a573923750a3ae94.module.wasm similarity index 62% rename from 29964598fec03e30f3aa.module.wasm rename to 96b9a573923750a3ae94.module.wasm index d618abeac90b2a7b901dcf6cc77a95b15dad3532..87e8bddf37fd5df586dc4b47c4fe021631e71bd0 100644 GIT binary patch delta 12323 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

v};G%(ZS+?yVy zOpC~KDgS+FvUvTx&85lr&v)_rgW2_ng^7?U2@!kyeDQOsFNr%B=761v7i;75)K2_< zDehgYR`nRSdny=EIoK0^tT4c8vp5SW2fs*0w@liQ66X(9sQ>58+hSGQIIoU@!+K~S zco>9Jir}LN?gn9>B6uqTTu)8etO!;`K;fVWw?~8Er3lzh5tf%tf#WH{EJg5BBcOO@ z^CG8I6ki;f&t3XR*#r=w4(rMs+8?6Z<*gydxHB9kC^Blzm~xj8Ew41F;FlAwv@F$Q z$<-^ljEYJ+Tzi$#elhjus`%ah^YC(?97@2vwpS7=Oz(LjK&<+u%oOK;3D==z?De=v z1R%rdTlorFI>#nG~SL%&W#NW9a5iYO!|Bn}EZ$!FAvzwp6TSnhZ zdJ$PqcUtB9aAFJa9*sBfJ{ih~7n$HiI%FeHmwJ)ec><-An꾰yz#<&)qbnB3> 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 a33S$(zxO=_@+Z89@dP!x%etrO!2bhA7&v4A delta 12512 zcmbVy33!dy*8f?1pNuENn}`fDI5~otGe=0tX>Y6Qx`wK+bDGHz1QDgTN>DYmhHkZ0 zm8hwviiU9yD-pMt)BE;Jg8SGu|<6<$meuLo$1&XXa=3&K{cHBR?m{w2K88#GW|? z&W`;4Lrm+$1J58@BEMQffy}g2w6FweQ<$ZCX#aku)uOw_T4yz@U1Ng&8Tr}iLwaWy z^fE0IQ!K$WRi0Tw!C|K5EYM&Zq}I{ddgb))*{i_xu{dL?OJ9j9OWTGcnXl2;GrxCs zdR9)~zNWV|gQ8y2d*@~63^h#f;i69|g zokw-JX(E%u1%-%VKB-hG*7`K>P|N~*X7tNR&l;ScpOfd5sc%l6X(jV}q^DqTexB)T z7W4>F7iUmGMnR5gh=}toqi@7@-+;y+Fn_g8$k{U|FFijeqi^5-S*DH5w+2<$`!&%* z3mWl&dHgyO)+LjjEJHuxJ7^wlr%U`Z{sW)If8sOwkNk5!j&9N|c7yKI&-_z{u_I#jIQ$q{09Gm|IUke$5ZSkU&#OD zpR#l83_H#Cuu3-KC_BP-vx96uJHQSxL5Eod+spQ`ove`G<9GRCYPXTbvE%$FR>BU^ zkL(Nf85_%%@XhRno>erGZ(>LJF@BuBXDg_RAEA%=W*Wm6Qrl_#ceb4VWUJ^tzrg?1 zCVLx6p0$NaxaXd-_km|#X=CCae(%sCQRX*{#)#Jbb0Z%QeG>Bga7-$X86^D@LSR*=$ILgz%V<*d@o0Y)1s2M zBQ}`vl2GrxAT^p4c6aTHcq4X{>j`ExX`95Q*m|Bf(6qV~4AdqG|F~{JQ#f9k zR>o~E*aa`JvOYGh{UF|pn@XF6Z+z_zlXx#XE3mIWx5<ke@quBGjurI5axPZZA=GN>=nWCRLakGVU|el7!&Dkb+x*}b~a;9tErF8Ln{-jTF2J|(Zv|Xox@z6!`zfw!RMJ8 z8S)iZo6=Trt4BN4QdTQJpQddU|45BiQya5bU0{0*8J61k|8wdvaVhnAcjxpX@u{eo zYC!=(uI6?#Bvjh~Li*&|U~FBx%Iew_G5)C+p!~y6C5A(<Zir->v&C98LZ^wY3 zNFS%se03J9Zy%cm&F*ij8_mlY=j|Nl<20IP^|e~SS3k{4Q^a#=9o(^)@~czg)3nCs zGLBvEOq&;_VnUKKp~9n`@{<^tsv)T~NEY!gdsxJOXDlhVU-fRf8T-*Su#DSC?T#s( zGi89~I&ctLBDwxPS^QcULg&Q2P7P_JXg0Dh!3v#2Xp~smxu?R6fze2E?ut7^(o54?_FP_Wg>J`CjB6W zkE)CP%^p=C(z>;wA4*1aJ3;0J%w!SvmjlK9m%POA?%A}Ua2Qh6SxI| zWQ{nN)s^muxa>hxDi&r(*IBFEwwWnS=@w!);U*=btM;w#l+l1PwPZa;W8*FI#R{k>cp*-Zul#G82$@kaLJM)qSmumL`ODx@tH zdw8TPfJWM6-OvQLUy=8`{d)-T=MT6_Z07uE>e@0l78?7tl^AB$FOq ztS03XWaajPT$sOQ|Ljl|+c`*xidaT(tWtJz(N>Al{_SFo*l+YB2f8XYHz%8VM|^VA zMst;=urx-s7+`ZB#UYL>1bt;de*G(YKGQoHf|zqLlnz)Gi@8|cG3?rar$SUkVbU7Z zU~)(#o*URSelo8EC2Zop7R1ncYRf7|nvfNt5^f)AAExUl6#GUjghI73V!^^!Xxh zT$O(*{KG!&gH0xTgnbnrTB&$%d^^ibkgQ{HlRti&JpMp!0q4_-gwM1PSG*CL&8Bsu^J3JrD!MHSKPd@a zqc$;XCN|N;zIPTj@dtrm1>TFrzoy?uG1pNhL)&BI5f{k$+UMUuT;V^bUD6e1rH+V9 zM&^hlm3Wv@dnq?li$AXVnmi|vu84(m>NR|%LS!}+UydYXAC?O!=zhVq&Ende27YiJ zN8n_r>{OC$SY)Ni;`ySe*MK(QMS)H|;#ERbZUrDI2q91#(^}2B5Z4J*!#yxY6-eej zHj^5UHpXKZ+#b8rCX1a#2dy*Ew6}z|qgk-}3DbU26iw;BWv+HzteyJ`T^F^!s2{Fa z5x~`tS%Xum{ySJoJ-;h?>5G#b(Jy9U6x}O%Y2i=>--<6!;vp)&3=*4`o}zJL*0OZ3 z+ssDLte4#kE4VHHofe3@%h%zz^s8O4+sGBeJp~8K+yIYa;ZdAKWg@NEir8B8*wmHI zm5kl=I!|XQnkt}+Z$277`?rDIF!@O z1Pu>rWkLnk%;bxZu1AfbL__V#rmZVZ9G*|bV)zk!kPx3Axk_8ahesDz zQ|ca133>nwMl-KS{o$?(ZY=qLME~O<(B{TtuevURoZ6S-zcUwj8f@U*EBaKlgJ$^2 zB+f8X>oYGknZ;lN2G3R&@U>{w%(@E{kAzx_5gu0)fPU?Gd?chY*^e71QsCWwT5nnz zO7Xtx*GsfNQBS;krgq@tXBG?3JPYJsK4bGWybA{hyBWZ{D#FiNybGS)}gH zunf{FVL`9&mOPgFobdjBF;*-6zA3((UBvGU;dh}y{UbcmgCRz!gzW*`ssLfJy4wpW z7r)3{*G$@&lGiWPrV*2vm%BwRWB+j~0P3cJ;ARj`DuTBnxEh2CMetGtAWjY0st6WE zK$W2g*QbEssR&q45lX9v0B?%0P!aqT2SNz5dXil#iZ9OWcPNd)Yk%-m1(!d z2bZ>6k8pb!)I828Sfd`X{wyLcGHwTpw#P%Bh{Tc~+B+~eoo6}}-44c8ArwEXGd;WqxXb=)EtRntRr z=#{2MNT^=H{OAfQLtVQP2FLZj8lynh_NorYb64xYG4EUrcZ&Si?v~Du@ZUZHu$KN7 z4`7}9EnET11YjBGA4ldGd}a1>Laym7-FTj+5k3nkR<8)GfAShf3$*MEN&M}seZPjxPM@%L5;%5`tHu~wUJ zCbT$0X_2L=PY$!rs3V4UT)cO)UoH5Buf<+I2M|oK&nQ9=StF`$rYL2#{3F>p>EJ(R zKn*^B4nh9@;LiqhNG$);N(V*7pE6OM#D+5(LBs2rP=ex|hXAGGlojbiyQ7zl8b0;l z%%@1Gq*U2B^VTTH9e%r7)34ob@kIE}z1`d)Ny(AhdE}I;{he2X{}Q|G%L=iR5N)wo zcV`>aRd_cI+Sq)zDSofs4RoCi7t{s`&wEw0L%3H(hD=9^4>{HM2W}scYeQv*k6BDx zD4wnw!WJ;mv8uKBvntlv%)VdUJa|7A$4&DCUy7WgN&~3Ygeeq`RRN~7P;IBx33Qh% zlOGafD@I*tvHXxx1IK>k8b&WV+NFM+e2^5S)l4yXbTQN2IQ_7q>rs8cQXved7t#o9v%?kYQzUQ+=bqw?ed-r^}(Z;D~+Y=@|r8v_RuRo4V9ntaie(+2dQwQrUihP zkkScGZpx08rbi|`?nZSJur5nO4;BS{@m&Y`*m%_wvSX~WH8cT(?}ezci96ZfLP{pg zy-m+W+I&Qw8fvT77CirTKo)o^q&_x+CiTMvrZYLVjpg+{KU`jaEtY%TDVWAcd;&;q zItJ0kv88HF=|bz8`pd>TdQfAUB!_xX13X50Q!V+m2Svj~r#vVUQ&xFUDwWAro)k_8 z<;$Mb)*YI6S8-X+@x+G$!{6j~PfT=MUh|~r#wS$Xhi(*?Qq8Nzt~7^}U|aL&Zc=KT zB%ij>XsoisLf!BP^@7>Q%eh_@Y~IPW!*YWc)sdsTD1tt$rj{$J-B>F~26|Hv70c${ z6jKk`#gT4CtK{NRoo>i}S7j)*Ahy_18_#eyvQo9?!86S#z ze9z=3_MCcLkB=_}ns;$+u8j7jfldFi7_`(`4_A81gMD$>P%2ajuvl*QrT&HxD#GYU z7xEd6QvXJrq#-0NmOg$|?_pi_qRjJ$eRXn(eAkaWomQLZM{S_@-G0=`Nvi8l&pO+= z{xGUOELbl0CwC`(oj=tF{X2gcX7Th|6hO0N?OOCAjh4M@QQwCvcaU8?C{X@Ui!^^{ z?kD>tWeiwH1_e;78uY7*&JDU%?hhar_i_P}McXc?1W*U~@@eA{U0Z)Es7*s?fxKLs z;`|j3tK*;o;FmHckTQW25lCGf(uOQnTzc+R)#`X=X{&3Ur6Ki)%T__;@7&|ZLG-#` zIoEn4LY5=XsbBc>gCL4^9tL%M%hX^R7XqJ9M?<(6qDL}+SgXi0!Sq(ZXr{emH3Gy# z&~*u+S~2^%{Y#a9E*ppF3agP z<9jT1D1C$;G{~auh6=1EOOg?TB27r_qQW{&!WQ3KP%AwFBjgl*@^nue*Qz9wU-!&H}=Njs@G?8zF zQ5_$pc2(Fq@&tJ6)g0%esn6?=^oPo-$cM2;P3{x?$mCMdWGCB0rj<4d^+jrXWGbC# z90ecF4`P&a{Zlp=ah!CmN6%A{>{O51J#!IXL)>uyQ$pjRR|8!89M)-4ZDEegtfI%` zdFRO!_2{3@CAvgCOp!I)L!zi5mYx$u&wJzWqnjJ%(lyYH|BlbcG$i--j<%k9p1-|*lW0&!`-moUo@%F!Z z1jtU&^cCHe_oIHi&`J16o@+vd^tF7eDGjAP@#_;eY$i$U>7j z50^6NifTUKrFrRe*hUHRyD?N-4je^wX^@;cie6&{FUU=AQpfUq>=n1xSG;Y9ym!>*=Zp)<1<;D9Qg?pHgh2b@y}SN>5I{Icpn_LFkXwr&=^Ufo{!6rrjP_@$Jy$OK64~er)=v&xN)a;R7&hy*nA+1kHA!o~ zl*Ejfh%CDhuoNVgx%{v{LpJwo8V!*Sb* zmf-SKAT8A|PlYUd!Ud`2`pqa@d^%%^2w3sA%S^>g?DGi;S^1=EN`ia?s6_T(O3(9E zELnEx58S4$B2AuMO0@!4GtIbfWgt`CIr@gRRtgQ5QOhWTm$K&iTR^Xv0)9x;h)96eGjBR{^@Icgh5;j-CmkH7}&9)D?UJ?@9;H@lP%4BDVn-UX+ffy*g1 zWaHy5Mr~r1WZ2;1a{3yVirzHdnjZ%SBZ|mVb{a}v^1@dXplxBEx=#(r$m^Z8l_eS* z{%sd|$fy+*%(nquP90d}n=7au-wv*aa4uRwA$$jmuO_+46Duf?cFK&E)JTRD!;{OM zS{u+iCo4z4A-Bu$%tvm`?N&o#<%D7YVvo_@tJ-^ww$Dnm_ZjWZs$HSlcKOyyij#*G zq0;CK{2J{8M*C&eK4`ROs`eqHeOk2-8|{b^w2v6=w^aM699V+-5xAa^Wh(w9{&EBWYd@l%6r#&#CrVnZBCdqH_l6XGJ}< zHOOi|$rslkH~lPUuR%fd3zJhnriRjOE!O!}c3g|#o~qiHRXc%SVJ(b#W~`;qT34A5 zqL&J>jw^P*G1+1|HMJ!rCAQ4Uj*rWZ?U9g_kbLcL7w@jifN!ZIzrkXR>4ttwVYsRm zCs%%f)B2PR5G&^mDa!FpGd5@kg%Aal|>1hGF=Y>wl%9+~9U zI?@{4W?l|4^(gxvR;%W#Bk10d&DJBL+?8*r$36Mcdg{!p;L&=Ds#;HV*nK9iS3)^y z8=#N}xH%X|g|gQMC~>4L-ax(hD4tNQWjC2rMj<#n4%`P{?^i~3`TIP+M)#63xXTz` zbIU)LVap%zmesyt<6~>QxymjZDa?NycWOP`xY#&ej@U>y_ynF;t(cZ_>n5x?k@u}Z zvgANlX`2yEKIDhw^&S)~i+V%dBR11w`baj~g5W=iJ1p|<7U+61cQ`mAnwwm`h3e20 zS-FL}@~O_f=&t|tRtn@F^VTwEIsh|bD=H}=;Y(`vmkul&C4B&HX zsOu&A!stofiJp1<6{X0=vT`R<_r#qr-F*IPH7N!O2~x&QFNb{H%dz$%*|VH*A6R}? z4u4-PE6b@V?(yndsk;jdOJ&S1O6AKSoYOJg<-}dkRd3d6^uF1snweUo7|yh3FRI1$^2T0D@Y}#Gkl0xOl{t5&AC$70 zCsnJ?O|l9KwQb>Ejt%AX8&L4h*1z1n-Ue`20-UmY1zdBx98f_iYzLQ-3n)citRRi; zk%a^ikUuC<4I8)7?LaIaGqgkg)kxgVv{zDG#SDnY7% zv4>T{?b0g&?EUiJm6YgR$vt}K^)5&sk};^?0lB^ss5vOFRZ>fK$XMS$Gd4RVE+;b~ zD=8x*JE2GXVTW834!|Wc4p1Y%!opJ=x?S zHgR009>n}74xfJrSUe{;A3_y(URn;*OGsQ9hp8L?-pTUQVX#~iQi%B%KG9L*pw8^af90_T$D(7%v6tnhW5`BV`0I)oAyN3W!9{L|2;+_;@%_f1 zG6oz!PEq_CZ)dy(pP=UaI#i}Fmw5u^&JEtlc>DbXEWP#wioDH(Q@HQM43OKBwc`GC#gBzGJ2Yyf|BqNT5pwrYDX{^_2=%Wg_*9F{g8YsNa`x|di*s=cysr4o> diff --git a/doc/draught/game/index.html b/doc/draught/game/index.html index b4b2642..387b7da 100644 --- a/doc/draught/game/index.html +++ b/doc/draught/game/index.html @@ -1,7 +1,7 @@ draught::game - Rust

Module draught::game[][src]

Top-level object for managing Boards, applying and managing turns

+ Change settings

Module draught::game[][src]

Top-level object for managing Boards, applying and managing turns

Structs

Game

Root-level structure for managing the game as a collection of board states

diff --git a/doc/draught/game/struct.Game.html b/doc/draught/game/struct.Game.html index 743e58c..bc220e8 100644 --- a/doc/draught/game/struct.Game.html +++ b/doc/draught/game/struct.Game.html @@ -9,16 +9,16 @@

Fields

current: Boardprevious_boards: Vec<Board>painter: Option<Painter>

Implementations

impl Game[src]

pub fn previous_board(&self, turn: usize) -> &Board[src]

Get a read-only copy of a previous turn’s board

pub fn current_board(&self) -> &Board[src]

Set current board to given

-

impl Game[src]

pub fn current_board_cells(&self) -> *const Square[src]

Get pointer to current board’s squares

+

impl Game[src]

pub fn current_board_cells(&self) -> *const Square[src]

Get pointer to current board’s squares

pub fn current_board_len(&self) -> usize[src]

Get pointer to current board’s squares

pub fn current_turn(&self) -> Team[src]

Current turn’s team

-

pub fn current_cell_state(&self, idx: BrdIdx) -> Square[src]

pub fn make_move(&mut self, from: BrdIdx, to: BrdIdx) -> Moveable[src]

Attempt to make a move given a source and destination index

-

pub fn execute_move(&mut self, from: BrdIdx, to: BrdIdx)[src]

Update board state with given move and push new board into current state

-

pub fn execute_jump(&mut self, from: BrdIdx, to: BrdIdx)[src]

Update board state with given jump move and push new board into current state

-

pub fn push_new_board(&mut self, board: Board)[src]

Push current board into the previous turns and set given board to current

-

pub fn set_current(&mut self, board: Board)[src]

Set current board to given

-

pub fn new(
    width: usize,
    height: usize,
    piece_rows: usize,
    first_turn: Team
) -> Game
[src]

pub fn new_with_canvas(
    width: usize,
    height: usize,
    piece_rows: usize,
    first_turn: Team,
    canvas_id: &str,
    canvas_width: u32,
    canvas_height: u32
) -> Game
[src]

pub fn set_painter(&mut self, value: Painter)[src]

pub fn draw(&self)[src]

Trait Implementations

impl Debug for Game[src]

impl Display for Game[src]

pub fn current_cell_state(&self, idx: &BrdIdx) -> Square[src]

pub fn make_move(&mut self, from: BrdIdx, to: BrdIdx) -> Moveable[src]

Attempt to make a move given a source and destination index

+

pub fn execute_move(&mut self, from: BrdIdx, to: BrdIdx)[src]

Update board state with given move and push new board into current state

+

pub fn execute_jump(&mut self, from: BrdIdx, to: BrdIdx)[src]

Update board state with given jump move and push new board into current state

+

pub fn push_new_board(&mut self, board: Board)[src]

Push current board into the previous turns and set given board to current

+

pub fn set_current(&mut self, board: Board)[src]

Set current board to given

+

pub fn new(
    width: usize,
    height: usize,
    piece_rows: usize,
    first_turn: Team
) -> Game
[src]

pub fn new_with_canvas(
    width: usize,
    height: usize,
    piece_rows: usize,
    first_turn: Team,
    canvas_id: &str,
    canvas_width: u32,
    canvas_height: u32
) -> Game
[src]

pub fn set_painter(&mut self, value: Painter)[src]

pub fn draw(&self)[src]

Trait Implementations

impl Debug for Game[src]

impl Display for Game[src]

impl From<Game> for JsValue[src]

impl FromWasmAbi for Game[src]

type Abi = u32

The wasm ABI type that this converts from when coming back out from the ABI boundary. Read more

diff --git a/doc/src/draught/game/mod.rs.html b/doc/src/draught/game/mod.rs.html index 7a7bbea..89913f5 100644 --- a/doc/src/draught/game/mod.rs.html +++ b/doc/src/draught/game/mod.rs.html @@ -150,6 +150,7 @@ 147 148 149 +150
 //! Top-level object for managing [`Board`]s, applying and managing turns
 
@@ -209,8 +210,8 @@
         self.current.current_turn
     }
 
-    pub fn current_cell_state(&self, idx: BrdIdx) -> Square {
-        self.current.cell(self.current.cell_idx(idx))
+    pub fn current_cell_state(&self, idx: &BrdIdx) -> Square {
+        self.current.cell(self.current.cell_idx(*idx))
     }
 
     /// Attempt to make a move given a source and destination index
@@ -227,13 +228,14 @@
             else {
                 self.execute_jump(from, to);
             }
+
+            // board has been changed, update player turn
+            self.current.current_turn = self.current.current_turn.opponent();
+
         } else {
             log!("Unable to make move, {:?}", able);
         }
 
-        // board has been changed, update player turn
-        self.current.current_turn = self.current.current_turn.opponent();
-
         able
     }
 
diff --git a/index.html b/index.html
index 27eba6e..b725555 100644
--- a/index.html
+++ b/index.html
@@ -42,12 +42,19 @@
             
Docs +
-
-
+
+
+

+
+
+