From c7f82769e3ea6949a8241c5a78b3b2ba2cff988e Mon Sep 17 00:00:00 2001 From: Pavel Lutskov Date: Wed, 5 Jan 2022 22:10:04 +0100 Subject: [PATCH] Add reset button --- adapter/adapter.py | 6 ++++++ frontend/main.js | 15 ++++++++++++++- rs/src/engine.rs | 3 +++ rs/src/ui.rs | 9 +++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/adapter/adapter.py b/adapter/adapter.py index 5e8c7a2..33ef061 100644 --- a/adapter/adapter.py +++ b/adapter/adapter.py @@ -79,5 +79,11 @@ def choose_move(): return flask.jsonify(move) +@app.route("/reset/", methods=["POST"]) +def reset(): + (state_str,) = ask_engine("reset") + return flask.jsonify(parse_state(state_str)) + + if __name__ == "__main__": app.run(debug=True, host="127.0.0.1", port=3000) diff --git a/frontend/main.js b/frontend/main.js index 3ea8eef..96f5817 100644 --- a/frontend/main.js +++ b/frontend/main.js @@ -31,14 +31,18 @@ class Backend { getAvailableMoves(position) { return post_json("http://localhost:3000/get_moves/", position); } + reset() { + return post_json("http://localhost:3000/reset/"); + } } class Chess { constructor() { this.backend = new Backend(); this.canvas = new visuals.Canvas(); - this.button = document.createElement("button"); this.autoplay = false; + + this.button = document.createElement("button"); this.button.innerHTML = "Autoplay Off"; this.button.onclick = () => { this.autoplay = !this.autoplay; @@ -47,6 +51,15 @@ class Chess { ]; }; document.body.appendChild(this.button); + + this.resetButton = document.createElement("button"); + this.resetButton.innerHTML = "Reset"; + this.resetButton.onclick = () => { + this.backend.reset(); + this.updateState(); + }; + document.body.appendChild(this.resetButton); + this.configVis = new visuals.ConfigVis(this.backend.getConfig()); this.configVis.draw(this.canvas); this.activeSquares = new visuals.ActiveSquares(); diff --git a/rs/src/engine.rs b/rs/src/engine.rs index f2073b0..42e3482 100644 --- a/rs/src/engine.rs +++ b/rs/src/engine.rs @@ -13,6 +13,9 @@ impl Engine { board, } } + pub fn reset(&mut self) { + self.board.reset() + } pub fn get_state(&self) -> &board::Board { &self.board } diff --git a/rs/src/ui.rs b/rs/src/ui.rs index 84f591c..5b1e552 100644 --- a/rs/src/ui.rs +++ b/rs/src/ui.rs @@ -230,6 +230,14 @@ impl Ui { Err("choose_move takes 1 arg".to_owned()) } } + fn reset(&mut self, args: &[&str]) -> Result { + if let [] = args { + self.engine.reset(); + Ok(format!("{}", self.engine.get_state())) + } else { + Err("reset doesn't take args".to_owned()) + } + } fn handle_command(&mut self, s: &str) -> Result { let mut cmd = s.split(','); // There will be at least an empty string => otherwise panic @@ -241,6 +249,7 @@ impl Ui { "make_move" => self.make_move(&args), "set_state" => self.set_state(&args), "choose_move" => self.choose_move(&args), + "reset" => self.reset(&args), "" => Err("No command given".to_owned()), _ => Err("Invalid command".to_owned()), }