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' import * as pkg from '../package.json'
const version = import.meta.env.MODE === 'development' const version = import.meta.env.MODE === 'development'
? 'dev' ? 'dev'
: pkg.version : pkg.version
const mnswpr = new MineSweeper('app', version) const game = new mnswpr('app', version, {
mnswpr.initialize() 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 * Create Minesweeper game board
* @param {String} appId * @param {String} appId
* @param {String} version * @param {String} version
* @param {{
* levelChanged: () => {},
* gameDone: (game: any) => {}
* }} hooks
*/ */
const Minesweeper = function(appId, version) { const Minesweeper = function(appId, version, hooks) {
const _this = this const _this = this
const storageService = new StorageService() const storageService = new StorageService()
const timerService = new TimerService() const timerService = new TimerService()
@ -86,7 +90,7 @@ const Minesweeper = function(appId, version) {
appElement.append(headingElement, gameBoard) appElement.append(headingElement, gameBoard)
appElement.append(initializeSourceLink()) appElement.append(initializeSourceLink())
} }
generateGrid() generateGrid(true)
} }
function initializeSourceLink() { function initializeSourceLink() {
@ -171,11 +175,11 @@ const Minesweeper = function(appId, version) {
function updateSetting(key) { function updateSetting(key) {
setting = levels[key] setting = levels[key]
storageService.saveToLocal('setting', setting) storageService.saveToLocal('setting', setting)
generateGrid() generateGrid(true)
} }
function generateGrid() { function generateGrid(initial = false) {
firstClick = true firstClick = true
grid.innerHTML = '' grid.innerHTML = ''
grid.oncontextmenu = () => false grid.oncontextmenu = () => false
@ -212,7 +216,8 @@ const Minesweeper = function(appId, version) {
* TODO: add hook afterGridGenerated * TODO: add hook afterGridGenerated
* - for initializing the leaderboard * - for initializing the leaderboard
*/ */
console.log('[hook]: after grid generated') if (initial)
hooks.levelChanged()
timerService.initialize(timerDisplay) timerService.initialize(timerDisplay)
@ -479,7 +484,7 @@ const Minesweeper = function(appId, version) {
* TODO: add hook after gameSession send back `game` * TODO: add hook after gameSession send back `game`
* - for sending the game score to the db * - for sending the game score to the db
*/ */
console.log('[hook]: after game session', game) hooks.gameDone(game)
} }