X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2FplayCompMove.js;h=d83148fbf680465229b28a886b9f6c1be168c71d;hp=d6b0cea94dd402d97326a9eedcb4b9f2bd88b9e8;hb=HEAD;hpb=5b020e732156ee77d3b15b127aef2df57c2562ad diff --git a/client/src/playCompMove.js b/client/src/playCompMove.js index d6b0cea9..d83148fb 100644 --- a/client/src/playCompMove.js +++ b/client/src/playCompMove.js @@ -1,25 +1,27 @@ -// For asynchronous computer move search -onmessage = function(e) -{ - switch (e.data[0]) - { - case "scripts": - self.importScripts( - '/javascripts/base_rules.js', - '/javascripts/utils/array.js', - '/javascripts/variants/' + e.data[1] + '.js'); - self.V = eval(e.data[1] + "Rules"); - break; - case "init": - const fen = e.data[1]; - self.vr = new VariantRules(fen); - break; - case "newmove": - self.vr.play(e.data[1]); - break; - case "askmove": - const compMove = self.vr.getComputerMove(); - postMessage(compMove); - break; - } -} +// Logic to play a computer move in a web worker +onmessage = async function(e) { + switch (e.data[0]) { + case "scripts": { + await import("@/variants/" + e.data[1] + ".js") + .then((vModule) => { self.V = vModule[e.data[1] + "Rules"]; }); + break; + } + case "init": { + const fen = e.data[1]; + self.vr = new self.V(fen); + break; + } + case "newmove": + let move = e.data[1]; + // Caution: could be a multi-move + if (!Array.isArray(move)) + move = [move]; + move.forEach(m => self.vr.play(m)); + break; + case "askmove": { + const compMove = self.vr.getComputerMove(); + postMessage(compMove); + break; + } + } +};