stockfish for godot
add call queue
bendn 2022-09-14
parent e576e2c · commit 0a9a317
-rw-r--r--Main.gd3
-rw-r--r--README.md16
-rw-r--r--addons/stockfish.gd/README.md16
-rw-r--r--addons/stockfish.gd/fen.gd6
-rw-r--r--addons/stockfish.gd/package.json2
-rw-r--r--addons/stockfish.gd/pgn.gd1
-rw-r--r--addons/stockfish.gd/stockfish_loader.gd21
7 files changed, 57 insertions, 8 deletions
diff --git a/Main.gd b/Main.gd
index 8287081..2c764d5 100644
--- a/Main.gd
+++ b/Main.gd
@@ -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()
diff --git a/README.md b/README.md
index 5da4f24..ea73f60 100644
--- a/README.md
+++ b/README.md
@@ -3,3 +3,19 @@
[![version](https://img.shields.io/badge/3.x-blue?logo=godot-engine&logoColor=white&label=godot&style=for-the-badge)](https://godotengine.org "Made with godot")
[![package](https://img.shields.io/npm/v/@bendn/stockfish.gd?label=version&style=for-the-badge)](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?