import { board } from "../board.js" import { Vector2 } from "../engine/vector2.js" const SURROUNDING = [ new Vector2(-1, 0), new Vector2(0, 1), new Vector2(0, -1), new Vector2(1, 0), ] export function hasLiberties({ position, team }) { return checkLiberties({ position, team }) } function checkLiberties({ position, team, checkedStones = [], checkedLiberties = [], }) { if ( Array.from(checkedStones) .some(p => Vector2.equals(p, position)) ) { return false } checkedStones.push(position) let surroundingSquares = Array.from(SURROUNDING) .map(v => Vector2.sum(v, position)) .filter(z => 0 <= z.x && z.x < board.size && 0 <= z.y && z.y < board.size ) surroundingSquares .filter(z => board.stones[z.y][z.x] == undefined) .forEach(z => { if (!Array.from(checkedStones) .some(p => Vector2.equals(p, z)) ) { checkedLiberties.push(z) } }) surroundingSquares .filter(z => board.stones[z.y][z.x] != undefined) .filter(z => board.stones[z.y][z.x].team == team) .forEach(z => { checkLiberties({ position: z, team: team, checkedStones: checkedStones, checkedLiberties: checkedLiberties, }) }) if (checkedLiberties.length > 0) { return true } return false }