{"version":3,"sources":["../../../../src/engine/utils/kicks/index.ts"],"sourcesContent":["import { type BoardSquare } from \"../../board\";\nimport { Mino } from \"../../queue/types\";\nimport type { Rotation } from \"../tetromino/types\";\nimport { kicks } from \"./data\";\n\nexport { kicks as kickData };\nexport type KickTable = keyof typeof kicks;\n\nexport const legal = (blocks: [number, number][], board: BoardSquare[][]) => {\n  if (board.length === 0) return false;\n  for (const block of blocks) {\n    if (block[0] < 0) return false;\n    if (block[0] >= board[0].length) return false;\n    if (block[1] < 0) return false;\n    if (block[1] >= board.length) return false;\n    if (board[block[1]][block[0]]) return false;\n  }\n\n  return true;\n};\n\nexport const performKick = (\n  kicktable: KickTable,\n  piece: Mino,\n  pieceLocation: [number, number],\n  ao: [number, number],\n  maxMovement: boolean,\n  blocks: [number, number][],\n  startRotation: Rotation,\n  endRotation: Rotation,\n  board: BoardSquare[][]\n):\n  | {\n      kick: [number, number];\n      newLocation: [number, number];\n      id: string;\n      index: number;\n    }\n  | boolean => {\n  try {\n    if (\n      legal(\n        blocks.map((block) => [\n          pieceLocation[0] + block[0] - ao[0],\n          Math.floor(pieceLocation[1]) - block[1] - ao[1]\n        ]),\n        board\n      )\n    )\n      return true;\n\n    const kickID = `${startRotation}${endRotation}`;\n    const table = kicks[kicktable];\n    const customKicksetID =\n      `${piece.toLowerCase()}_kicks` as keyof typeof table;\n    const kickset: [number, number][] =\n      customKicksetID in table\n        ? table[customKicksetID][\n            kickID as keyof (typeof table)[typeof customKicksetID]\n          ]\n        : (table.kicks[kickID as keyof typeof table.kicks] as [\n            number,\n            number\n          ][]);\n\n    for (let i = 0; i < kickset.length; i++) {\n      const [dx, dy] = kickset[i];\n\n      const newY = maxMovement\n        ? pieceLocation[1] - dy - ao[1]\n        : Math.ceil(pieceLocation[1]) - 0.1 - dy - ao[1];\n\n      if (\n        legal(\n          blocks.map((block) => [\n            pieceLocation[0] + block[0] + dx - ao[0],\n            Math.floor(newY) - block[1]\n          ]),\n          board\n        )\n      ) {\n        return {\n          newLocation: [pieceLocation[0] + dx - ao[0], newY],\n          kick: [dx, -dy],\n          id: kickID,\n          index: i\n        };\n      }\n    }\n\n    return false;\n  } catch {\n    return false;\n  }\n};\n"],"names":["kicks","kickData","legal","blocks","board","length","block","performKick","kicktable","piece","pieceLocation","ao","maxMovement","startRotation","endRotation","map","Math","floor","kickID","table","customKicksetID","toLowerCase","kickset","i","dx","dy","newY","ceil","newLocation","kick","id","index"],"mappings":"AAGA,SAASA,KAAK,QAAQ,SAAS;AAE/B,SAASA,SAASC,QAAQ,GAAG;AAG7B,OAAO,MAAMC,QAAQ,CAACC,QAA4BC;IAChD,IAAIA,MAAMC,MAAM,KAAK,GAAG,OAAO;IAC/B,KAAK,MAAMC,SAASH,OAAQ;QAC1B,IAAIG,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO;QACzB,IAAIA,KAAK,CAAC,EAAE,IAAIF,KAAK,CAAC,EAAE,CAACC,MAAM,EAAE,OAAO;QACxC,IAAIC,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO;QACzB,IAAIA,KAAK,CAAC,EAAE,IAAIF,MAAMC,MAAM,EAAE,OAAO;QACrC,IAAID,KAAK,CAACE,KAAK,CAAC,EAAE,CAAC,CAACA,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO;IACxC;IAEA,OAAO;AACT,EAAE;AAEF,OAAO,MAAMC,cAAc,CACzBC,WACAC,OACAC,eACAC,IACAC,aACAT,QACAU,eACAC,aACAV;IASA,IAAI;QACF,IACEF,MACEC,OAAOY,GAAG,CAAC,CAACT,QAAU;gBACpBI,aAAa,CAAC,EAAE,GAAGJ,KAAK,CAAC,EAAE,GAAGK,EAAE,CAAC,EAAE;gBACnCK,KAAKC,KAAK,CAACP,aAAa,CAAC,EAAE,IAAIJ,KAAK,CAAC,EAAE,GAAGK,EAAE,CAAC,EAAE;aAChD,GACDP,QAGF,OAAO;QAET,MAAMc,SAAS,GAAGL,gBAAgBC,aAAa;QAC/C,MAAMK,QAAQnB,KAAK,CAACQ,UAAU;QAC9B,MAAMY,kBACJ,GAAGX,MAAMY,WAAW,GAAG,MAAM,CAAC;QAChC,MAAMC,UACJF,mBAAmBD,QACfA,KAAK,CAACC,gBAAgB,CACpBF,OACD,GACAC,MAAMnB,KAAK,CAACkB,OAAmC;QAKtD,IAAK,IAAIK,IAAI,GAAGA,IAAID,QAAQjB,MAAM,EAAEkB,IAAK;YACvC,MAAM,CAACC,IAAIC,GAAG,GAAGH,OAAO,CAACC,EAAE;YAE3B,MAAMG,OAAOd,cACTF,aAAa,CAAC,EAAE,GAAGe,KAAKd,EAAE,CAAC,EAAE,GAC7BK,KAAKW,IAAI,CAACjB,aAAa,CAAC,EAAE,IAAI,MAAMe,KAAKd,EAAE,CAAC,EAAE;YAElD,IACET,MACEC,OAAOY,GAAG,CAAC,CAACT,QAAU;oBACpBI,aAAa,CAAC,EAAE,GAAGJ,KAAK,CAAC,EAAE,GAAGkB,KAAKb,EAAE,CAAC,EAAE;oBACxCK,KAAKC,KAAK,CAACS,QAAQpB,KAAK,CAAC,EAAE;iBAC5B,GACDF,QAEF;gBACA,OAAO;oBACLwB,aAAa;wBAAClB,aAAa,CAAC,EAAE,GAAGc,KAAKb,EAAE,CAAC,EAAE;wBAAEe;qBAAK;oBAClDG,MAAM;wBAACL;wBAAI,CAACC;qBAAG;oBACfK,IAAIZ;oBACJa,OAAOR;gBACT;YACF;QACF;QAEA,OAAO;IACT,EAAE,OAAM;QACN,OAAO;IACT;AACF,EAAE"}