feat: expose hooks for events levelChanged & gameDone

This commit is contained in:
ayo 2026-04-03 11:23:55 +02:00
parent 29bcaace1e
commit 39683946a7
2 changed files with 17 additions and 9 deletions

View file

@ -1,9 +1,12 @@
import MineSweeper from '../lib/mnswpr.js'
import mnswpr from '../lib/mnswpr.js'
import * as pkg from '../package.json'
const version = import.meta.env.MODE === 'development'
? 'dev'
: pkg.version
const mnswpr = new MineSweeper('app', version)
mnswpr.initialize()
const game = new mnswpr('app', version, {
levelChanged: () => console.log('[hook]: level reset'),
gameDone: (game) => console.log('[hook] game done', game)
})
game.initialize()

View file

@ -20,8 +20,12 @@ const PC_BUSY_DELAY = 500
* Create Minesweeper game board
* @param {String} appId
* @param {String} version
* @param {{
* levelChanged: () => {},
* gameDone: (game: any) => {}
* }} hooks
*/
const Minesweeper = function(appId, version) {
const Minesweeper = function(appId, version, hooks) {
const _this = this
const storageService = new StorageService()
const timerService = new TimerService()
@ -86,7 +90,7 @@ const Minesweeper = function(appId, version) {
appElement.append(headingElement, gameBoard)
appElement.append(initializeSourceLink())
}
generateGrid()
generateGrid(true)
}
function initializeSourceLink() {
@ -171,11 +175,11 @@ const Minesweeper = function(appId, version) {
function updateSetting(key) {
setting = levels[key]
storageService.saveToLocal('setting', setting)
generateGrid()
generateGrid(true)
}
function generateGrid() {
function generateGrid(initial = false) {
firstClick = true
grid.innerHTML = ''
grid.oncontextmenu = () => false
@ -212,7 +216,8 @@ const Minesweeper = function(appId, version) {
* TODO: add hook afterGridGenerated
* - for initializing the leaderboard
*/
console.log('[hook]: after grid generated')
if (initial)
hooks.levelChanged()
timerService.initialize(timerDisplay)
@ -479,7 +484,7 @@ const Minesweeper = function(appId, version) {
* TODO: add hook after gameSession send back `game`
* - for sending the game score to the db
*/
console.log('[hook]: after game session', game)
hooks.gameDone(game)
}