@minicode-dev/chat 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/assets/sounds/tanks/big_explosion.mp3 +0 -0
- package/assets/sounds/tanks/big_explosion.ogg +0 -0
- package/assets/sounds/tanks/cannon_fire.mp3 +0 -0
- package/assets/sounds/tanks/cannon_fire.ogg +0 -0
- package/assets/sounds/tanks/defeat.mp3 +0 -0
- package/assets/sounds/tanks/defeat.ogg +0 -0
- package/assets/sounds/tanks/engine_loop.mp3 +0 -0
- package/assets/sounds/tanks/engine_loop.ogg +0 -0
- package/assets/sounds/tanks/engine_start.mp3 +0 -0
- package/assets/sounds/tanks/engine_start.ogg +0 -0
- package/assets/sounds/tanks/projectile_whistle.mp3 +0 -0
- package/assets/sounds/tanks/projectile_whistle.ogg +0 -0
- package/assets/sounds/tanks/tank_destroyed.mp3 +0 -0
- package/assets/sounds/tanks/tank_destroyed.ogg +0 -0
- package/assets/sounds/tanks/tank_hit.mp3 +0 -0
- package/assets/sounds/tanks/tank_hit.ogg +0 -0
- package/assets/sounds/tanks/terrain_impact.mp3 +0 -0
- package/assets/sounds/tanks/terrain_impact.ogg +0 -0
- package/assets/sounds/tanks/tracks_loop.mp3 +0 -0
- package/assets/sounds/tanks/tracks_loop.ogg +0 -0
- package/assets/sounds/tanks/turret_loop.mp3 +0 -0
- package/assets/sounds/tanks/turret_loop.ogg +0 -0
- package/assets/sounds/tanks/victory.mp3 +0 -0
- package/assets/sounds/tanks/victory.ogg +0 -0
- package/dist/chunks/{BattleshipGameCard-CW_A8Nim.js → BattleshipGameCard-CAWHxqJE.js} +307 -306
- package/dist/chunks/{BattleshipGameCard-CW_A8Nim.js.map → BattleshipGameCard-CAWHxqJE.js.map} +1 -1
- package/dist/chunks/{BattleshipPrototype-Duz-S1JE.js → BattleshipPrototype-CmQd5AUO.js} +55 -54
- package/dist/chunks/{BattleshipPrototype-Duz-S1JE.js.map → BattleshipPrototype-CmQd5AUO.js.map} +1 -1
- package/dist/chunks/ChatContext-CUiEAMKK.js +90 -0
- package/dist/chunks/ChatContext-CUiEAMKK.js.map +1 -0
- package/dist/chunks/TanksGameCard-BEnXTz_J.js +1705 -0
- package/dist/chunks/TanksGameCard-BEnXTz_J.js.map +1 -0
- package/dist/chunks/{battleship-DXKuIZ1I.js → board-DXKuIZ1I.js} +1 -1
- package/dist/chunks/board-DXKuIZ1I.js.map +1 -0
- package/dist/chunks/connect4Sounds-BDXQAvU1.js +3199 -0
- package/dist/chunks/connect4Sounds-BDXQAvU1.js.map +1 -0
- package/dist/chunks/core-geo-UJY-tH9L.js +361 -0
- package/dist/chunks/core-geo-UJY-tH9L.js.map +1 -0
- package/dist/chunks/createBattleScene-L4ZRWDED.js +1265 -0
- package/dist/chunks/createBattleScene-L4ZRWDED.js.map +1 -0
- package/dist/chunks/createTankScene-BuliAxwR.js +2150 -0
- package/dist/chunks/createTankScene-BuliAxwR.js.map +1 -0
- package/dist/index.js +3677 -3644
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/index.d.ts +4 -0
- package/package.json +1 -1
- package/dist/chunks/battleship-DXKuIZ1I.js.map +0 -1
- package/dist/chunks/connect4Sounds-Do3nvVFx.js +0 -1847
- package/dist/chunks/connect4Sounds-Do3nvVFx.js.map +0 -1
- package/dist/chunks/createBattleScene-HIAvjixn.js +0 -1621
- package/dist/chunks/createBattleScene-HIAvjixn.js.map +0 -1
package/index.d.ts
CHANGED
|
@@ -87,6 +87,8 @@ export interface ChatGamesFeatures {
|
|
|
87
87
|
connect4?: boolean;
|
|
88
88
|
battleship?: boolean;
|
|
89
89
|
battleshipPreview?: boolean;
|
|
90
|
+
/** Tanques de guerra 3D. Default false while the game is in preview. */
|
|
91
|
+
tanks?: boolean;
|
|
90
92
|
}
|
|
91
93
|
|
|
92
94
|
export interface ChatFeatures {
|
|
@@ -133,6 +135,8 @@ export interface ChatEffectsConfig {
|
|
|
133
135
|
volume?: number;
|
|
134
136
|
/** Default true: new received effects play automatically in the visible conversation. */
|
|
135
137
|
autoPlay?: boolean;
|
|
138
|
+
/** Default true: received effects nobody is watching (hidden tab, closed chat, another conversation) still play their sound, like new-message sounds. */
|
|
139
|
+
backgroundSound?: boolean;
|
|
136
140
|
/** Minimum interval between sends and automatic playback; default 5000. */
|
|
137
141
|
cooldownMs?: number;
|
|
138
142
|
/** Maximum incoming event age for automatic playback; default 10000. */
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"battleship-DXKuIZ1I.js","names":["FLEET","matrix","fail","isCell","cell","createBoard","validatePlacement","placement","definition","ship","shipId","board","orientation","cells","row","index","col","placeShip","validation","grid","removeShip","item","shot","isFleetComplete","isShipSunk","isFleetSunk","fireShot","result","shots","nextBoard"],"sources":["../../src/games/battleship/logic/board.js"],"sourcesContent":["/** Pure board rules. Coordinates are zero-based { row, col }. Ships may touch. */\nexport const BOARD_SIZE = 10;\nexport const RULES_VERSION = 1;\nexport const FLEET = Object.freeze([\n Object.freeze({ id: 'carrier', size: 5 }),\n Object.freeze({ id: 'battleship', size: 4 }),\n Object.freeze({ id: 'cruiser', size: 3 }),\n Object.freeze({ id: 'submarine', size: 3 }),\n Object.freeze({ id: 'destroyer', size: 2 }),\n]);\nconst matrix = () => Array.from({ length: BOARD_SIZE }, () => Array(BOARD_SIZE).fill(null));\nconst fail = (reason) => ({ ok: false, reason });\n\nexport function isCell(cell) {\n return cell != null && Number.isInteger(cell.row) && Number.isInteger(cell.col)\n && cell.row >= 0 && cell.row < BOARD_SIZE && cell.col >= 0 && cell.col < BOARD_SIZE;\n}\n\nexport function createBoard() {\n return { grid: matrix(), shots: matrix(), ships: [] };\n}\n\nexport function validatePlacement(board, placement) {\n if (!placement || typeof placement !== 'object') return fail('invalid_placement');\n const { shipId, row, col, orientation } = placement;\n const definition = FLEET.find((ship) => ship.id === shipId);\n if (!definition) return fail('unknown_ship');\n if (board.ships.some((ship) => ship.id === shipId)) return fail('already_placed');\n if (orientation !== 'horizontal' && orientation !== 'vertical') return fail('invalid_orientation');\n if (!isCell({ row, col })) return fail('out_of_bounds');\n const cells = Array.from({ length: definition.size }, (_, index) => ({\n row: row + (orientation === 'vertical' ? index : 0),\n col: col + (orientation === 'horizontal' ? index : 0),\n }));\n if (cells.some((cell) => !isCell(cell))) return fail('out_of_bounds');\n if (cells.some((cell) => board.grid[cell.row][cell.col] !== null)) return fail('overlap');\n return { ok: true, ship: { id: shipId, size: definition.size, orientation, cells } };\n}\n\nexport function placeShip(board, placement) {\n const validation = validatePlacement(board, placement);\n if (!validation.ok) return validation;\n const grid = board.grid.map((row) => row.slice());\n const { ship } = validation;\n for (const cell of ship.cells) grid[cell.row][cell.col] = ship.id;\n return { ok: true, board: { ...board, grid, ships: [...board.ships, ship] }, ship };\n}\n\nexport function removeShip(board, shipId) {\n const ship = board.ships.find((item) => item.id === shipId);\n if (!ship) return fail('unknown_ship');\n if (board.shots.some((row) => row.some((shot) => shot !== null))) return fail('battle_started');\n const grid = board.grid.map((row) => row.slice());\n for (const cell of ship.cells) grid[cell.row][cell.col] = null;\n return { ok: true, board: { ...board, grid, ships: board.ships.filter((item) => item.id !== shipId) } };\n}\n\nexport function isFleetComplete(board) {\n return board.ships.length === FLEET.length && FLEET.every((definition) => {\n const ship = board.ships.find((item) => item.id === definition.id);\n return ship?.size === definition.size && ship.cells.length === definition.size;\n });\n}\n\nexport function isShipSunk(board, shipId) {\n const ship = board.ships.find((item) => item.id === shipId);\n return Boolean(ship && ship.cells.every((cell) => board.shots[cell.row][cell.col] === 'hit'));\n}\n\nexport function isFleetSunk(board) {\n return isFleetComplete(board) && board.ships.every((ship) => isShipSunk(board, ship.id));\n}\n\nexport function fireShot(board, cell) {\n if (!isCell(cell)) return fail('out_of_bounds');\n if (board.shots[cell.row][cell.col] !== null) return fail('repeat_shot');\n if (isFleetSunk(board)) return fail('battle_finished');\n const shipId = board.grid[cell.row][cell.col];\n const result = shipId === null ? 'miss' : 'hit';\n const shots = board.shots.map((row) => row.slice());\n shots[cell.row][cell.col] = result;\n const nextBoard = { ...board, shots };\n return {\n ok: true, board: nextBoard, result, shipId,\n sunk: shipId !== null && isShipSunk(nextBoard, shipId),\n defeated: isFleetSunk(nextBoard),\n };\n}\n"],"mappings":"AAGA,IAAaA,IAAQ,OAAO,OAAO;CACjC,OAAO,OAAO;EAAE,IAAI;EAAW,MAAM;CAAE,CAAC;CACxC,OAAO,OAAO;EAAE,IAAI;EAAc,MAAM;CAAE,CAAC;CAC3C,OAAO,OAAO;EAAE,IAAI;EAAW,MAAM;CAAE,CAAC;CACxC,OAAO,OAAO;EAAE,IAAI;EAAa,MAAM;CAAE,CAAC;CAC1C,OAAO,OAAO;EAAE,IAAI;EAAa,MAAM;CAAE,CAAC;AAC5C,CAAC,GACKC,UAAe,MAAM,KAAK,EAAE,QAAA,GAAmB,SAAS,MAAA,EAAgB,CAAC,CAAC,KAAK,IAAI,CAAC,GACpFC,KAAQ,OAAY;CAAE,IAAI;CAAO;AAAO;AAE9C,SAAgBC,EAAO,GAAM;CAC3B,OAAOC,KAAQ,QAAQ,OAAO,UAAUA,EAAK,GAAG,KAAK,OAAO,UAAUA,EAAK,GAAG,KACzEA,EAAK,OAAO,KAAKA,EAAK,MAAA,MAAoBA,EAAK,OAAO,KAAKA,EAAK,MAAA;AACvE;AAEA,SAAgBC,IAAc;CAC5B,OAAO;EAAE,MAAMJ,EAAO;EAAG,OAAOA,EAAO;EAAG,OAAO,CAAC;CAAE;AACtD;AAEA,SAAgBK,EAAkB,GAAO,GAAW;CAClD,IAAI,CAACC,KAAa,OAAOA,KAAc,UAAU,OAAOL,EAAK,mBAAmB;CAChF,IAAM,EAAE,WAAQ,QAAK,QAAK,mBAAgBK,GACpCC,IAAaR,EAAM,MAAM,MAASS,EAAK,OAAOC,CAAM;CAC1D,IAAI,CAACF,GAAY,OAAON,EAAK,cAAc;CAC3C,IAAIS,EAAM,MAAM,MAAM,MAASF,EAAK,OAAOC,CAAM,GAAG,OAAOR,EAAK,gBAAgB;CAChF,IAAIU,MAAgB,gBAAgBA,MAAgB,YAAY,OAAOV,EAAK,qBAAqB;CACjG,IAAI,CAACC,EAAO;EAAE;EAAK;CAAI,CAAC,GAAG,OAAOD,EAAK,eAAe;CACtD,IAAMW,IAAQ,MAAM,KAAK,EAAE,QAAQL,EAAW,KAAK,IAAI,GAAG,OAAW;EACnE,KAAKM,KAAOF,MAAgB,aAAaG,IAAQ;EACjD,KAAKC,KAAOJ,MAAgB,eAAeG,IAAQ;CACrD,EAAE;CAGF,OAFIF,EAAM,MAAM,MAAS,CAACV,EAAOC,CAAI,CAAC,IAAUF,EAAK,eAAe,IAChEW,EAAM,MAAM,MAASF,EAAM,KAAKP,EAAK,IAAI,CAACA,EAAK,SAAS,IAAI,IAAUF,EAAK,SAAS,IACjF;EAAE,IAAI;EAAM,MAAM;GAAE,IAAIQ;GAAQ,MAAMF,EAAW;GAAM;GAAa;EAAM;CAAE;AACrF;AAEA,SAAgBS,EAAU,GAAO,GAAW;CAC1C,IAAMC,IAAaZ,EAAkBK,GAAOJ,CAAS;CACrD,IAAI,CAACW,EAAW,IAAI,OAAOA;CAC3B,IAAMC,IAAOR,EAAM,KAAK,KAAK,MAAQG,EAAI,MAAM,CAAC,GAC1C,EAAE,YAASI;CACjB,KAAK,IAAMd,KAAQK,EAAK,OAAO,EAAKL,EAAK,IAAI,CAACA,EAAK,OAAOK,EAAK;CAC/D,OAAO;EAAE,IAAI;EAAM,OAAO;GAAE,GAAGE;GAAO;GAAM,OAAO,CAAC,GAAGA,EAAM,OAAOF,CAAI;EAAE;EAAG;CAAK;AACpF;AAEA,SAAgBW,EAAW,GAAO,GAAQ;CACxC,IAAMX,IAAOE,EAAM,MAAM,MAAM,MAASU,EAAK,OAAOX,CAAM;CAC1D,IAAI,CAACD,GAAM,OAAOP,EAAK,cAAc;CACrC,IAAIS,EAAM,MAAM,MAAM,MAAQG,EAAI,MAAM,MAASQ,MAAS,IAAI,CAAC,GAAG,OAAOpB,EAAK,gBAAgB;CAC9F,IAAMiB,IAAOR,EAAM,KAAK,KAAK,MAAQG,EAAI,MAAM,CAAC;CAChD,KAAK,IAAMV,KAAQK,EAAK,OAAO,EAAKL,EAAK,IAAI,CAACA,EAAK,OAAO;CAC1D,OAAO;EAAE,IAAI;EAAM,OAAO;GAAE,GAAGO;GAAO;GAAM,OAAOA,EAAM,MAAM,QAAQ,MAASU,EAAK,OAAOX,CAAM;EAAE;CAAE;AACxG;AAEA,SAAgBa,EAAgB,GAAO;CACrC,OAAOZ,EAAM,MAAM,WAAWX,EAAM,UAAUA,EAAM,OAAO,MAAe;EACxE,IAAMS,IAAOE,EAAM,MAAM,MAAM,MAASU,EAAK,OAAOb,EAAW,EAAE;EACjE,OAAOC,GAAM,SAASD,EAAW,QAAQC,EAAK,MAAM,WAAWD,EAAW;CAC5E,CAAC;AACH;AAEA,SAAgBgB,EAAW,GAAO,GAAQ;CACxC,IAAMf,IAAOE,EAAM,MAAM,MAAM,MAASU,EAAK,OAAOX,CAAM;CAC1D,OAAO,GAAQD,KAAQA,EAAK,MAAM,OAAO,MAASE,EAAM,MAAMP,EAAK,IAAI,CAACA,EAAK,SAAS,KAAK;AAC7F;AAEA,SAAgBqB,EAAY,GAAO;CACjC,OAAOF,EAAgBZ,CAAK,KAAKA,EAAM,MAAM,OAAO,MAASa,EAAWb,GAAOF,EAAK,EAAE,CAAC;AACzF;AAEA,SAAgBiB,EAAS,GAAO,GAAM;CACpC,IAAI,CAACvB,EAAOC,CAAI,GAAG,OAAOF,EAAK,eAAe;CAC9C,IAAIS,EAAM,MAAMP,EAAK,IAAI,CAACA,EAAK,SAAS,MAAM,OAAOF,EAAK,aAAa;CACvE,IAAIuB,EAAYd,CAAK,GAAG,OAAOT,EAAK,iBAAiB;CACrD,IAAMQ,IAASC,EAAM,KAAKP,EAAK,IAAI,CAACA,EAAK,MACnCuB,IAASjB,MAAW,OAAO,SAAS,OACpCkB,IAAQjB,EAAM,MAAM,KAAK,MAAQG,EAAI,MAAM,CAAC;CAClD,EAAMV,EAAK,IAAI,CAACA,EAAK,OAAOuB;CAC5B,IAAME,IAAY;EAAE,GAAGlB;EAAO;CAAM;CACpC,OAAO;EACL,IAAI;EAAM,OAAOkB;EAAW;EAAQ;EACpC,MAAMnB,MAAW,QAAQc,EAAWK,GAAWnB,CAAM;EACrD,UAAUe,EAAYI,CAAS;CACjC;AACF"}
|