stockfish for godot
| -rw-r--r-- | Main.gd | 3 | ||||
| -rw-r--r-- | README.md | 16 | ||||
| -rw-r--r-- | addons/stockfish.gd/README.md | 16 | ||||
| -rw-r--r-- | addons/stockfish.gd/fen.gd | 6 | ||||
| -rw-r--r-- | addons/stockfish.gd/package.json | 2 | ||||
| -rw-r--r-- | addons/stockfish.gd/pgn.gd | 1 | ||||
| -rw-r--r-- | addons/stockfish.gd/stockfish_loader.gd | 21 |
7 files changed, 57 insertions, 8 deletions
@@ -6,7 +6,6 @@ var fish: StockfishLoader.Stockfish func _ready() -> void: var loader := StockfishLoader.new() fish = loader.load_stockfish() - yield(fish, "engine_ready") - print("GO FISH") fish.game = Chess.new() + print("GO FISH") fish.go() @@ -3,3 +3,19 @@ [](https://godotengine.org "Made with godot") [](https://www.npmjs.com/package/@bendn/stockfish.gd) <a href='https://ko-fi.com/bendn' title='Buy me a coffee' target='_blank'><img height='28' src='https://storage.ko-fi.com/cdn/brandasset/kofi_button_red.png' alt='Buy me a coffee'> </a> + +## Usage + +```gdscript +extends Node + +var fish: StockfishLoader.Stockfish + + +func _ready() -> void: + var loader := StockfishLoader.new() + fish = loader.load_stockfish() + fish.game = Chess.new() + print("GO FISH") + fish.go() +``` diff --git a/addons/stockfish.gd/README.md b/addons/stockfish.gd/README.md index ad4885c..d79e036 100644 --- a/addons/stockfish.gd/README.md +++ b/addons/stockfish.gd/README.md @@ -1 +1,17 @@ # stockfish + +## Usage + +```gdscript +extends Node + +var fish: StockfishLoader.Stockfish + + +func _ready() -> void: + var loader := StockfishLoader.new() + fish = loader.load_stockfish() + fish.game = Chess.new() + print("GO FISH") + fish.go() +``` diff --git a/addons/stockfish.gd/fen.gd b/addons/stockfish.gd/fen.gd index 7da99c2..281769d 100644 --- a/addons/stockfish.gd/fen.gd +++ b/addons/stockfish.gd/fen.gd @@ -1,12 +1,14 @@ extends Reference class_name FEN -var reg: = RegEx.new() -var reg_src:= "^(?<pieces>([pnbrqkPNBRQK1-8]{1,8}/?){8})\\s+(?<turn>b|w)\\s+(?<castling>-|K?Q?k?q?)\\s+(?<enpassant>-|[a-h][3-6])\\s+(?<halfmove>\\d+)\\s+(?<fullmove>\\d+)" +var reg := RegEx.new() +var reg_src := "^(?<pieces>([pnbrqkPNBRQK1-8]{1,8}/?){8})\\s+(?<turn>b|w)\\s+(?<castling>-|K?Q?k?q?)\\s+(?<enpassant>-|[a-h][3-6])\\s+(?<halfmove>\\d+)\\s+(?<fullmove>\\d+)" + func _init() -> void: reg.compile(reg_src) + func parse(fen: String) -> Dictionary: var res = reg.search(fen) if res: diff --git a/addons/stockfish.gd/package.json b/addons/stockfish.gd/package.json index 6668326..f7cbeaf 100644 --- a/addons/stockfish.gd/package.json +++ b/addons/stockfish.gd/package.json @@ -1,6 +1,6 @@ { "name": "@bendn/stockfish.gd", - "version": "1.1.0", + "version": "1.1.5", "description": "godot stockfish", "main": "stockfish_loader.gd", "scripts": { diff --git a/addons/stockfish.gd/pgn.gd b/addons/stockfish.gd/pgn.gd index 21a4ea8..7870ada 100644 --- a/addons/stockfish.gd/pgn.gd +++ b/addons/stockfish.gd/pgn.gd @@ -7,6 +7,7 @@ var movetextex = compile( var tagex = compile('^\\[([A-Za-z0-9_]+)\\s+"([^\\r]*)"\\]\\s*$') var tagnameex = compile("^[A-Za-z0-9_]+\\Z") + static func compile(src: String) -> RegEx: var regex := RegEx.new() regex.compile(src) diff --git a/addons/stockfish.gd/stockfish_loader.gd b/addons/stockfish.gd/stockfish_loader.gd index 126cbe9..ea71f05 100644 --- a/addons/stockfish.gd/stockfish_loader.gd +++ b/addons/stockfish.gd/stockfish_loader.gd @@ -27,17 +27,33 @@ class Stockfish: var game: Chess setget set_game var sent_isready := false + var engine_ready := false + var call_queue := PoolStringArray() signal engine_ready signal line_recieved signal load_failed - # @override func send_line(cmd: String) -> void: + if not engine_ready: + call_queue.append(cmd) + return print("%s --> stockfish" % cmd) + _send_line(cmd) + + # @override + func _send_line(cmd: String) -> void: + pass func _init() -> void: connect("line_recieved", self, "_line_recieved") + connect("engine_ready", self, "_engine_ready") + + func _engine_ready() -> void: + engine_ready = true + for call in call_queue: + send_line(call) + call_queue.resize(0) func set_game(new_game: Chess) -> void: game = new_game @@ -94,8 +110,7 @@ class JSStockfish: JavaScript.get_interface("window").stockfish_data_recieved = data_recieved_callback JavaScript.get_interface("window").stockfish_failed_load = load_failed_callback - func send_line(cmd: String) -> void: - .send_line(cmd) + func _send_line(cmd: String) -> void: JavaScript.eval("window.stockfishCommand('%s')" % cmd) # js callback arguments are in arrays. i guess its so that you can call functions with less args then they want? |