pacman-contribution-graph 1.0.13 → 1.0.14
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/dist/pacman-contribution-graph.js +19 -12
- package/dist/pacman-contribution-graph.js.map +1 -1
- package/dist/pacman-contribution-graph.min.js +1 -1
- package/github-action/dist/index.js +2 -2
- package/github-action/package.json +1 -1
- package/github-action/pnpm-lock.yaml +5 -5
- package/index.html +1 -1
- package/package.json +1 -1
- package/pacman.abozanona.me/index.js +47 -0
- package/pacman.abozanona.me/package.json +8 -0
- package/src/movement/ghosts-movement.ts +4 -8
- package/src/movement/pacman-movement.ts +20 -13
- package/src/types.ts +7 -1
- package/embeded/svg.html +0 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pacman-contribution-graph.js","mappings":"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","sources":["webpack://pacman-contribution-graph/./src/canvas.ts","webpack://pacman-contribution-graph/./src/constants.ts","webpack://pacman-contribution-graph/./src/game.ts","webpack://pacman-contribution-graph/./src/grid.ts","webpack://pacman-contribution-graph/./src/movement/ghosts-movement.ts","webpack://pacman-contribution-graph/./src/movement/movement-utils.ts","webpack://pacman-contribution-graph/./src/movement/pacman-movement.ts","webpack://pacman-contribution-graph/./src/music-player.ts","webpack://pacman-contribution-graph/./src/store.ts","webpack://pacman-contribution-graph/./src/svg.ts","webpack://pacman-contribution-graph/./src/utils.ts","webpack://pacman-contribution-graph/webpack/bootstrap","webpack://pacman-contribution-graph/webpack/runtime/define property getters","webpack://pacman-contribution-graph/webpack/runtime/hasOwnProperty shorthand","webpack://pacman-contribution-graph/webpack/runtime/make namespace object","webpack://pacman-contribution-graph/./src/index.ts"],"sourcesContent":["import {\n\tCELL_SIZE,\n\tGAP_SIZE,\n\tGHOSTS,\n\tGRID_HEIGHT,\n\tGRID_WIDTH,\n\tPACMAN_COLOR,\n\tPACMAN_COLOR_DEAD,\n\tPACMAN_COLOR_POWERUP,\n\tWALLS\n} from './constants';\nimport { MusicPlayer } from './music-player';\nimport { StoreType } from './types';\nimport { Utils } from './utils';\n\nconst resizeCanvas = (store: StoreType) => {\n\tconst canvasWidth = GRID_WIDTH * (CELL_SIZE + GAP_SIZE);\n\tconst canvasHeight = GRID_HEIGHT * (CELL_SIZE + GAP_SIZE) + 20; // Adding some space for months on top\n\n\tstore.config.canvas.width = canvasWidth;\n\tstore.config.canvas.height = canvasHeight;\n};\n\nconst drawGrid = (store: StoreType) => {\n\tconst ctx = store.config.canvas.getContext('2d')!;\n\tctx.fillStyle = Utils.getCurrentTheme(store).gridBackground;\n\tctx.fillRect(0, 0, store.config.canvas.width, store.config.canvas.height);\n\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y < GRID_HEIGHT; y++) {\n\t\t\tconst intensity = store.grid[x][y].intensity;\n\t\t\tif (intensity > 0) {\n\t\t\t\tconst adjustedIntensity = intensity < 0.2 ? 0.3 : intensity;\n\t\t\t\tconst color = Utils.hexToRGBA(Utils.getCurrentTheme(store).contributionBoxColor, adjustedIntensity);\n\t\t\t\tctx.fillStyle = color;\n\t\t\t} else {\n\t\t\t\tctx.fillStyle = Utils.getCurrentTheme(store).emptyContributionBoxColor;\n\t\t\t}\n\t\t\tctx.beginPath();\n\t\t\tstore.config.canvas\n\t\t\t\t.getContext('2d')!\n\t\t\t\t.roundRect(x * (CELL_SIZE + GAP_SIZE), y * (CELL_SIZE + GAP_SIZE) + 15, CELL_SIZE, CELL_SIZE, 5);\n\t\t\tctx.fill();\n\t\t}\n\t}\n\n\tctx.fillStyle = Utils.getCurrentTheme(store).wallColor;\n\tfor (let x = 0; x <= GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y <= GRID_HEIGHT; y++) {\n\t\t\t// Draw horizontal walls\n\t\t\tif (WALLS.horizontal[x][y].active) {\n\t\t\t\tctx.fillRect(\n\t\t\t\t\tx * (CELL_SIZE + GAP_SIZE) - GAP_SIZE,\n\t\t\t\t\ty * (CELL_SIZE + GAP_SIZE) - GAP_SIZE + 15,\n\t\t\t\t\tCELL_SIZE + GAP_SIZE,\n\t\t\t\t\tGAP_SIZE\n\t\t\t\t);\n\t\t\t\t// // TODO: For debug only\n\t\t\t\t// ctx.fillStyle = '#000';\n\t\t\t\t// ctx.fillText(WALLS.horizontal[x][y].id, x * (GAP_SIZE + CELL_SIZE), y * (GAP_SIZE + CELL_SIZE));\n\t\t\t}\n\n\t\t\t// Draw vertical walls\n\t\t\tif (WALLS.vertical[x][y].active) {\n\t\t\t\tctx.fillRect(\n\t\t\t\t\tx * (CELL_SIZE + GAP_SIZE) - GAP_SIZE,\n\t\t\t\t\ty * (CELL_SIZE + GAP_SIZE) - GAP_SIZE + 15,\n\t\t\t\t\tGAP_SIZE,\n\t\t\t\t\tCELL_SIZE + GAP_SIZE\n\t\t\t\t);\n\t\t\t\t// // TODO: For debug only\n\t\t\t\t// ctx.fillStyle = '#000';\n\t\t\t\t// ctx.fillText(WALLS.vertical[x][y].id, x * (GAP_SIZE + CELL_SIZE), (y + 1) * (GAP_SIZE + CELL_SIZE));\n\t\t\t}\n\t\t}\n\t}\n\n\tctx.fillStyle = Utils.getCurrentTheme(store).textColor;\n\tctx.font = '10px Arial';\n\tctx.textAlign = 'center';\n\n\tlet lastMonth = '';\n\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tif (store.monthLabels[x] !== lastMonth) {\n\t\t\tconst xPos = x * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\t\t\tctx.fillText(store.monthLabels[x], xPos, 10);\n\t\t\tlastMonth = store.monthLabels[x];\n\t\t}\n\t}\n};\n\nconst drawPacman = (store: StoreType) => {\n\tconst ctx = store.config.canvas.getContext('2d')!;\n\tconst x = store.pacman.x * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\tconst y = store.pacman.y * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2 + 15;\n\tconst radius = CELL_SIZE / 2;\n\n\t// Change Pac-Man's color to red if he's on power-up, dead, else yellow\n\tif (store.pacman.deadRemainingDuration) {\n\t\tctx.fillStyle = PACMAN_COLOR_DEAD;\n\t} else if (store.pacman.powerupRemainingDuration) {\n\t\tctx.fillStyle = PACMAN_COLOR_POWERUP;\n\t} else {\n\t\tctx.fillStyle = PACMAN_COLOR;\n\t}\n\n\tconst mouthAngle = store.pacmanMouthOpen ? 0.35 * Math.PI : 0.1 * Math.PI;\n\n\tlet startAngle, endAngle;\n\tswitch (store.pacman.direction) {\n\t\tcase 'up':\n\t\t\tstartAngle = 1.5 * Math.PI + mouthAngle;\n\t\t\tendAngle = 1.5 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'down':\n\t\t\tstartAngle = 0.5 * Math.PI + mouthAngle;\n\t\t\tendAngle = 0.5 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'left':\n\t\t\tstartAngle = Math.PI + mouthAngle;\n\t\t\tendAngle = Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'right':\n\t\tdefault:\n\t\t\tstartAngle = 0 + mouthAngle;\n\t\t\tendAngle = 2 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t}\n\n\tctx.beginPath();\n\tctx.arc(x, y, radius, startAngle, endAngle);\n\tctx.lineTo(x, y);\n\tctx.fill();\n};\n\nconst preloadedImages: { [key: string]: HTMLImageElement } = {};\nconst getLoadedImage = (key: string, imgDate: string): HTMLImageElement => {\n\tif (!preloadedImages[key]) {\n\t\tconst image = new Image();\n\t\timage.src = imgDate;\n\t\tpreloadedImages[key] = image;\n\t}\n\treturn preloadedImages[key];\n};\n\nconst drawGhosts = (store: StoreType) => {\n\tstore.ghosts.forEach((ghost) => {\n\t\tconst x = ghost.x * (CELL_SIZE + GAP_SIZE);\n\t\tconst y = ghost.y * (CELL_SIZE + GAP_SIZE) + 15;\n\t\tconst size = CELL_SIZE;\n\n\t\tconst ctx = store.config.canvas.getContext('2d')!;\n\t\tif (ghost.scared) {\n\t\t\tctx.drawImage(getLoadedImage('scared', GHOSTS['scared'].imgDate), x, y, size, size);\n\t\t} else {\n\t\t\tctx.drawImage(getLoadedImage(ghost.name, GHOSTS[ghost.name].imgDate), x, y, size, size);\n\t\t}\n\t});\n};\n\nconst renderGameOver = (store: StoreType) => {\n\tconst ctx = store.config.canvas.getContext('2d')!;\n\tctx.fillStyle = Utils.getCurrentTheme(store).textColor;\n\tctx.font = '20px Arial';\n\tctx.textAlign = 'center';\n\tctx.fillText('Game Over', store.config.canvas.width / 2, store.config.canvas.height / 2);\n};\n\nconst drawSoundController = (store: StoreType) => {\n\tif (!store.config.enableSounds) {\n\t\treturn;\n\t}\n\tconst ctx = store.config.canvas.getContext('2d')!;\n\n\tconst width = 30,\n\t\theight = 30,\n\t\tleft = store.config.canvas.width - width - 10,\n\t\ttop = 10;\n\tctx.fillStyle = `rgba(0, 0, 0, ${MusicPlayer.getInstance().isMuted ? 0.3 : 0.5})`;\n\tctx.beginPath();\n\tctx.moveTo(left + 10, top + 10);\n\tctx.lineTo(left + 20, top + 5);\n\tctx.lineTo(left + 20, top + 25);\n\tctx.lineTo(left + 10, top + 20);\n\tctx.closePath();\n\tctx.fill();\n\n\tif (!MusicPlayer.getInstance().isMuted) {\n\t\tctx.strokeStyle = `rgba(0, 0, 0, 0.4)`;\n\t\tctx.lineWidth = 2;\n\n\t\t// First wave\n\t\tctx.beginPath();\n\t\tctx.arc(left + 25, top + 15, 5, 0, Math.PI * 2);\n\t\tctx.stroke();\n\n\t\t// Second wave\n\t\tctx.beginPath();\n\t\tctx.arc(left + 25, top + 15, 8, 0, Math.PI * 2);\n\t\tctx.stroke();\n\t} else {\n\t\t// Mute line\n\t\tctx.strokeStyle = 'rgba(255, 0, 0, 0.6)';\n\t\tctx.lineWidth = 3;\n\t\tctx.beginPath();\n\t\tctx.moveTo(left + 25, top + 5);\n\t\tctx.lineTo(left + 5, top + 25);\n\t\tctx.stroke();\n\t}\n};\n\nconst listenToSoundController = (store: StoreType) => {\n\tif (!store.config.enableSounds) {\n\t\treturn;\n\t}\n\tstore.config.canvas.addEventListener('click', function (event) {\n\t\tconst rect = store.config.canvas.getBoundingClientRect();\n\t\tconst x = event.clientX - rect.left,\n\t\t\ty = event.clientY - rect.top;\n\t\tconst width = 30,\n\t\t\theight = 30,\n\t\t\tleft = store.config.canvas.width - width - 10,\n\t\t\ttop = 10;\n\n\t\tif (x >= left && x <= left + this.width && y >= top && y <= top + this.height) {\n\t\t\tif (MusicPlayer.getInstance().isMuted) {\n\t\t\t\tMusicPlayer.getInstance().unmute();\n\t\t\t} else {\n\t\t\t\tMusicPlayer.getInstance().mute();\n\t\t\t}\n\t\t}\n\t});\n};\n\nexport const Canvas = {\n\tresizeCanvas,\n\tdrawGrid,\n\tdrawPacman,\n\tdrawGhosts,\n\trenderGameOver,\n\tdrawSoundController,\n\tlistenToSoundController\n};\n","import { GameTheme, GhostName, ThemeKeys } from './types';\n\nexport const CELL_SIZE = 20;\nexport const GAP_SIZE = 2;\nexport const GRID_WIDTH = 52;\nexport const GRID_HEIGHT = 7;\nexport const PACMAN_COLOR = 'yellow';\nexport const PACMAN_COLOR_POWERUP = 'red';\nexport const PACMAN_COLOR_DEAD = '#80808064';\nexport const GHOST_NAMES: GhostName[] = ['blinky', 'clyde', 'inky', 'pinky'];\nexport const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nexport const DELTA_TIME = 200;\nexport const PACMAN_DEATH_DURATION = 10;\nexport const PACMAN_POWERUP_DURATION = 15;\nexport const GAME_THEMES: { [key in ThemeKeys]: GameTheme } = {\n\tgithub: {\n\t\ttextColor: '#586069',\n\t\tgridBackground: '#ffffff',\n\t\tcontributionBoxColor: '#9be9a8',\n\t\temptyContributionBoxColor: '#ebedf0',\n\t\twallColor: '#000000'\n\t},\n\t'github-dark': {\n\t\ttextColor: '#8b949e',\n\t\tgridBackground: '#0d1117',\n\t\tcontributionBoxColor: '#26a641',\n\t\temptyContributionBoxColor: '#161b22',\n\t\twallColor: '#FFFFFF'\n\t},\n\tgitlab: {\n\t\ttextColor: '#626167',\n\t\tgridBackground: '#ffffff',\n\t\tcontributionBoxColor: '#7992f5',\n\t\temptyContributionBoxColor: '#ececef',\n\t\twallColor: '#000000'\n\t},\n\t'gitlab-dark': {\n\t\ttextColor: '#999999',\n\t\tgridBackground: '#1f1f1f',\n\t\tcontributionBoxColor: '#2e7db1',\n\t\temptyContributionBoxColor: '#2d2d2d',\n\t\twallColor: '#FFFFFF'\n\t}\n};\nexport const GHOSTS: { [key in GhostName | 'scared']: { imgDate: string } } = {\n\tblinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAfUlEQVQ4T+2TUQ7AIAhDy/0PzQIRAqxmLtnn/DJPWypBAVkKKOMCyOQN7IRElLrcnIrDLNK4wVtxNbkb6Hq+jOcSbim6QVzKEstkw92gxVeFrMpqokix4wA+NvCOnvfArvcEbHoe2G9QmmhDMUc65p3xYC6q3zQPxtdl3NgF5QpL/b/rs3IAAAAASUVORK5CYIIA'\n\t},\n\tclyde: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgUlEQVQ4T+2T0Q6AIAhFLx9sH1MfTIPCAeLKrcd8PHqP4JBQLN7BFacNlHkAs+AQcqIueBs2mVWjgtWwl4yCdrd/pHYLLlVEgR2yK0wy4SoI5TcGXU4wM+AEJQfwsUCuXngDOR4rqKbngf0C94gyFHmkbd4rbkxD/pv2jfR1Ky7sBNrzXbHpnBX+AAAAAElFTkSuQmCC'\n\t},\n\tinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAg0lEQVQ4T+WTWxKAIAhFuQvK/a+jFoT5QAVxypn+6vMEx6sDIO/jk12OAMs1WDVOXV3UBW+bRVbTFMFu8yCZBExH/g26VHCXI0AJpKgdUCUrTlkwxE+FECdzS7HiJemXgvyeO29gE7jD8wDVFX4vSLNtR1q2z+OVlaZxTaXYrq7HbxYBS8VgMVrqzkEAAAAASUVORK5CYIIA'\n\t},\n\tpinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4T+2T0Q2AIAwF281wC50Qt9DNagoptqVESfyUz4N3vJCCECxaD4o47gt6bsAo2IWUqAnehkUmbYpgNqwlvSCnur+dtnnAuYUVyCGJimTAi8DUzwmwOoGI7hYjDgAfC/jqiTfg47ZBND0P7BeoR+Sh8CMt8x5xYSWkv2nbcF834swuA/9u49Yy5bgAAAAASUVORK5CYIIA'\n\t},\n\tscared: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeUlEQVQ4T82TUQ6AMAhD7UX0/sdyF0GREVmDmTN+bH9r6Bs0A0t2VpFULwDrrfBkZFcA3YC3ZodViAFGzQHyP0B2w2NrB0/1AoDbHwLoQ5/nrw1OBuD5e/crbM9Aiz35njHWzpSB/m3+0r40mV41M8U19WJe3Uw/tQOKt08pUUbBEQAAAABJRU5ErkJgggAA'\n\t}\n};\nexport const WALLS: {\n\thorizontal: { active: boolean; id: string }[][];\n\tvertical: { active: boolean; id: string }[][];\n} = {\n\thorizontal: Array(GRID_WIDTH + 1)\n\t\t.fill(null)\n\t\t.map(() => Array(GRID_HEIGHT + 1).fill({ active: false, id: '' })),\n\tvertical: Array(GRID_WIDTH + 1)\n\t\t.fill(null)\n\t\t.map(() => Array(GRID_HEIGHT + 1).fill({ active: false, id: '' }))\n};\n\nexport const setWall = (x: number, y: number, direction: 'horizontal' | 'vertical', lineId: string) => {\n\tif (direction === 'horizontal') {\n\t\tif (x >= 0 && x < WALLS.horizontal.length && y >= 0 && y < WALLS.horizontal[0].length) {\n\t\t\tWALLS.horizontal[x][y] = { active: true, id: lineId };\n\t\t}\n\t} else {\n\t\tif (x >= 0 && x < WALLS.vertical.length && y >= 0 && y < WALLS.vertical[0].length) {\n\t\t\tWALLS.vertical[x][y] = { active: true, id: lineId };\n\t\t}\n\t}\n};\n\nexport const hasWall = (x: number, y: number, direction: 'up' | 'down' | 'left' | 'right'): boolean => {\n\tswitch (direction) {\n\t\tcase 'up':\n\t\t\treturn WALLS.horizontal[x][y].active;\n\t\tcase 'down':\n\t\t\treturn WALLS.horizontal[x + 1][y].active;\n\t\tcase 'left':\n\t\t\treturn WALLS.vertical[x][y].active;\n\t\tcase 'right':\n\t\t\treturn WALLS.vertical[x][y + 1].active;\n\t}\n};\n","import { Canvas } from './canvas';\nimport { DELTA_TIME, GHOST_NAMES, GRID_HEIGHT, GRID_WIDTH, MONTHS, PACMAN_DEATH_DURATION } from './constants';\nimport { GhostsMovement } from './movement/ghosts-movement';\nimport { PacmanMovement } from './movement/pacman-movement';\nimport { MusicPlayer, Sound } from './music-player';\nimport { SVG } from './svg';\nimport { StoreType } from './types';\n\nconst initializeGrid = (store: StoreType) => {\n\tstore.pacman.points = 0;\n\tstore.pacman.totalPoints = 0;\n\tstore.grid = Array.from({ length: GRID_WIDTH }, () => Array.from({ length: GRID_HEIGHT }, () => ({ commitsCount: 0, intensity: 0 })));\n\tstore.monthLabels = Array(GRID_WIDTH).fill('');\n\tlet maxCommits = 1;\n\n\tconst now = new Date();\n\tconst startOfCurrentWeek = new Date(now);\n\tstartOfCurrentWeek.setDate(now.getDate() - now.getDay());\n\n\tstore.contributions.forEach((contribution) => {\n\t\tconst contributionDate = new Date(contribution.date);\n\t\tconst dayOfWeek = contributionDate.getDay();\n\t\tconst weeksAgo = Math.floor((+startOfCurrentWeek - +contributionDate) / (1000 * 60 * 60 * 24 * 7));\n\n\t\tif (weeksAgo >= 0 && weeksAgo < GRID_WIDTH && dayOfWeek >= 0 && dayOfWeek < GRID_HEIGHT) {\n\t\t\tstore.grid[GRID_WIDTH - 1 - weeksAgo][dayOfWeek] = { commitsCount: contribution.count, intensity: 0 };\n\t\t\tif (contribution.count > maxCommits) maxCommits = contribution.count;\n\t\t}\n\t});\n\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y < GRID_HEIGHT; y++) {\n\t\t\tif (store.grid[x][y].commitsCount > 0) {\n\t\t\t\tstore.grid[x][y].intensity = store.grid[x][y].commitsCount / maxCommits;\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tconst weeksAgo = GRID_WIDTH - 1 - x;\n\t\tconst columnDate = new Date(startOfCurrentWeek);\n\t\tcolumnDate.setDate(columnDate.getDate() - weeksAgo * 7);\n\t\tstore.monthLabels[x] = MONTHS[columnDate.getMonth()];\n\t}\n};\n\nconst placePacman = (store: StoreType) => {\n\tstore.pacman = {\n\t\tx: 0,\n\t\ty: 0,\n\t\tdirection: 'right',\n\t\tpoints: 0,\n\t\ttotalPoints: 0,\n\t\tdeadRemainingDuration: 0,\n\t\tpowerupRemainingDuration: 0,\n\t\trecentPositions: []\n\t};\n\tif (store.config.outputFormat == 'canvas') Canvas.drawPacman(store);\n};\n\nconst placeGhosts = (store: StoreType) => {\n\tstore.ghosts = [];\n\t// Center gjosts in mid grid\n\tstore.ghosts.push({ x: 23, y: 3, name: GHOST_NAMES[0], scared: false, target: undefined });\n\tstore.ghosts.push({ x: 24, y: 3, name: GHOST_NAMES[1], scared: false, target: undefined });\n\tstore.ghosts.push({ x: 27, y: 3, name: GHOST_NAMES[2], scared: false, target: undefined });\n\tstore.ghosts.push({ x: 28, y: 3, name: GHOST_NAMES[3], scared: false, target: undefined });\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGhosts(store);\n};\n\nconst stopGame = async (store: StoreType) => {\n\tclearInterval(store.gameInterval);\n};\n\nconst startGame = async (store: StoreType) => {\n\tif (store.config.outputFormat == 'canvas') {\n\t\tstore.config.canvas = store.config.canvas;\n\t\tCanvas.resizeCanvas(store);\n\t\tCanvas.listenToSoundController(store);\n\t}\n\n\tstore.frameCount = 0;\n\tstore.ghosts.forEach((ghost) => (ghost.scared = false));\n\n\tinitializeGrid(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGrid(store);\n\n\tif (store.config.outputFormat == 'canvas') {\n\t\tif (!store.config.enableSounds) {\n\t\t\tMusicPlayer.getInstance().mute();\n\t\t}\n\t\tawait MusicPlayer.getInstance().preloadSounds();\n\t\tMusicPlayer.getInstance().startDefaultSound();\n\t\tawait MusicPlayer.getInstance().play(Sound.BEGINNING);\n\t}\n\n\tconst remainingCells = () => store.grid.some((row) => row.some((cell) => cell.intensity > 0));\n\tif (remainingCells()) {\n\t\tplacePacman(store);\n\t\tplaceGhosts(store);\n\t}\n\n\tif (store.config.outputFormat == 'svg') {\n\t\twhile (remainingCells()) {\n\t\t\tawait updateGame(store);\n\t\t}\n\t\t// One more time to generate svg\n\t\tawait updateGame(store);\n\t} else {\n\t\tclearInterval(store.gameInterval);\n\t\tstore.gameInterval = setInterval(async () => await updateGame(store), DELTA_TIME);\n\t}\n};\n\nconst updateGame = async (store: StoreType) => {\n\tstore.frameCount++;\n\tif (store.frameCount % store.config.gameSpeed !== 0) {\n\t\tstore.gameHistory.push({\n\t\t\tpacman: { ...store.pacman },\n\t\t\tghosts: store.ghosts.map((ghost) => ({ ...ghost })),\n\t\t\tgrid: store.grid.map((row) => [...row.map((col) => col.intensity)])\n\t\t});\n\t\treturn;\n\t}\n\n\tif (store.pacman.deadRemainingDuration) {\n\t\tstore.pacman.deadRemainingDuration--;\n\t\tif (!store.pacman.deadRemainingDuration) {\n\t\t\t// IT'S ALIVE!\n\t\t\tplaceGhosts(store);\n\t\t\tif (store.config.outputFormat == 'canvas')\n\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t.play(Sound.GAME_OVER)\n\t\t\t\t\t.then(() => MusicPlayer.getInstance().startDefaultSound());\n\t\t}\n\t}\n\n\tif (store.pacman.powerupRemainingDuration) {\n\t\tstore.pacman.powerupRemainingDuration--;\n\t\tif (!store.pacman.powerupRemainingDuration) {\n\t\t\tstore.ghosts.forEach((ghost) => (ghost.scared = false));\n\t\t\tstore.pacman.points = 0;\n\t\t}\n\t}\n\n\tconst remainingCells = store.grid.some((row) => row.some((cell) => cell.intensity > 0));\n\tif (!remainingCells) {\n\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\tclearInterval(store.gameInterval);\n\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\tCanvas.renderGameOver(store);\n\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t.play(Sound.BEGINNING)\n\t\t\t\t\t.then(() => MusicPlayer.getInstance().stopDefaultSound());\n\t\t\t}\n\t\t}\n\n\t\tif (store.config.outputFormat == 'svg') {\n\t\t\tconst animatedSVG = SVG.generateAnimatedSVG(store);\n\t\t\tstore.config.svgCallback(animatedSVG);\n\t\t}\n\n\t\tstore.config.gameOverCallback();\n\t\treturn;\n\t}\n\n\tPacmanMovement.movePacman(store);\n\tcheckCollisions(store);\n\tif (!store.pacman.deadRemainingDuration) {\n\t\tGhostsMovement.moveGhosts(store);\n\t\tcheckCollisions(store);\n\t}\n\n\tstore.pacmanMouthOpen = !store.pacmanMouthOpen;\n\n\tstore.gameHistory.push({\n\t\tpacman: { ...store.pacman },\n\t\tghosts: store.ghosts.map((ghost) => ({ ...ghost })),\n\t\tgrid: store.grid.map((row) => [...row.map((col) => col.intensity)])\n\t});\n\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGrid(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawPacman(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGhosts(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawSoundController(store);\n};\n\nconst checkCollisions = (store: StoreType) => {\n\tif (store.pacman.deadRemainingDuration) return;\n\n\tstore.ghosts.forEach((ghost, index) => {\n\t\tif (ghost.x === store.pacman.x && ghost.y === store.pacman.y) {\n\t\t\tif (store.pacman.powerupRemainingDuration && ghost.scared) {\n\t\t\t\trespawnGhost(store, index);\n\t\t\t\tstore.pacman.points += 10;\n\t\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\t\tMusicPlayer.getInstance().play(Sound.EAT_GHOST);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstore.pacman.points = 0;\n\t\t\t\tstore.pacman.powerupRemainingDuration = 0;\n\t\t\t\tstore.pacman.deadRemainingDuration = PACMAN_DEATH_DURATION;\n\t\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t\t.play(Sound.GAME_OVER)\n\t\t\t\t\t\t.then(() => MusicPlayer.getInstance().stopDefaultSound());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\nconst respawnGhost = (store: StoreType, ghostIndex: number) => {\n\tlet x, y;\n\tdo {\n\t\tx = Math.floor(Math.random() * GRID_WIDTH);\n\t\ty = Math.floor(Math.random() * GRID_HEIGHT);\n\t} while ((Math.abs(x - store.pacman.x) <= 2 && Math.abs(y - store.pacman.y) <= 2) || store.grid[x][y].intensity === 0);\n\tstore.ghosts[ghostIndex] = {\n\t\tx,\n\t\ty,\n\t\tname: GHOST_NAMES[ghostIndex % GHOST_NAMES.length],\n\t\tscared: false,\n\t\ttarget: undefined\n\t};\n};\n\nexport const Game = {\n\tstartGame,\n\tstopGame\n};\n","import { GRID_HEIGHT, GRID_WIDTH, setWall } from './constants';\n\nconst setSymmetricWall = (x: number, y: number, direction: 'horizontal' | 'vertical', sym: '' | 'x' | 'y' | 'xy', lineId: string) => {\n\tif (direction == 'horizontal') {\n\t\tsetWall(x, y, 'horizontal', lineId);\n\t\tif (sym == 'x') {\n\t\t\tsetWall(GRID_WIDTH - x - 1, y, 'horizontal', lineId);\n\t\t} else if (sym == 'y') {\n\t\t\tsetWall(x, GRID_HEIGHT - y, 'horizontal', lineId);\n\t\t} else if (sym == 'xy') {\n\t\t\tsetWall(GRID_WIDTH - x - 1, y, 'horizontal', lineId);\n\t\t\tsetWall(x, GRID_HEIGHT - y, 'horizontal', lineId);\n\t\t\tsetWall(GRID_WIDTH - x - 1, GRID_HEIGHT - y, 'horizontal', lineId);\n\t\t}\n\t} else {\n\t\tsetWall(x, y, 'vertical', lineId);\n\t\tif (sym == 'x') {\n\t\t\tsetWall(GRID_WIDTH - x, y, 'vertical', lineId);\n\t\t} else if (sym == 'y') {\n\t\t\tsetWall(x, GRID_HEIGHT - y - 1, 'vertical', lineId);\n\t\t} else if (sym == 'xy') {\n\t\t\tsetWall(GRID_WIDTH - x, y, 'vertical', lineId);\n\t\t\tsetWall(x, GRID_HEIGHT - y - 1, 'vertical', lineId);\n\t\t\tsetWall(GRID_WIDTH - x, GRID_HEIGHT - y - 1, 'vertical', lineId);\n\t\t}\n\t}\n};\n\nconst buildWalls = () => {\n\t// Left and right wings\n\t// L1\n\tsetSymmetricWall(0, 2, 'horizontal', 'xy', 'L1');\n\tsetSymmetricWall(1, 2, 'horizontal', 'xy', 'L1');\n\t// L2\n\tsetSymmetricWall(4, 0, 'vertical', 'x', 'L2');\n\tsetSymmetricWall(4, 1, 'vertical', 'x', 'L2');\n\tsetSymmetricWall(4, 2, 'vertical', 'x', 'L2');\n\tsetSymmetricWall(4, 3, 'vertical', 'x', 'L2');\n\tsetSymmetricWall(4, 4, 'vertical', 'x', 'L2');\n\t// L3\n\tsetSymmetricWall(3, 3, 'horizontal', 'x', 'L3');\n\tsetSymmetricWall(2, 3, 'horizontal', 'x', 'L3');\n\t// L4\n\tsetSymmetricWall(4, 5, 'horizontal', 'x', 'L4');\n\t// L5\n\tsetSymmetricWall(6, 4, 'vertical', 'x', 'L5');\n\tsetSymmetricWall(6, 3, 'vertical', 'x', 'L5');\n\tsetSymmetricWall(6, 2, 'vertical', 'x', 'L5');\n\t// L6\n\tsetSymmetricWall(6, 2, 'horizontal', 'x', 'L6');\n\tsetSymmetricWall(7, 2, 'horizontal', 'x', 'L6');\n\tsetSymmetricWall(8, 2, 'horizontal', 'x', 'L6');\n\tsetSymmetricWall(9, 2, 'horizontal', 'x', 'L6');\n\t// L7\n\tsetSymmetricWall(13, 2, 'horizontal', 'xy', 'L7');\n\tsetSymmetricWall(14, 2, 'horizontal', 'xy', 'L7');\n\tsetSymmetricWall(15, 2, 'horizontal', 'xy', 'L7');\n\tsetSymmetricWall(16, 2, 'horizontal', 'xy', 'L7');\n\tsetSymmetricWall(17, 2, 'horizontal', 'xy', 'L7');\n\tsetSymmetricWall(18, 2, 'horizontal', 'xy', 'L7');\n\t// L8\n\tsetSymmetricWall(16, 2, 'vertical', 'xy', 'L8');\n\t// L9\n\tsetSymmetricWall(8, 1, 'horizontal', 'x', 'L9');\n\tsetSymmetricWall(9, 1, 'horizontal', 'x', 'L9');\n\tsetSymmetricWall(10, 1, 'horizontal', 'x', 'L9');\n\tsetSymmetricWall(11, 1, 'horizontal', 'x', 'L9');\n\t// L10\n\tsetSymmetricWall(12, 1, 'vertical', 'x', 'L10');\n\tsetSymmetricWall(12, 3, 'vertical', 'x', 'L10');\n\t// L11\n\tsetSymmetricWall(11, 4, 'horizontal', 'x', 'L11');\n\tsetSymmetricWall(10, 4, 'horizontal', 'x', 'L11');\n\tsetSymmetricWall(9, 4, 'horizontal', 'x', 'L11');\n\tsetSymmetricWall(8, 4, 'horizontal', 'x', 'L11');\n\t// L12\n\tsetSymmetricWall(8, 4, 'vertical', 'x', 'L12');\n\tsetSymmetricWall(8, 5, 'vertical', 'x', 'L12');\n\tsetSymmetricWall(8, 6, 'vertical', 'x', 'L12');\n\t// L13\n\tsetSymmetricWall(23, 2, 'horizontal', 'x', 'L13');\n\tsetSymmetricWall(24, 2, 'horizontal', 'x', 'L13');\n\tsetSymmetricWall(23, 4, 'horizontal', 'x', 'L13');\n\tsetSymmetricWall(24, 4, 'horizontal', 'x', 'L13');\n\tsetSymmetricWall(25, 4, 'horizontal', 'x', 'L13');\n\t// L14\n\tsetSymmetricWall(23, 2, 'vertical', 'x', 'L14');\n\tsetSymmetricWall(23, 3, 'vertical', 'x', 'L14');\n\t// L15\n\tsetSymmetricWall(26, 4, 'vertical', 'x', 'L15');\n\tsetSymmetricWall(26, 5, 'vertical', 'x', 'L15');\n\t// L16\n\tsetSymmetricWall(23, 6, 'horizontal', 'x', 'L16');\n\tsetSymmetricWall(24, 6, 'horizontal', 'x', 'L16');\n\tsetSymmetricWall(25, 6, 'horizontal', 'x', 'L16');\n\t// L17\n\tsetSymmetricWall(26, 0, 'vertical', 'x', 'L17');\n\t// L18\n\tsetSymmetricWall(24, 1, 'vertical', 'x', 'L18');\n\tsetSymmetricWall(23, 1, 'horizontal', 'x', 'L18');\n\tsetSymmetricWall(22, 1, 'horizontal', 'x', 'L18');\n\tsetSymmetricWall(21, 1, 'horizontal', 'x', 'L18');\n\tsetSymmetricWall(21, 1, 'vertical', 'x', 'L18');\n\tsetSymmetricWall(21, 2, 'vertical', 'x', 'L18');\n\tsetSymmetricWall(21, 3, 'vertical', 'x', 'L18');\n\tsetSymmetricWall(20, 4, 'horizontal', 'x', 'L18');\n\tsetSymmetricWall(19, 4, 'horizontal', 'x', 'L18');\n\tsetSymmetricWall(19, 3, 'vertical', 'x', 'L18');\n\tsetSymmetricWall(18, 3, 'horizontal', 'x', 'L18');\n\t// L19\n\tsetSymmetricWall(22, 5, 'vertical', 'x', 'L19');\n\tsetSymmetricWall(21, 5, 'horizontal', 'x', 'L19');\n\tsetSymmetricWall(20, 5, 'horizontal', 'x', 'L19');\n\tsetSymmetricWall(20, 5, 'vertical', 'x', 'L19');\n\t// L20\n\tsetSymmetricWall(1, 6, 'horizontal', 'x', 'L20');\n\tsetSymmetricWall(2, 6, 'horizontal', 'x', 'L20');\n\tsetSymmetricWall(3, 5, 'vertical', 'x', 'L20');\n\tsetSymmetricWall(3, 4, 'vertical', 'x', 'L20');\n\t// L21\n\tsetSymmetricWall(5, 6, 'horizontal', 'x', 'L21');\n\tsetSymmetricWall(6, 6, 'horizontal', 'x', 'L21');\n};\n\nexport const Grid = {\n\tbuildWalls\n};\n","import { GRID_HEIGHT, GRID_WIDTH } from '../constants';\nimport { Ghost, StoreType } from '../types';\nimport { MovementUtils } from './movement-utils';\n\nconst moveGhosts = (store: StoreType) => {\n\tstore.ghosts.forEach((ghost) => {\n\t\tif (ghost.scared || Math.random() < 0.15) {\n\t\t\tmoveScaredGhost(ghost, store);\n\t\t} else {\n\t\t\tmoveGhostWithPersonality(ghost, store);\n\t\t}\n\t});\n};\n\n// When scared, ghosts move randomly but with some intelligence\nconst moveScaredGhost = (ghost: Ghost, store: StoreType) => {\n\tif (!ghost.target || (ghost.x === ghost.target.x && ghost.y === ghost.target.y)) {\n\t\tghost.target = getRandomDestination(ghost.x, ghost.y);\n\t}\n\n\tconst validMoves = MovementUtils.getValidMoves(ghost.x, ghost.y);\n\tif (validMoves.length === 0) return;\n\n\t// Move toward target but with some randomness to appear \"scared\"\n\tconst dx = ghost.target.x - ghost.x;\n\tconst dy = ghost.target.y - ghost.y;\n\n\t// Filter moves that generally go toward the target\n\tlet possibleMoves = validMoves.filter((move) => {\n\t\t// If random < 0.3, allow any valid move for more erratic movement\n\t\tif (Math.random() < 0.3) return true;\n\n\t\t// Otherwise prefer moves that go toward target\n\t\tconst moveX = move[0];\n\t\tconst moveY = move[1];\n\t\treturn (dx > 0 && moveX > 0) || (dx < 0 && moveX < 0) || (dy > 0 && moveY > 0) || (dy < 0 && moveY < 0);\n\t});\n\n\t// If no valid moves toward target, use any valid move\n\tif (possibleMoves.length === 0) {\n\t\tpossibleMoves = validMoves;\n\t}\n\n\t// Choose a random move from the possible moves\n\tconst [moveX, moveY] = possibleMoves[Math.floor(Math.random() * possibleMoves.length)];\n\n\t// If Pacman has power-up, ghosts move slower\n\tif (store.pacman.powerupRemainingDuration && Math.random() < 0.5) return;\n\n\tghost.x += moveX;\n\tghost.y += moveY;\n};\n\n// Move ghost according to its personality\nconst moveGhostWithPersonality = (ghost: Ghost, store: StoreType) => {\n\tconst target = calculateGhostTarget(ghost, store);\n\tghost.target = target;\n\n\tconst nextMove = BFSTargetLocation(ghost.x, ghost.y, target.x, target.y);\n\tif (nextMove) {\n\t\tghost.x = nextMove.x;\n\t\tghost.y = nextMove.y;\n\t}\n};\n\n// Find the next position to move to using BFS\nconst BFSTargetLocation = (startX: number, startY: number, targetX: number, targetY: number): { x: number; y: number } | null => {\n\t// If we're already at the target, no need to move\n\tif (startX === targetX && startY === targetY) return null;\n\n\tconst queue: { x: number; y: number; path: { x: number; y: number }[] }[] = [{ x: startX, y: startY, path: [] }];\n\tconst visited = new Set<string>();\n\tvisited.add(`${startX},${startY}`);\n\n\twhile (queue.length > 0) {\n\t\tconst current = queue.shift()!;\n\t\tconst { x, y, path } = current;\n\n\t\tconst validMoves = MovementUtils.getValidMoves(x, y);\n\n\t\tfor (const [dx, dy] of validMoves) {\n\t\t\tconst newX = x + dx;\n\t\t\tconst newY = y + dy;\n\t\t\tconst key = `${newX},${newY}`;\n\n\t\t\tif (visited.has(key)) continue;\n\t\t\tvisited.add(key);\n\n\t\t\tconst newPath = [...path, { x: newX, y: newY }];\n\n\t\t\tif (newX === targetX && newY === targetY) {\n\t\t\t\treturn newPath.length > 0 ? newPath[0] : null;\n\t\t\t}\n\n\t\t\tqueue.push({ x: newX, y: newY, path: newPath });\n\t\t}\n\t}\n\n\t// If no path found, no need to move\n\treturn null;\n};\n\n// Calculate ghost target based on personality\nconst calculateGhostTarget = (ghost: Ghost, store: StoreType): { x: number; y: number } => {\n\tconst { pacman } = store;\n\tlet pacDirection = [0, 0];\n\tswitch (ghost.name) {\n\t\tcase 'blinky': // Red ghost - directly targets Pacman\n\t\t\treturn { x: pacman.x, y: pacman.y };\n\n\t\tcase 'pinky': // Pink ghost - targets 4 spaces ahead of Pacman\n\t\t\tpacDirection = getPacmanDirection(store);\n\n\t\t\tconst lookAhead = 4;\n\t\t\tlet fourAhead = {\n\t\t\t\tx: pacman.x + pacDirection[0] * lookAhead,\n\t\t\t\ty: pacman.y + pacDirection[1] * lookAhead\n\t\t\t};\n\n\t\t\tfourAhead.x = Math.min(Math.max(fourAhead.x, 0), GRID_WIDTH - 1);\n\t\t\tfourAhead.y = Math.min(Math.max(fourAhead.y, 0), GRID_HEIGHT - 1);\n\t\t\treturn fourAhead;\n\n\t\tcase 'inky': // Blue ghost - complex targeting based on Blinky's position\n\t\t\tconst blinky = store.ghosts.find((g) => g.name === 'blinky');\n\t\t\tpacDirection = getPacmanDirection(store);\n\n\t\t\t// Target is 2 spaces ahead of Pacman\n\t\t\tlet twoAhead = {\n\t\t\t\tx: pacman.x + pacDirection[0] * 2,\n\t\t\t\ty: pacman.y + pacDirection[1] * 2\n\t\t\t};\n\n\t\t\t// Then double the vector from Blinky to that position\n\t\t\tif (blinky) {\n\t\t\t\ttwoAhead = {\n\t\t\t\t\tx: twoAhead.x + (twoAhead.x - blinky.x),\n\t\t\t\t\ty: twoAhead.y + (twoAhead.y - blinky.y)\n\t\t\t\t};\n\t\t\t}\n\t\t\ttwoAhead.x = Math.min(Math.max(twoAhead.x, 0), GRID_WIDTH - 1);\n\t\t\ttwoAhead.y = Math.min(Math.max(twoAhead.y, 0), GRID_HEIGHT - 1);\n\t\t\treturn twoAhead;\n\n\t\tcase 'clyde': // Orange ghost - targets Pacman when far, runs away when close\n\t\t\tconst distanceToPacman = MovementUtils.calculateDistance(ghost.x, ghost.y, pacman.x, pacman.y);\n\t\t\tif (distanceToPacman > 8) {\n\t\t\t\treturn { x: pacman.x, y: pacman.y };\n\t\t\t} else {\n\t\t\t\treturn { x: 0, y: GRID_HEIGHT - 1 };\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// Default behavior targets Pacman directly\n\t\t\treturn { x: pacman.x, y: pacman.y };\n\t}\n};\n\nconst getPacmanDirection = (store: StoreType): [number, number] => {\n\tswitch (store.pacman.direction) {\n\t\tcase 'right':\n\t\t\treturn [1, 0];\n\t\tcase 'left':\n\t\t\treturn [-1, 0];\n\t\tcase 'up':\n\t\t\treturn [0, -1];\n\t\tcase 'down':\n\t\t\treturn [0, 1];\n\t\tdefault:\n\t\t\treturn [0, 0];\n\t}\n};\n\n// Get a random destination for scared ghosts\nconst getRandomDestination = (x: number, y: number) => {\n\tconst maxDistance = 8;\n\tconst randomX = x + Math.floor(Math.random() * (2 * maxDistance + 1)) - maxDistance;\n\tconst randomY = y + Math.floor(Math.random() * (2 * maxDistance + 1)) - maxDistance;\n\treturn {\n\t\tx: Math.max(0, Math.min(randomX, GRID_WIDTH - 1)),\n\t\ty: Math.max(0, Math.min(randomY, GRID_HEIGHT - 1))\n\t};\n};\n\nexport const GhostsMovement = {\n\tmoveGhosts\n};\n","import { GRID_HEIGHT, GRID_WIDTH, WALLS } from '../constants';\n\n// Check for walls and grid edges\nconst getValidMoves = (x: number, y: number): [number, number][] => {\n\tconst directions: [number, number][] = [\n\t\t[-1, 0], // left\n\t\t[1, 0], // right\n\t\t[0, -1], // up\n\t\t[0, 1] // down\n\t];\n\treturn directions.filter(([dx, dy]) => {\n\t\tconst newX = x + dx;\n\t\tconst newY = y + dy;\n\n\t\tif (newX < 0 || newX >= GRID_WIDTH || newY < 0 || newY >= GRID_HEIGHT) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (dx === -1) {\n\t\t\treturn !WALLS.vertical[x][y].active;\n\t\t} else if (dx === 1) {\n\t\t\treturn !WALLS.vertical[x + 1][y].active;\n\t\t} else if (dy === -1) {\n\t\t\treturn !WALLS.horizontal[x][y].active;\n\t\t} else if (dy === 1) {\n\t\t\treturn !WALLS.horizontal[x][y + 1].active;\n\t\t}\n\n\t\treturn true;\n\t});\n};\n\nconst calculateDistance = (x1: number, y1: number, x2: number, y2: number): number => {\n\treturn Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n};\n\nexport const MovementUtils = {\n\tgetValidMoves,\n\tcalculateDistance\n};\n","import { GRID_HEIGHT, GRID_WIDTH, PACMAN_POWERUP_DURATION } from '../constants';\nimport { StoreType } from '../types';\nimport { MovementUtils } from './movement-utils';\n\nconst RECENT_POSITIONS_LIMIT = 5;\n\nconst movePacman = (store: StoreType) => {\n\tif (store.pacman.deadRemainingDuration) {\n\t\treturn;\n\t}\n\n\tconst hasPowerup = !!store.pacman.powerupRemainingDuration;\n\tconst scaredGhosts = store.ghosts.filter((ghost) => ghost.scared);\n\n\tlet targetPosition = null;\n\n\tif (hasPowerup && scaredGhosts.length > 0) {\n\t\ttargetPosition = findClosestScaredGhost(store);\n\t} else {\n\t\ttargetPosition = findOptimalTarget(store);\n\t}\n\n\tif (!targetPosition) {\n\t\treturn;\n\t}\n\n\tconst nextPosition = calculateOptimalPath(store, targetPosition);\n\n\tif (nextPosition) {\n\t\tupdatePacmanPosition(store, nextPosition);\n\t} else {\n\t\tmakeDesperationMove(store);\n\t}\n\n\tcheckAndEatPoint(store);\n};\n\nconst findClosestScaredGhost = (store: StoreType) => {\n\tconst scaredGhosts = store.ghosts.filter((ghost) => ghost.scared);\n\n\tif (scaredGhosts.length === 0) return null;\n\n\treturn scaredGhosts.reduce(\n\t\t(closest, ghost) => {\n\t\t\tconst distance = MovementUtils.calculateDistance(ghost.x, ghost.y, store.pacman.x, store.pacman.y);\n\t\t\treturn distance < closest.distance ? { x: ghost.x, y: ghost.y, distance } : closest;\n\t\t},\n\t\t{ x: store.pacman.x, y: store.pacman.y, distance: Infinity }\n\t);\n};\n\nconst findOptimalTarget = (store: StoreType) => {\n\tlet pointCells: { x: number; y: number; value: number }[] = [];\n\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y < GRID_HEIGHT; y++) {\n\t\t\tif (store.grid[x][y].intensity > 0) {\n\t\t\t\tconst distance = MovementUtils.calculateDistance(x, y, store.pacman.x, store.pacman.y);\n\t\t\t\tconst value = store.grid[x][y].intensity / (distance + 1);\n\t\t\t\tpointCells.push({ x, y, value });\n\t\t\t}\n\t\t}\n\t}\n\n\tif (pointCells.length === 0) return null;\n\n\tpointCells.sort((a, b) => b.value - a.value);\n\treturn pointCells[0];\n};\n\nconst calculateOptimalPath = (store: StoreType, target: { x: number; y: number }) => {\n\tconst queue: { x: number; y: number; path: { x: number; y: number }[]; score: number }[] = [\n\t\t{ x: store.pacman.x, y: store.pacman.y, path: [], score: 0 }\n\t];\n\tconst visited = new Set<string>();\n\tvisited.add(`${store.pacman.x},${store.pacman.y}`);\n\n\tconst dangerMap = createDangerMap(store);\n\n\twhile (queue.length > 0) {\n\t\tqueue.sort((a, b) => b.score - a.score);\n\t\tconst current = queue.shift()!;\n\t\tconst { x, y, path } = current;\n\n\t\tif (x === target.x && y === target.y) {\n\t\t\treturn path.length > 0 ? path[0] : null;\n\t\t}\n\n\t\tconst validMoves = MovementUtils.getValidMoves(x, y);\n\n\t\tfor (const [dx, dy] of validMoves) {\n\t\t\tconst newX = x + dx;\n\t\t\tconst newY = y + dy;\n\t\t\tconst key = `${newX},${newY}`;\n\n\t\t\tif (!visited.has(key)) {\n\t\t\t\tconst newPath = [...path, { x: newX, y: newY }];\n\t\t\t\tconst danger = dangerMap.get(key) || 0;\n\t\t\t\tconst pointValue = store.grid[newX][newY].intensity;\n\t\t\t\tconst distanceToTarget = MovementUtils.calculateDistance(newX, newY, target.x, target.y);\n\n\t\t\t\tlet revisitPenalty = 0;\n\t\t\t\tif (store.pacman.recentPositions?.includes(key)) {\n\t\t\t\t\trevisitPenalty += 100; // Penalize recently visited positions\n\t\t\t\t}\n\n\t\t\t\tqueue.push({\n\t\t\t\t\tx: newX,\n\t\t\t\t\ty: newY,\n\t\t\t\t\tpath: newPath,\n\t\t\t\t\tscore: pointValue - danger - distanceToTarget / 10 - revisitPenalty\n\t\t\t\t});\n\t\t\t\tvisited.add(key);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst createDangerMap = (store: StoreType) => {\n\tconst dangerMap = new Map<string, number>();\n\tconst hasPowerup = !!store.pacman.powerupRemainingDuration;\n\n\tstore.ghosts.forEach((ghost) => {\n\t\tif (ghost.scared) return;\n\n\t\tfor (let dx = -5; dx <= 5; dx++) {\n\t\t\tfor (let dy = -5; dy <= 5; dy++) {\n\t\t\t\tconst x = ghost.x + dx;\n\t\t\t\tconst y = ghost.y + dy;\n\n\t\t\t\tif (x >= 0 && x < GRID_WIDTH && y >= 0 && y < GRID_HEIGHT) {\n\t\t\t\t\tconst key = `${x},${y}`;\n\t\t\t\t\tconst distance = Math.abs(dx) + Math.abs(dy);\n\t\t\t\t\tconst dangerValue = 15 - distance;\n\n\t\t\t\t\tif (dangerValue > 0) {\n\t\t\t\t\t\tconst currentDanger = dangerMap.get(key) || 0;\n\t\t\t\t\t\tdangerMap.set(key, Math.max(currentDanger, dangerValue));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tif (hasPowerup) {\n\t\tfor (const [key, value] of dangerMap.entries()) {\n\t\t\tdangerMap.set(key, value / 5);\n\t\t}\n\t}\n\n\treturn dangerMap;\n};\n\nconst makeDesperationMove = (store: StoreType) => {\n\tconst validMoves = MovementUtils.getValidMoves(store.pacman.x, store.pacman.y);\n\n\tif (validMoves.length === 0) return;\n\n\tconst safestMove = validMoves.reduce(\n\t\t(safest, [dx, dy]) => {\n\t\t\tconst newX = store.pacman.x + dx;\n\t\t\tconst newY = store.pacman.y + dy;\n\n\t\t\tlet minGhostDistance = Infinity;\n\n\t\t\tstore.ghosts.forEach((ghost) => {\n\t\t\t\tif (!ghost.scared) {\n\t\t\t\t\tconst distance = MovementUtils.calculateDistance(ghost.x, ghost.y, newX, newY);\n\t\t\t\t\tminGhostDistance = Math.min(minGhostDistance, distance);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn minGhostDistance > safest.distance ? { dx, dy, distance: minGhostDistance } : safest;\n\t\t},\n\t\t{ dx: 0, dy: 0, distance: -Infinity }\n\t);\n\n\tconst newX = store.pacman.x + safestMove.dx;\n\tconst newY = store.pacman.y + safestMove.dy;\n\n\tupdatePacmanPosition(store, { x: newX, y: newY });\n};\n\nconst updatePacmanPosition = (store: StoreType, position: { x: number; y: number }) => {\n\tstore.pacman.recentPositions ||= [];\n\tstore.pacman.recentPositions.push(`${position.x},${position.y}`);\n\tif (store.pacman.recentPositions.length > RECENT_POSITIONS_LIMIT) {\n\t\tstore.pacman.recentPositions.shift();\n\t}\n\n\tconst dx = position.x - store.pacman.x;\n\tconst dy = position.y - store.pacman.y;\n\n\tif (dx > 0) store.pacman.direction = 'right';\n\telse if (dx < 0) store.pacman.direction = 'left';\n\telse if (dy > 0) store.pacman.direction = 'down';\n\telse if (dy < 0) store.pacman.direction = 'up';\n\n\tstore.pacman.x = position.x;\n\tstore.pacman.y = position.y;\n};\n\nconst checkAndEatPoint = (store: StoreType) => {\n\tif (store.grid[store.pacman.x][store.pacman.y].intensity > 0) {\n\t\tstore.pacman.totalPoints += store.grid[store.pacman.x][store.pacman.y].commitsCount;\n\t\tstore.pacman.points++;\n\t\tstore.config.pointsIncreasedCallback(store.pacman.totalPoints);\n\t\tstore.grid[store.pacman.x][store.pacman.y].intensity = 0;\n\n\t\tif (store.pacman.points >= 30) activatePowerUp(store);\n\t}\n};\n\nconst activatePowerUp = (store: StoreType) => {\n\tstore.pacman.powerupRemainingDuration = PACMAN_POWERUP_DURATION;\n\tstore.ghosts.forEach((ghost) => (ghost.scared = true));\n};\n\nexport const PacmanMovement = {\n\tmovePacman\n};\n","export enum Sound {\n\tDEFAULT = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_chomp.wav',\n\tBEGINNING = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_beginning.wav',\n\tGAME_OVER = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_death.wav',\n\tEAT_GHOST = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_eatghost.wav'\n}\n\nexport class MusicPlayer {\n\tprivate static instance: MusicPlayer;\n\tprivate audioContext: AudioContext;\n\tprivate sounds: Map<Sound, AudioBuffer> = new Map();\n\tprivate currentSource: AudioBufferSourceNode | null = null;\n\tprivate defaultSource: AudioBufferSourceNode | null = null;\n\tpublic isMuted: boolean = false;\n\n\tprivate constructor() {\n\t\tthis.audioContext = new AudioContext();\n\t}\n\n\tpublic static getInstance(): MusicPlayer {\n\t\tif (!MusicPlayer.instance) {\n\t\t\tMusicPlayer.instance = new MusicPlayer();\n\t\t}\n\t\treturn MusicPlayer.instance;\n\t}\n\n\tpublic async preloadSounds(): Promise<void> {\n\t\tfor (const sound of Object.values(Sound)) {\n\t\t\tconst response = await fetch(sound);\n\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\tconst audioBuffer = await this.audioContext.decodeAudioData(arrayBuffer);\n\t\t\tthis.sounds.set(sound as Sound, audioBuffer);\n\t\t}\n\t}\n\n\tpublic async play(sound: Sound): Promise<void> {\n\t\tif (this.isMuted) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.currentSource) {\n\t\t\ttry {\n\t\t\t\tthis.currentSource.stop();\n\t\t\t} catch (ex) {}\n\t\t}\n\n\t\tconst buffer = this.sounds.get(sound);\n\t\tif (!buffer) {\n\t\t\tconsole.error(`Sound ${sound} not found`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.currentSource = this.audioContext.createBufferSource();\n\t\tthis.currentSource.buffer = buffer;\n\t\tthis.currentSource.connect(this.audioContext.destination);\n\n\t\tif (!this.isMuted) {\n\t\t\tthis.currentSource.start();\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.currentSource!.onended = () => {\n\t\t\t\tthis.currentSource = null;\n\t\t\t\tresolve();\n\t\t\t};\n\t\t});\n\t}\n\n\tpublic startDefaultSound(): void {\n\t\tif (this.defaultSource) {\n\t\t\ttry {\n\t\t\t\tthis.defaultSource.stop();\n\t\t\t} catch (ex) {}\n\t\t}\n\n\t\tconst buffer = this.sounds.get(Sound.DEFAULT);\n\t\tif (!buffer) {\n\t\t\tconsole.error('Default sound not found');\n\t\t\treturn;\n\t\t}\n\n\t\tthis.defaultSource = this.audioContext.createBufferSource();\n\t\tthis.defaultSource.buffer = buffer;\n\t\tthis.defaultSource.loop = true;\n\t\tthis.defaultSource.connect(this.audioContext.destination);\n\n\t\tif (!this.isMuted) {\n\t\t\tthis.defaultSource.start();\n\t\t}\n\t}\n\n\tpublic stopDefaultSound(): void {\n\t\tif (this.defaultSource) {\n\t\t\ttry {\n\t\t\t\tthis.defaultSource.stop();\n\t\t\t} catch (ex) {}\n\t\t\tthis.defaultSource = null;\n\t\t}\n\t}\n\n\tpublic mute(): void {\n\t\tthis.isMuted = true;\n\t\tif (this.currentSource) {\n\t\t\tthis.currentSource.disconnect();\n\t\t}\n\t\tif (this.defaultSource) {\n\t\t\tthis.defaultSource.disconnect();\n\t\t}\n\t}\n\n\tpublic unmute(): void {\n\t\tthis.isMuted = false;\n\t\tif (this.currentSource) {\n\t\t\tthis.currentSource.connect(this.audioContext.destination);\n\t\t}\n\t\tif (this.defaultSource) {\n\t\t\tthis.defaultSource.connect(this.audioContext.destination);\n\t\t}\n\t}\n}\n","import type { Config, StoreType } from './types';\n\nexport const Store: StoreType = {\n\tframeCount: 0,\n\tcontributions: [],\n\tpacman: {\n\t\tx: 0,\n\t\ty: 0,\n\t\tdirection: 'right',\n\t\tpoints: 0,\n\t\ttotalPoints: 0,\n\t\tdeadRemainingDuration: 0,\n\t\tpowerupRemainingDuration: 0,\n\t\trecentPositions: []\n\t},\n\tghosts: [],\n\tgrid: [],\n\tmonthLabels: [],\n\tpacmanMouthOpen: true,\n\tgameInterval: 0,\n\tgameHistory: [],\n\tconfig: undefined as unknown as Config\n};\n","import {\n\tCELL_SIZE,\n\tDELTA_TIME,\n\tGAP_SIZE,\n\tGHOSTS,\n\tGRID_HEIGHT,\n\tGRID_WIDTH,\n\tPACMAN_COLOR,\n\tPACMAN_COLOR_DEAD,\n\tPACMAN_COLOR_POWERUP,\n\tWALLS\n} from './constants';\nimport { AnimationData, StoreType } from './types';\nimport { Utils } from './utils';\n\nconst generateAnimatedSVG = (store: StoreType) => {\n\tconst svgWidth = GRID_WIDTH * (CELL_SIZE + GAP_SIZE);\n\tconst svgHeight = GRID_HEIGHT * (CELL_SIZE + GAP_SIZE) + 20;\n\tlet svg = `<svg width=\"${svgWidth}\" height=\"${svgHeight}\" xmlns=\"http://www.w3.org/2000/svg\">`;\n\tsvg += `<desc>Generated with https://github.com/abozanona/pacman-contribution-graph on ${new Date()}</desc>`;\n\tsvg += `<rect width=\"100%\" height=\"100%\" fill=\"${Utils.getCurrentTheme(store).gridBackground}\"/>`;\n\n\tsvg += generateGhostsPredefinition();\n\n\t// Month labels\n\tlet lastMonth = '';\n\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\tif (store.monthLabels[y] !== lastMonth) {\n\t\t\tconst xPos = y * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\t\t\tsvg += `<text x=\"${xPos}\" y=\"10\" text-anchor=\"middle\" font-size=\"10\" fill=\"${Utils.getCurrentTheme(store).textColor}\">${store.monthLabels[y]}</text>`;\n\t\t\tlastMonth = store.monthLabels[y];\n\t\t}\n\t}\n\n\t// Grid\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y < GRID_HEIGHT; y++) {\n\t\t\tconst cellX = x * (CELL_SIZE + GAP_SIZE);\n\t\t\tconst cellY = y * (CELL_SIZE + GAP_SIZE) + 15;\n\t\t\tconst cellColorAnimation = generateChangingValuesAnimation(store, generateCellColorValues(store, x, y));\n\t\t\tsvg += `<rect id=\"c-${x}-${y}\" x=\"${cellX}\" y=\"${cellY}\" width=\"${CELL_SIZE}\" height=\"${CELL_SIZE}\" rx=\"5\" fill=\"${Utils.getCurrentTheme(store).emptyContributionBoxColor}\">\n <animate attributeName=\"fill\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\" \n values=\"${cellColorAnimation.values}\" \n keyTimes=\"${cellColorAnimation.keyTimes}\"/>\n </rect>`;\n\t\t}\n\t}\n\n\t// Walls\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y < GRID_HEIGHT; y++) {\n\t\t\tif (WALLS.horizontal[x][y].active) {\n\t\t\t\tsvg += `<rect id=\"wh-${x}-${y}\" x=\"${x * (CELL_SIZE + GAP_SIZE) - GAP_SIZE}\" y=\"${y * (CELL_SIZE + GAP_SIZE) - GAP_SIZE + 15}\" width=\"${CELL_SIZE + GAP_SIZE}\" height=\"${GAP_SIZE}\" rx=\"5\" fill=\"${Utils.getCurrentTheme(store).wallColor}\"></rect>`;\n\t\t\t}\n\t\t\tif (WALLS.vertical[x][y].active) {\n\t\t\t\tsvg += `<rect id=\"wv-${x}-${y}\" x=\"${x * (CELL_SIZE + GAP_SIZE) - GAP_SIZE}\" y=\"${y * (CELL_SIZE + GAP_SIZE) - GAP_SIZE + 15}\" width=\"${GAP_SIZE}\" height=\"${CELL_SIZE + GAP_SIZE}\" rx=\"5\" fill=\"${Utils.getCurrentTheme(store).wallColor}\"></rect>`;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Pacman\n\tconst pacmanColorAnimation = generateChangingValuesAnimation(store, generatePacManColors(store));\n\tconst pacmanPositionAnimation = generateChangingValuesAnimation(store, generatePacManPositions(store));\n\tconst pacmanRotationAnimation = generateChangingValuesAnimation(store, generatePacManRotations(store));\n\tsvg += `<path id=\"pacman\" d=\"${generatePacManPath(0.55)}\"\n >\n\t\t<animate attributeName=\"fill\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${pacmanColorAnimation.keyTimes}\"\n values=\"${pacmanColorAnimation.values}\"/>\n <animateTransform attributeName=\"transform\" type=\"translate\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${pacmanPositionAnimation.keyTimes}\"\n values=\"${pacmanPositionAnimation.values}\"\n additive=\"sum\"/>\n <animateTransform attributeName=\"transform\" type=\"rotate\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${pacmanRotationAnimation.keyTimes}\"\n values=\"${pacmanRotationAnimation.values}\"\n additive=\"sum\"/>\n <animate attributeName=\"d\" dur=\"0.5s\" repeatCount=\"indefinite\"\n values=\"${generatePacManPath(0.55)};${generatePacManPath(0.05)};${generatePacManPath(0.55)}\"/>\n </path>`;\n\n\t// Ghosts\n\tstore.ghosts.forEach((ghost, index) => {\n\t\tconst ghostPositionAnimation = generateChangingValuesAnimation(store, generateGhostPositions(store, index));\n\t\tconst ghostColorAnimation = generateChangingValuesAnimation(store, generateGhostColors(store, index));\n\t\tsvg += `<use id=\"ghost${index}\" width=\"${CELL_SIZE}\" height=\"${CELL_SIZE}\" href=\"#ghost-${ghost.name}\">\n <animateTransform attributeName=\"transform\" type=\"translate\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${ghostPositionAnimation.keyTimes}\"\n values=\"${ghostPositionAnimation.values}\"/>\n <animate attributeName=\"href\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${ghostColorAnimation.keyTimes}\"\n values=\"${ghostColorAnimation.values}\"/>\n </use>`;\n\t});\n\n\tsvg += '</svg>';\n\treturn svg;\n};\n\nconst generatePacManPath = (mouthAngle: number) => {\n\tconst radius = CELL_SIZE / 2;\n\tconst startAngle = mouthAngle;\n\tconst endAngle = 2 * Math.PI - mouthAngle;\n\n\treturn `M ${radius},${radius}\n L ${radius + radius * Math.cos(startAngle)},${radius + radius * Math.sin(startAngle)}\n A ${radius},${radius} 0 1,1 ${radius + radius * Math.cos(endAngle)},${radius + radius * Math.sin(endAngle)}\n Z`;\n};\n\nconst generatePacManPositions = (store: StoreType): string[] => {\n\treturn store.gameHistory.map((state) => {\n\t\tconst x = state.pacman.x * (CELL_SIZE + GAP_SIZE);\n\t\tconst y = state.pacman.y * (CELL_SIZE + GAP_SIZE) + 15;\n\t\treturn `${x},${y}`;\n\t});\n};\n\nconst generatePacManRotations = (store: StoreType): string[] => {\n\tconst pivit = CELL_SIZE / 2;\n\treturn store.gameHistory.map((state) => {\n\t\tswitch (state.pacman.direction) {\n\t\t\tcase 'right':\n\t\t\t\treturn `0 ${pivit} ${pivit}`;\n\t\t\tcase 'left':\n\t\t\t\treturn `180 ${pivit} ${pivit}`;\n\t\t\tcase 'up':\n\t\t\t\treturn `270 ${pivit} ${pivit}`;\n\t\t\tcase 'down':\n\t\t\t\treturn `90 ${pivit} ${pivit}`;\n\t\t\tdefault:\n\t\t\t\treturn `0 ${pivit} ${pivit}`;\n\t\t}\n\t});\n};\n\nconst generatePacManColors = (store: StoreType): string[] => {\n\treturn store.gameHistory.map((state) => {\n\t\tif (state.pacman.deadRemainingDuration) {\n\t\t\treturn PACMAN_COLOR_DEAD;\n\t\t} else if (state.pacman.powerupRemainingDuration) {\n\t\t\treturn PACMAN_COLOR_POWERUP;\n\t\t} else {\n\t\t\treturn PACMAN_COLOR;\n\t\t}\n\t});\n};\n\nconst generateCellColorValues = (store: StoreType, x: number, y: number): string[] => {\n\treturn store.gameHistory.map((state) => {\n\t\tconst intensity = state.grid[x][y];\n\t\tif (intensity > 0) {\n\t\t\tconst adjustedIntensity = intensity < 0.2 ? 0.3 : intensity;\n\t\t\treturn Utils.hexToHexAlpha(Utils.getCurrentTheme(store).contributionBoxColor, adjustedIntensity);\n\t\t} else {\n\t\t\treturn Utils.getCurrentTheme(store).emptyContributionBoxColor;\n\t\t}\n\t});\n};\n\nconst generateGhostPositions = (store: StoreType, ghostIndex: number): string[] => {\n\treturn store.gameHistory.map((state) => {\n\t\tconst ghost = state.ghosts[ghostIndex];\n\t\tconst x = ghost.x * (CELL_SIZE + GAP_SIZE);\n\t\tconst y = ghost.y * (CELL_SIZE + GAP_SIZE) + 15;\n\t\treturn `${x},${y}`;\n\t});\n};\n\nconst generateGhostColors = (store: StoreType, ghostIndex: number): string[] => {\n\treturn store.gameHistory.map((state) => {\n\t\tconst ghost = state.ghosts[ghostIndex];\n\t\treturn '#' + (ghost.scared ? ghostShort('scared') : ghostShort(ghost.name));\n\t});\n};\n\nconst generateGhostsPredefinition = () => {\n\treturn `<defs>\n\t\t<symbol id=\"${ghostShort('blinky')}\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['blinky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"${ghostShort('clyde')}\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['clyde'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"${ghostShort('inky')}\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['inky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"${ghostShort('pinky')}\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['pinky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"${ghostShort('scared')}\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['scared'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t</defs>`;\n};\n\nconst ghostShort = (ghostName: string): string => {\n\tswitch (ghostName) {\n\t\tcase 'blinky':\n\t\t\treturn 'gb';\n\t\tcase 'clyde':\n\t\t\treturn 'gc';\n\t\tcase 'inky':\n\t\t\treturn 'gi';\n\t\tcase 'pinky':\n\t\t\treturn 'gp';\n\t\tcase 'scared':\n\t\t\treturn 'gs';\n\t\tdefault:\n\t\t\treturn ghostName;\n\t}\n};\n\nconst generateChangingValuesAnimation = (store: StoreType, changingValues: string[]): AnimationData => {\n\tif (store.gameHistory.length !== changingValues.length) {\n\t\tthrow new Error('The length of changingValues must match the length of gameHistory');\n\t}\n\n\tconst totalFrames = store.gameHistory.length;\n\tlet keyTimes: number[] = [];\n\tlet values: string[] = [];\n\tlet lastValue: string | null = null;\n\tlet lastIndex: number | null = null;\n\n\tchangingValues.forEach((currentValue, index) => {\n\t\tif (currentValue !== lastValue) {\n\t\t\tif (lastValue !== null && lastIndex !== null && index - 1 !== lastIndex) {\n\t\t\t\t// Add a keyframe right before the value change\n\t\t\t\tkeyTimes.push(Number(((index - 0.000001) / (totalFrames - 1)).toFixed(6)));\n\t\t\t\tvalues.push(lastValue);\n\t\t\t}\n\t\t\t// Add the new value keyframe\n\t\t\tkeyTimes.push(Number((index / (totalFrames - 1)).toFixed(6)));\n\t\t\tvalues.push(currentValue);\n\t\t\tlastValue = currentValue;\n\t\t\tlastIndex = index;\n\t\t}\n\t});\n\n\t// Ensure the last frame is always included\n\tif (keyTimes[keyTimes.length - 1] !== 1) {\n\t\tkeyTimes.push(1);\n\t\tvalues.push(lastValue!);\n\t}\n\n\treturn {\n\t\tkeyTimes: keyTimes.join(';'),\n\t\tvalues: values.join(';')\n\t};\n};\n\nexport const SVG = {\n\tgenerateAnimatedSVG\n};\n","import { GAME_THEMES } from './constants';\nimport type { Contribution, GameTheme, StoreType } from './types';\n\nconst getGitlabContribution = async (store: StoreType): Promise<Contribution[]> => {\n\t// const response = await fetch(`https://gitlab.com/users/${username}/calendar.json`);\n\tconst response = await fetch(\n\t\t`https://v0-new-project-q1hhrdodoye-abozanona-gmailcoms-projects.vercel.app/api/contributions?username=${store.config.username}`\n\t);\n\tconst contributionsList = await response.json();\n\treturn Object.entries(contributionsList).map(([date, count]) => ({\n\t\tdate: new Date(date),\n\t\tcount: Number(count)\n\t}));\n};\n\nconst getGithubContribution = async (store: StoreType): Promise<Contribution[]> => {\n\tconst commits = [];\n\tlet isComplete: boolean = false;\n\tlet page = 1;\n\t// TODO: Consider using GraphQL endpoint when user has an access token?\n\tdo {\n\t\ttry {\n\t\t\tconst headers: HeadersInit = {};\n\t\t\tif (store.config.githubSettings?.accessToken) {\n\t\t\t\theaders['Authorization'] = 'Bearer ' + store.config.githubSettings.accessToken;\n\t\t\t}\n\t\t\tconst response = await fetch(\n\t\t\t\t`https://api.github.com/search/commits?q=author:${store.config.username}&sort=author-date&order=desc&page=${page}&per_page=1000`,\n\t\t\t\t{\n\t\t\t\t\theaders\n\t\t\t\t}\n\t\t\t);\n\t\t\tconst contributionsList = await response.json();\n\t\t\tisComplete = contributionsList.items.length === 0;\n\t\t\tcommits.push(...contributionsList.items);\n\t\t\tpage++;\n\t\t} catch (ex) {\n\t\t\tisComplete = true;\n\t\t}\n\t} while (!isComplete);\n\treturn Array.from(\n\t\tcommits\n\t\t\t.reduce((map: any, item: any) => {\n\t\t\t\tconst dateString = item.commit.committer.date.split('T')[0];\n\t\t\t\tconst date = new Date(dateString);\n\t\t\t\tconst count = (map.get(dateString) || { count: 0 }).count + 1;\n\t\t\t\treturn map.set(dateString, { date, count });\n\t\t\t}, new Map())\n\t\t\t.values()\n\t);\n};\n\nconst getCurrentTheme = (store: StoreType): GameTheme => {\n\treturn GAME_THEMES[store.config.gameTheme] ?? GAME_THEMES['github'];\n};\n\nconst hexToRGBA = (hex: string, alpha: number): string => {\n\tconst r = parseInt(hex.slice(1, 3), 16);\n\tconst g = parseInt(hex.slice(3, 5), 16);\n\tconst b = parseInt(hex.slice(5, 7), 16);\n\treturn `rgba(${r}, ${g}, ${b}, ${alpha})`;\n};\n\nconst hexToHexAlpha = (hex: string, alpha: number): string => {\n\thex = hex.replace(/^#/, '');\n\tif (hex.length === 3) {\n\t\thex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n\t}\n\tconst alphaHex = Math.round(alpha * 255)\n\t\t.toString(16)\n\t\t.padStart(2, '0');\n\treturn `#${hex}${alphaHex}`;\n};\n\nexport const Utils = {\n\tgetGitlabContribution,\n\tgetGithubContribution,\n\tgetCurrentTheme,\n\thexToRGBA,\n\thexToHexAlpha\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Game } from './game';\nimport { Grid } from './grid';\nimport { Store } from './store';\nimport { Config, StoreType } from './types';\nimport { Utils } from './utils';\n\nexport class PacmanRenderer {\n\tstore: StoreType;\n\tconf: Config;\n\n\tconstructor(conf: Config) {\n\t\tthis.store = structuredClone(Store);\n\t\tthis.conf = { ...conf };\n\t\tGrid.buildWalls();\n\t}\n\n\tpublic async start() {\n\t\tconst defaultConfing: Config = {\n\t\t\tplatform: 'github',\n\t\t\tusername: '',\n\t\t\tcanvas: undefined as unknown as HTMLCanvasElement,\n\t\t\toutputFormat: 'svg',\n\t\t\tsvgCallback: (_: string) => {},\n\t\t\tgameOverCallback: () => () => {},\n\t\t\tgameTheme: 'github',\n\t\t\tgameSpeed: 1,\n\t\t\tenableSounds: false,\n\t\t\tpointsIncreasedCallback: (_: number) => {}\n\t\t};\n\t\tthis.store.config = { ...defaultConfing, ...this.conf };\n\n\t\tswitch (this.conf.platform) {\n\t\t\tcase 'gitlab':\n\t\t\t\tthis.store.contributions = await Utils.getGitlabContribution(this.store);\n\t\t\t\tbreak;\n\n\t\t\tcase 'github':\n\t\t\t\tthis.store.contributions = await Utils.getGithubContribution(this.store);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tGame.startGame(this.store);\n\t}\n\n\tpublic stop() {\n\t\tGame.stopGame(this.store);\n\t}\n}\n"],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"pacman-contribution-graph.js","mappings":"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","sources":["webpack://pacman-contribution-graph/./src/canvas.ts","webpack://pacman-contribution-graph/./src/constants.ts","webpack://pacman-contribution-graph/./src/game.ts","webpack://pacman-contribution-graph/./src/grid.ts","webpack://pacman-contribution-graph/./src/movement/ghosts-movement.ts","webpack://pacman-contribution-graph/./src/movement/movement-utils.ts","webpack://pacman-contribution-graph/./src/movement/pacman-movement.ts","webpack://pacman-contribution-graph/./src/music-player.ts","webpack://pacman-contribution-graph/./src/store.ts","webpack://pacman-contribution-graph/./src/svg.ts","webpack://pacman-contribution-graph/./src/utils.ts","webpack://pacman-contribution-graph/webpack/bootstrap","webpack://pacman-contribution-graph/webpack/runtime/define property getters","webpack://pacman-contribution-graph/webpack/runtime/hasOwnProperty shorthand","webpack://pacman-contribution-graph/webpack/runtime/make namespace object","webpack://pacman-contribution-graph/./src/index.ts"],"sourcesContent":["import {\n\tCELL_SIZE,\n\tGAP_SIZE,\n\tGHOSTS,\n\tGRID_HEIGHT,\n\tGRID_WIDTH,\n\tPACMAN_COLOR,\n\tPACMAN_COLOR_DEAD,\n\tPACMAN_COLOR_POWERUP,\n\tWALLS\n} from './constants';\nimport { MusicPlayer } from './music-player';\nimport { StoreType } from './types';\nimport { Utils } from './utils';\n\nconst resizeCanvas = (store: StoreType) => {\n\tconst canvasWidth = GRID_WIDTH * (CELL_SIZE + GAP_SIZE);\n\tconst canvasHeight = GRID_HEIGHT * (CELL_SIZE + GAP_SIZE) + 20; // Adding some space for months on top\n\n\tstore.config.canvas.width = canvasWidth;\n\tstore.config.canvas.height = canvasHeight;\n};\n\nconst drawGrid = (store: StoreType) => {\n\tconst ctx = store.config.canvas.getContext('2d')!;\n\tctx.fillStyle = Utils.getCurrentTheme(store).gridBackground;\n\tctx.fillRect(0, 0, store.config.canvas.width, store.config.canvas.height);\n\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y < GRID_HEIGHT; y++) {\n\t\t\tconst intensity = store.grid[x][y].intensity;\n\t\t\tif (intensity > 0) {\n\t\t\t\tconst adjustedIntensity = intensity < 0.2 ? 0.3 : intensity;\n\t\t\t\tconst color = Utils.hexToRGBA(Utils.getCurrentTheme(store).contributionBoxColor, adjustedIntensity);\n\t\t\t\tctx.fillStyle = color;\n\t\t\t} else {\n\t\t\t\tctx.fillStyle = Utils.getCurrentTheme(store).emptyContributionBoxColor;\n\t\t\t}\n\t\t\tctx.beginPath();\n\t\t\tstore.config.canvas\n\t\t\t\t.getContext('2d')!\n\t\t\t\t.roundRect(x * (CELL_SIZE + GAP_SIZE), y * (CELL_SIZE + GAP_SIZE) + 15, CELL_SIZE, CELL_SIZE, 5);\n\t\t\tctx.fill();\n\t\t}\n\t}\n\n\tctx.fillStyle = Utils.getCurrentTheme(store).wallColor;\n\tfor (let x = 0; x <= GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y <= GRID_HEIGHT; y++) {\n\t\t\t// Draw horizontal walls\n\t\t\tif (WALLS.horizontal[x][y].active) {\n\t\t\t\tctx.fillRect(\n\t\t\t\t\tx * (CELL_SIZE + GAP_SIZE) - GAP_SIZE,\n\t\t\t\t\ty * (CELL_SIZE + GAP_SIZE) - GAP_SIZE + 15,\n\t\t\t\t\tCELL_SIZE + GAP_SIZE,\n\t\t\t\t\tGAP_SIZE\n\t\t\t\t);\n\t\t\t\t// // TODO: For debug only\n\t\t\t\t// ctx.fillStyle = '#000';\n\t\t\t\t// ctx.fillText(WALLS.horizontal[x][y].id, x * (GAP_SIZE + CELL_SIZE), y * (GAP_SIZE + CELL_SIZE));\n\t\t\t}\n\n\t\t\t// Draw vertical walls\n\t\t\tif (WALLS.vertical[x][y].active) {\n\t\t\t\tctx.fillRect(\n\t\t\t\t\tx * (CELL_SIZE + GAP_SIZE) - GAP_SIZE,\n\t\t\t\t\ty * (CELL_SIZE + GAP_SIZE) - GAP_SIZE + 15,\n\t\t\t\t\tGAP_SIZE,\n\t\t\t\t\tCELL_SIZE + GAP_SIZE\n\t\t\t\t);\n\t\t\t\t// // TODO: For debug only\n\t\t\t\t// ctx.fillStyle = '#000';\n\t\t\t\t// ctx.fillText(WALLS.vertical[x][y].id, x * (GAP_SIZE + CELL_SIZE), (y + 1) * (GAP_SIZE + CELL_SIZE));\n\t\t\t}\n\t\t}\n\t}\n\n\tctx.fillStyle = Utils.getCurrentTheme(store).textColor;\n\tctx.font = '10px Arial';\n\tctx.textAlign = 'center';\n\n\tlet lastMonth = '';\n\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tif (store.monthLabels[x] !== lastMonth) {\n\t\t\tconst xPos = x * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\t\t\tctx.fillText(store.monthLabels[x], xPos, 10);\n\t\t\tlastMonth = store.monthLabels[x];\n\t\t}\n\t}\n};\n\nconst drawPacman = (store: StoreType) => {\n\tconst ctx = store.config.canvas.getContext('2d')!;\n\tconst x = store.pacman.x * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\tconst y = store.pacman.y * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2 + 15;\n\tconst radius = CELL_SIZE / 2;\n\n\t// Change Pac-Man's color to red if he's on power-up, dead, else yellow\n\tif (store.pacman.deadRemainingDuration) {\n\t\tctx.fillStyle = PACMAN_COLOR_DEAD;\n\t} else if (store.pacman.powerupRemainingDuration) {\n\t\tctx.fillStyle = PACMAN_COLOR_POWERUP;\n\t} else {\n\t\tctx.fillStyle = PACMAN_COLOR;\n\t}\n\n\tconst mouthAngle = store.pacmanMouthOpen ? 0.35 * Math.PI : 0.1 * Math.PI;\n\n\tlet startAngle, endAngle;\n\tswitch (store.pacman.direction) {\n\t\tcase 'up':\n\t\t\tstartAngle = 1.5 * Math.PI + mouthAngle;\n\t\t\tendAngle = 1.5 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'down':\n\t\t\tstartAngle = 0.5 * Math.PI + mouthAngle;\n\t\t\tendAngle = 0.5 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'left':\n\t\t\tstartAngle = Math.PI + mouthAngle;\n\t\t\tendAngle = Math.PI - mouthAngle;\n\t\t\tbreak;\n\t\tcase 'right':\n\t\tdefault:\n\t\t\tstartAngle = 0 + mouthAngle;\n\t\t\tendAngle = 2 * Math.PI - mouthAngle;\n\t\t\tbreak;\n\t}\n\n\tctx.beginPath();\n\tctx.arc(x, y, radius, startAngle, endAngle);\n\tctx.lineTo(x, y);\n\tctx.fill();\n};\n\nconst preloadedImages: { [key: string]: HTMLImageElement } = {};\nconst getLoadedImage = (key: string, imgDate: string): HTMLImageElement => {\n\tif (!preloadedImages[key]) {\n\t\tconst image = new Image();\n\t\timage.src = imgDate;\n\t\tpreloadedImages[key] = image;\n\t}\n\treturn preloadedImages[key];\n};\n\nconst drawGhosts = (store: StoreType) => {\n\tstore.ghosts.forEach((ghost) => {\n\t\tconst x = ghost.x * (CELL_SIZE + GAP_SIZE);\n\t\tconst y = ghost.y * (CELL_SIZE + GAP_SIZE) + 15;\n\t\tconst size = CELL_SIZE;\n\n\t\tconst ctx = store.config.canvas.getContext('2d')!;\n\t\tif (ghost.scared) {\n\t\t\tctx.drawImage(getLoadedImage('scared', GHOSTS['scared'].imgDate), x, y, size, size);\n\t\t} else {\n\t\t\tctx.drawImage(getLoadedImage(ghost.name, GHOSTS[ghost.name].imgDate), x, y, size, size);\n\t\t}\n\t});\n};\n\nconst renderGameOver = (store: StoreType) => {\n\tconst ctx = store.config.canvas.getContext('2d')!;\n\tctx.fillStyle = Utils.getCurrentTheme(store).textColor;\n\tctx.font = '20px Arial';\n\tctx.textAlign = 'center';\n\tctx.fillText('Game Over', store.config.canvas.width / 2, store.config.canvas.height / 2);\n};\n\nconst drawSoundController = (store: StoreType) => {\n\tif (!store.config.enableSounds) {\n\t\treturn;\n\t}\n\tconst ctx = store.config.canvas.getContext('2d')!;\n\n\tconst width = 30,\n\t\theight = 30,\n\t\tleft = store.config.canvas.width - width - 10,\n\t\ttop = 10;\n\tctx.fillStyle = `rgba(0, 0, 0, ${MusicPlayer.getInstance().isMuted ? 0.3 : 0.5})`;\n\tctx.beginPath();\n\tctx.moveTo(left + 10, top + 10);\n\tctx.lineTo(left + 20, top + 5);\n\tctx.lineTo(left + 20, top + 25);\n\tctx.lineTo(left + 10, top + 20);\n\tctx.closePath();\n\tctx.fill();\n\n\tif (!MusicPlayer.getInstance().isMuted) {\n\t\tctx.strokeStyle = `rgba(0, 0, 0, 0.4)`;\n\t\tctx.lineWidth = 2;\n\n\t\t// First wave\n\t\tctx.beginPath();\n\t\tctx.arc(left + 25, top + 15, 5, 0, Math.PI * 2);\n\t\tctx.stroke();\n\n\t\t// Second wave\n\t\tctx.beginPath();\n\t\tctx.arc(left + 25, top + 15, 8, 0, Math.PI * 2);\n\t\tctx.stroke();\n\t} else {\n\t\t// Mute line\n\t\tctx.strokeStyle = 'rgba(255, 0, 0, 0.6)';\n\t\tctx.lineWidth = 3;\n\t\tctx.beginPath();\n\t\tctx.moveTo(left + 25, top + 5);\n\t\tctx.lineTo(left + 5, top + 25);\n\t\tctx.stroke();\n\t}\n};\n\nconst listenToSoundController = (store: StoreType) => {\n\tif (!store.config.enableSounds) {\n\t\treturn;\n\t}\n\tstore.config.canvas.addEventListener('click', function (event) {\n\t\tconst rect = store.config.canvas.getBoundingClientRect();\n\t\tconst x = event.clientX - rect.left,\n\t\t\ty = event.clientY - rect.top;\n\t\tconst width = 30,\n\t\t\theight = 30,\n\t\t\tleft = store.config.canvas.width - width - 10,\n\t\t\ttop = 10;\n\n\t\tif (x >= left && x <= left + this.width && y >= top && y <= top + this.height) {\n\t\t\tif (MusicPlayer.getInstance().isMuted) {\n\t\t\t\tMusicPlayer.getInstance().unmute();\n\t\t\t} else {\n\t\t\t\tMusicPlayer.getInstance().mute();\n\t\t\t}\n\t\t}\n\t});\n};\n\nexport const Canvas = {\n\tresizeCanvas,\n\tdrawGrid,\n\tdrawPacman,\n\tdrawGhosts,\n\trenderGameOver,\n\tdrawSoundController,\n\tlistenToSoundController\n};\n","import { GameTheme, GhostName, ThemeKeys } from './types';\n\nexport const CELL_SIZE = 20;\nexport const GAP_SIZE = 2;\nexport const GRID_WIDTH = 52;\nexport const GRID_HEIGHT = 7;\nexport const PACMAN_COLOR = 'yellow';\nexport const PACMAN_COLOR_POWERUP = 'red';\nexport const PACMAN_COLOR_DEAD = '#80808064';\nexport const GHOST_NAMES: GhostName[] = ['blinky', 'clyde', 'inky', 'pinky'];\nexport const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nexport const DELTA_TIME = 200;\nexport const PACMAN_DEATH_DURATION = 10;\nexport const PACMAN_POWERUP_DURATION = 15;\nexport const GAME_THEMES: { [key in ThemeKeys]: GameTheme } = {\n\tgithub: {\n\t\ttextColor: '#586069',\n\t\tgridBackground: '#ffffff',\n\t\tcontributionBoxColor: '#9be9a8',\n\t\temptyContributionBoxColor: '#ebedf0',\n\t\twallColor: '#000000'\n\t},\n\t'github-dark': {\n\t\ttextColor: '#8b949e',\n\t\tgridBackground: '#0d1117',\n\t\tcontributionBoxColor: '#26a641',\n\t\temptyContributionBoxColor: '#161b22',\n\t\twallColor: '#FFFFFF'\n\t},\n\tgitlab: {\n\t\ttextColor: '#626167',\n\t\tgridBackground: '#ffffff',\n\t\tcontributionBoxColor: '#7992f5',\n\t\temptyContributionBoxColor: '#ececef',\n\t\twallColor: '#000000'\n\t},\n\t'gitlab-dark': {\n\t\ttextColor: '#999999',\n\t\tgridBackground: '#1f1f1f',\n\t\tcontributionBoxColor: '#2e7db1',\n\t\temptyContributionBoxColor: '#2d2d2d',\n\t\twallColor: '#FFFFFF'\n\t}\n};\nexport const GHOSTS: { [key in GhostName | 'scared']: { imgDate: string } } = {\n\tblinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAfUlEQVQ4T+2TUQ7AIAhDy/0PzQIRAqxmLtnn/DJPWypBAVkKKOMCyOQN7IRElLrcnIrDLNK4wVtxNbkb6Hq+jOcSbim6QVzKEstkw92gxVeFrMpqokix4wA+NvCOnvfArvcEbHoe2G9QmmhDMUc65p3xYC6q3zQPxtdl3NgF5QpL/b/rs3IAAAAASUVORK5CYIIA'\n\t},\n\tclyde: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgUlEQVQ4T+2T0Q6AIAhFLx9sH1MfTIPCAeLKrcd8PHqP4JBQLN7BFacNlHkAs+AQcqIueBs2mVWjgtWwl4yCdrd/pHYLLlVEgR2yK0wy4SoI5TcGXU4wM+AEJQfwsUCuXngDOR4rqKbngf0C94gyFHmkbd4rbkxD/pv2jfR1Ky7sBNrzXbHpnBX+AAAAAElFTkSuQmCC'\n\t},\n\tinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAg0lEQVQ4T+WTWxKAIAhFuQvK/a+jFoT5QAVxypn+6vMEx6sDIO/jk12OAMs1WDVOXV3UBW+bRVbTFMFu8yCZBExH/g26VHCXI0AJpKgdUCUrTlkwxE+FECdzS7HiJemXgvyeO29gE7jD8wDVFX4vSLNtR1q2z+OVlaZxTaXYrq7HbxYBS8VgMVrqzkEAAAAASUVORK5CYIIA'\n\t},\n\tpinky: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhklEQVQ4T+2T0Q2AIAwF281wC50Qt9DNagoptqVESfyUz4N3vJCCECxaD4o47gt6bsAo2IWUqAnehkUmbYpgNqwlvSCnur+dtnnAuYUVyCGJimTAi8DUzwmwOoGI7hYjDgAfC/jqiTfg47ZBND0P7BeoR+Sh8CMt8x5xYSWkv2nbcF834swuA/9u49Yy5bgAAAAASUVORK5CYIIA'\n\t},\n\tscared: {\n\t\timgDate:\n\t\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeUlEQVQ4T82TUQ6AMAhD7UX0/sdyF0GREVmDmTN+bH9r6Bs0A0t2VpFULwDrrfBkZFcA3YC3ZodViAFGzQHyP0B2w2NrB0/1AoDbHwLoQ5/nrw1OBuD5e/crbM9Aiz35njHWzpSB/m3+0r40mV41M8U19WJe3Uw/tQOKt08pUUbBEQAAAABJRU5ErkJgggAA'\n\t}\n};\nexport const WALLS: {\n\thorizontal: { active: boolean; id: string }[][];\n\tvertical: { active: boolean; id: string }[][];\n} = {\n\thorizontal: Array(GRID_WIDTH + 1)\n\t\t.fill(null)\n\t\t.map(() => Array(GRID_HEIGHT + 1).fill({ active: false, id: '' })),\n\tvertical: Array(GRID_WIDTH + 1)\n\t\t.fill(null)\n\t\t.map(() => Array(GRID_HEIGHT + 1).fill({ active: false, id: '' }))\n};\n\nexport const setWall = (x: number, y: number, direction: 'horizontal' | 'vertical', lineId: string) => {\n\tif (direction === 'horizontal') {\n\t\tif (x >= 0 && x < WALLS.horizontal.length && y >= 0 && y < WALLS.horizontal[0].length) {\n\t\t\tWALLS.horizontal[x][y] = { active: true, id: lineId };\n\t\t}\n\t} else {\n\t\tif (x >= 0 && x < WALLS.vertical.length && y >= 0 && y < WALLS.vertical[0].length) {\n\t\t\tWALLS.vertical[x][y] = { active: true, id: lineId };\n\t\t}\n\t}\n};\n\nexport const hasWall = (x: number, y: number, direction: 'up' | 'down' | 'left' | 'right'): boolean => {\n\tswitch (direction) {\n\t\tcase 'up':\n\t\t\treturn WALLS.horizontal[x][y].active;\n\t\tcase 'down':\n\t\t\treturn WALLS.horizontal[x + 1][y].active;\n\t\tcase 'left':\n\t\t\treturn WALLS.vertical[x][y].active;\n\t\tcase 'right':\n\t\t\treturn WALLS.vertical[x][y + 1].active;\n\t}\n};\n","import { Canvas } from './canvas';\nimport { DELTA_TIME, GHOST_NAMES, GRID_HEIGHT, GRID_WIDTH, MONTHS, PACMAN_DEATH_DURATION } from './constants';\nimport { GhostsMovement } from './movement/ghosts-movement';\nimport { PacmanMovement } from './movement/pacman-movement';\nimport { MusicPlayer, Sound } from './music-player';\nimport { SVG } from './svg';\nimport { StoreType } from './types';\n\nconst initializeGrid = (store: StoreType) => {\n\tstore.pacman.points = 0;\n\tstore.pacman.totalPoints = 0;\n\tstore.grid = Array.from({ length: GRID_WIDTH }, () => Array.from({ length: GRID_HEIGHT }, () => ({ commitsCount: 0, intensity: 0 })));\n\tstore.monthLabels = Array(GRID_WIDTH).fill('');\n\tlet maxCommits = 1;\n\n\tconst now = new Date();\n\tconst startOfCurrentWeek = new Date(now);\n\tstartOfCurrentWeek.setDate(now.getDate() - now.getDay());\n\n\tstore.contributions.forEach((contribution) => {\n\t\tconst contributionDate = new Date(contribution.date);\n\t\tconst dayOfWeek = contributionDate.getDay();\n\t\tconst weeksAgo = Math.floor((+startOfCurrentWeek - +contributionDate) / (1000 * 60 * 60 * 24 * 7));\n\n\t\tif (weeksAgo >= 0 && weeksAgo < GRID_WIDTH && dayOfWeek >= 0 && dayOfWeek < GRID_HEIGHT) {\n\t\t\tstore.grid[GRID_WIDTH - 1 - weeksAgo][dayOfWeek] = { commitsCount: contribution.count, intensity: 0 };\n\t\t\tif (contribution.count > maxCommits) maxCommits = contribution.count;\n\t\t}\n\t});\n\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y < GRID_HEIGHT; y++) {\n\t\t\tif (store.grid[x][y].commitsCount > 0) {\n\t\t\t\tstore.grid[x][y].intensity = store.grid[x][y].commitsCount / maxCommits;\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tconst weeksAgo = GRID_WIDTH - 1 - x;\n\t\tconst columnDate = new Date(startOfCurrentWeek);\n\t\tcolumnDate.setDate(columnDate.getDate() - weeksAgo * 7);\n\t\tstore.monthLabels[x] = MONTHS[columnDate.getMonth()];\n\t}\n};\n\nconst placePacman = (store: StoreType) => {\n\tstore.pacman = {\n\t\tx: 0,\n\t\ty: 0,\n\t\tdirection: 'right',\n\t\tpoints: 0,\n\t\ttotalPoints: 0,\n\t\tdeadRemainingDuration: 0,\n\t\tpowerupRemainingDuration: 0,\n\t\trecentPositions: []\n\t};\n\tif (store.config.outputFormat == 'canvas') Canvas.drawPacman(store);\n};\n\nconst placeGhosts = (store: StoreType) => {\n\tstore.ghosts = [];\n\t// Center gjosts in mid grid\n\tstore.ghosts.push({ x: 23, y: 3, name: GHOST_NAMES[0], scared: false, target: undefined });\n\tstore.ghosts.push({ x: 24, y: 3, name: GHOST_NAMES[1], scared: false, target: undefined });\n\tstore.ghosts.push({ x: 27, y: 3, name: GHOST_NAMES[2], scared: false, target: undefined });\n\tstore.ghosts.push({ x: 28, y: 3, name: GHOST_NAMES[3], scared: false, target: undefined });\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGhosts(store);\n};\n\nconst stopGame = async (store: StoreType) => {\n\tclearInterval(store.gameInterval);\n};\n\nconst startGame = async (store: StoreType) => {\n\tif (store.config.outputFormat == 'canvas') {\n\t\tstore.config.canvas = store.config.canvas;\n\t\tCanvas.resizeCanvas(store);\n\t\tCanvas.listenToSoundController(store);\n\t}\n\n\tstore.frameCount = 0;\n\tstore.ghosts.forEach((ghost) => (ghost.scared = false));\n\n\tinitializeGrid(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGrid(store);\n\n\tif (store.config.outputFormat == 'canvas') {\n\t\tif (!store.config.enableSounds) {\n\t\t\tMusicPlayer.getInstance().mute();\n\t\t}\n\t\tawait MusicPlayer.getInstance().preloadSounds();\n\t\tMusicPlayer.getInstance().startDefaultSound();\n\t\tawait MusicPlayer.getInstance().play(Sound.BEGINNING);\n\t}\n\n\tconst remainingCells = () => store.grid.some((row) => row.some((cell) => cell.intensity > 0));\n\tif (remainingCells()) {\n\t\tplacePacman(store);\n\t\tplaceGhosts(store);\n\t}\n\n\tif (store.config.outputFormat == 'svg') {\n\t\twhile (remainingCells()) {\n\t\t\tawait updateGame(store);\n\t\t}\n\t\t// One more time to generate svg\n\t\tawait updateGame(store);\n\t} else {\n\t\tclearInterval(store.gameInterval);\n\t\tstore.gameInterval = setInterval(async () => await updateGame(store), DELTA_TIME);\n\t}\n};\n\nconst updateGame = async (store: StoreType) => {\n\tstore.frameCount++;\n\tif (store.frameCount % store.config.gameSpeed !== 0) {\n\t\tstore.gameHistory.push({\n\t\t\tpacman: { ...store.pacman },\n\t\t\tghosts: store.ghosts.map((ghost) => ({ ...ghost })),\n\t\t\tgrid: store.grid.map((row) => [...row.map((col) => col.intensity)])\n\t\t});\n\t\treturn;\n\t}\n\n\tif (store.pacman.deadRemainingDuration) {\n\t\tstore.pacman.deadRemainingDuration--;\n\t\tif (!store.pacman.deadRemainingDuration) {\n\t\t\t// IT'S ALIVE!\n\t\t\tplaceGhosts(store);\n\t\t\tif (store.config.outputFormat == 'canvas')\n\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t.play(Sound.GAME_OVER)\n\t\t\t\t\t.then(() => MusicPlayer.getInstance().startDefaultSound());\n\t\t}\n\t}\n\n\tif (store.pacman.powerupRemainingDuration) {\n\t\tstore.pacman.powerupRemainingDuration--;\n\t\tif (!store.pacman.powerupRemainingDuration) {\n\t\t\tstore.ghosts.forEach((ghost) => (ghost.scared = false));\n\t\t\tstore.pacman.points = 0;\n\t\t}\n\t}\n\n\tconst remainingCells = store.grid.some((row) => row.some((cell) => cell.intensity > 0));\n\tif (!remainingCells) {\n\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\tclearInterval(store.gameInterval);\n\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\tCanvas.renderGameOver(store);\n\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t.play(Sound.BEGINNING)\n\t\t\t\t\t.then(() => MusicPlayer.getInstance().stopDefaultSound());\n\t\t\t}\n\t\t}\n\n\t\tif (store.config.outputFormat == 'svg') {\n\t\t\tconst animatedSVG = SVG.generateAnimatedSVG(store);\n\t\t\tstore.config.svgCallback(animatedSVG);\n\t\t}\n\n\t\tstore.config.gameOverCallback();\n\t\treturn;\n\t}\n\n\tPacmanMovement.movePacman(store);\n\tcheckCollisions(store);\n\tif (!store.pacman.deadRemainingDuration) {\n\t\tGhostsMovement.moveGhosts(store);\n\t\tcheckCollisions(store);\n\t}\n\n\tstore.pacmanMouthOpen = !store.pacmanMouthOpen;\n\n\tstore.gameHistory.push({\n\t\tpacman: { ...store.pacman },\n\t\tghosts: store.ghosts.map((ghost) => ({ ...ghost })),\n\t\tgrid: store.grid.map((row) => [...row.map((col) => col.intensity)])\n\t});\n\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGrid(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawPacman(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawGhosts(store);\n\tif (store.config.outputFormat == 'canvas') Canvas.drawSoundController(store);\n};\n\nconst checkCollisions = (store: StoreType) => {\n\tif (store.pacman.deadRemainingDuration) return;\n\n\tstore.ghosts.forEach((ghost, index) => {\n\t\tif (ghost.x === store.pacman.x && ghost.y === store.pacman.y) {\n\t\t\tif (store.pacman.powerupRemainingDuration && ghost.scared) {\n\t\t\t\trespawnGhost(store, index);\n\t\t\t\tstore.pacman.points += 10;\n\t\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\t\tMusicPlayer.getInstance().play(Sound.EAT_GHOST);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstore.pacman.points = 0;\n\t\t\t\tstore.pacman.powerupRemainingDuration = 0;\n\t\t\t\tstore.pacman.deadRemainingDuration = PACMAN_DEATH_DURATION;\n\t\t\t\tif (store.config.outputFormat == 'canvas') {\n\t\t\t\t\tMusicPlayer.getInstance()\n\t\t\t\t\t\t.play(Sound.GAME_OVER)\n\t\t\t\t\t\t.then(() => MusicPlayer.getInstance().stopDefaultSound());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\nconst respawnGhost = (store: StoreType, ghostIndex: number) => {\n\tlet x, y;\n\tdo {\n\t\tx = Math.floor(Math.random() * GRID_WIDTH);\n\t\ty = Math.floor(Math.random() * GRID_HEIGHT);\n\t} while ((Math.abs(x - store.pacman.x) <= 2 && Math.abs(y - store.pacman.y) <= 2) || store.grid[x][y].intensity === 0);\n\tstore.ghosts[ghostIndex] = {\n\t\tx,\n\t\ty,\n\t\tname: GHOST_NAMES[ghostIndex % GHOST_NAMES.length],\n\t\tscared: false,\n\t\ttarget: undefined\n\t};\n};\n\nexport const Game = {\n\tstartGame,\n\tstopGame\n};\n","import { GRID_HEIGHT, GRID_WIDTH, setWall } from './constants';\n\nconst setSymmetricWall = (x: number, y: number, direction: 'horizontal' | 'vertical', sym: '' | 'x' | 'y' | 'xy', lineId: string) => {\n\tif (direction == 'horizontal') {\n\t\tsetWall(x, y, 'horizontal', lineId);\n\t\tif (sym == 'x') {\n\t\t\tsetWall(GRID_WIDTH - x - 1, y, 'horizontal', lineId);\n\t\t} else if (sym == 'y') {\n\t\t\tsetWall(x, GRID_HEIGHT - y, 'horizontal', lineId);\n\t\t} else if (sym == 'xy') {\n\t\t\tsetWall(GRID_WIDTH - x - 1, y, 'horizontal', lineId);\n\t\t\tsetWall(x, GRID_HEIGHT - y, 'horizontal', lineId);\n\t\t\tsetWall(GRID_WIDTH - x - 1, GRID_HEIGHT - y, 'horizontal', lineId);\n\t\t}\n\t} else {\n\t\tsetWall(x, y, 'vertical', lineId);\n\t\tif (sym == 'x') {\n\t\t\tsetWall(GRID_WIDTH - x, y, 'vertical', lineId);\n\t\t} else if (sym == 'y') {\n\t\t\tsetWall(x, GRID_HEIGHT - y - 1, 'vertical', lineId);\n\t\t} else if (sym == 'xy') {\n\t\t\tsetWall(GRID_WIDTH - x, y, 'vertical', lineId);\n\t\t\tsetWall(x, GRID_HEIGHT - y - 1, 'vertical', lineId);\n\t\t\tsetWall(GRID_WIDTH - x, GRID_HEIGHT - y - 1, 'vertical', lineId);\n\t\t}\n\t}\n};\n\nconst buildWalls = () => {\n\t// Left and right wings\n\t// L1\n\tsetSymmetricWall(0, 2, 'horizontal', 'xy', 'L1');\n\tsetSymmetricWall(1, 2, 'horizontal', 'xy', 'L1');\n\t// L2\n\tsetSymmetricWall(4, 0, 'vertical', 'x', 'L2');\n\tsetSymmetricWall(4, 1, 'vertical', 'x', 'L2');\n\tsetSymmetricWall(4, 2, 'vertical', 'x', 'L2');\n\tsetSymmetricWall(4, 3, 'vertical', 'x', 'L2');\n\tsetSymmetricWall(4, 4, 'vertical', 'x', 'L2');\n\t// L3\n\tsetSymmetricWall(3, 3, 'horizontal', 'x', 'L3');\n\tsetSymmetricWall(2, 3, 'horizontal', 'x', 'L3');\n\t// L4\n\tsetSymmetricWall(4, 5, 'horizontal', 'x', 'L4');\n\t// L5\n\tsetSymmetricWall(6, 4, 'vertical', 'x', 'L5');\n\tsetSymmetricWall(6, 3, 'vertical', 'x', 'L5');\n\tsetSymmetricWall(6, 2, 'vertical', 'x', 'L5');\n\t// L6\n\tsetSymmetricWall(6, 2, 'horizontal', 'x', 'L6');\n\tsetSymmetricWall(7, 2, 'horizontal', 'x', 'L6');\n\tsetSymmetricWall(8, 2, 'horizontal', 'x', 'L6');\n\tsetSymmetricWall(9, 2, 'horizontal', 'x', 'L6');\n\t// L7\n\tsetSymmetricWall(13, 2, 'horizontal', 'xy', 'L7');\n\tsetSymmetricWall(14, 2, 'horizontal', 'xy', 'L7');\n\tsetSymmetricWall(15, 2, 'horizontal', 'xy', 'L7');\n\tsetSymmetricWall(16, 2, 'horizontal', 'xy', 'L7');\n\tsetSymmetricWall(17, 2, 'horizontal', 'xy', 'L7');\n\tsetSymmetricWall(18, 2, 'horizontal', 'xy', 'L7');\n\t// L8\n\tsetSymmetricWall(16, 2, 'vertical', 'xy', 'L8');\n\t// L9\n\tsetSymmetricWall(8, 1, 'horizontal', 'x', 'L9');\n\tsetSymmetricWall(9, 1, 'horizontal', 'x', 'L9');\n\tsetSymmetricWall(10, 1, 'horizontal', 'x', 'L9');\n\tsetSymmetricWall(11, 1, 'horizontal', 'x', 'L9');\n\t// L10\n\tsetSymmetricWall(12, 1, 'vertical', 'x', 'L10');\n\tsetSymmetricWall(12, 3, 'vertical', 'x', 'L10');\n\t// L11\n\tsetSymmetricWall(11, 4, 'horizontal', 'x', 'L11');\n\tsetSymmetricWall(10, 4, 'horizontal', 'x', 'L11');\n\tsetSymmetricWall(9, 4, 'horizontal', 'x', 'L11');\n\tsetSymmetricWall(8, 4, 'horizontal', 'x', 'L11');\n\t// L12\n\tsetSymmetricWall(8, 4, 'vertical', 'x', 'L12');\n\tsetSymmetricWall(8, 5, 'vertical', 'x', 'L12');\n\tsetSymmetricWall(8, 6, 'vertical', 'x', 'L12');\n\t// L13\n\tsetSymmetricWall(23, 2, 'horizontal', 'x', 'L13');\n\tsetSymmetricWall(24, 2, 'horizontal', 'x', 'L13');\n\tsetSymmetricWall(23, 4, 'horizontal', 'x', 'L13');\n\tsetSymmetricWall(24, 4, 'horizontal', 'x', 'L13');\n\tsetSymmetricWall(25, 4, 'horizontal', 'x', 'L13');\n\t// L14\n\tsetSymmetricWall(23, 2, 'vertical', 'x', 'L14');\n\tsetSymmetricWall(23, 3, 'vertical', 'x', 'L14');\n\t// L15\n\tsetSymmetricWall(26, 4, 'vertical', 'x', 'L15');\n\tsetSymmetricWall(26, 5, 'vertical', 'x', 'L15');\n\t// L16\n\tsetSymmetricWall(23, 6, 'horizontal', 'x', 'L16');\n\tsetSymmetricWall(24, 6, 'horizontal', 'x', 'L16');\n\tsetSymmetricWall(25, 6, 'horizontal', 'x', 'L16');\n\t// L17\n\tsetSymmetricWall(26, 0, 'vertical', 'x', 'L17');\n\t// L18\n\tsetSymmetricWall(24, 1, 'vertical', 'x', 'L18');\n\tsetSymmetricWall(23, 1, 'horizontal', 'x', 'L18');\n\tsetSymmetricWall(22, 1, 'horizontal', 'x', 'L18');\n\tsetSymmetricWall(21, 1, 'horizontal', 'x', 'L18');\n\tsetSymmetricWall(21, 1, 'vertical', 'x', 'L18');\n\tsetSymmetricWall(21, 2, 'vertical', 'x', 'L18');\n\tsetSymmetricWall(21, 3, 'vertical', 'x', 'L18');\n\tsetSymmetricWall(20, 4, 'horizontal', 'x', 'L18');\n\tsetSymmetricWall(19, 4, 'horizontal', 'x', 'L18');\n\tsetSymmetricWall(19, 3, 'vertical', 'x', 'L18');\n\tsetSymmetricWall(18, 3, 'horizontal', 'x', 'L18');\n\t// L19\n\tsetSymmetricWall(22, 5, 'vertical', 'x', 'L19');\n\tsetSymmetricWall(21, 5, 'horizontal', 'x', 'L19');\n\tsetSymmetricWall(20, 5, 'horizontal', 'x', 'L19');\n\tsetSymmetricWall(20, 5, 'vertical', 'x', 'L19');\n\t// L20\n\tsetSymmetricWall(1, 6, 'horizontal', 'x', 'L20');\n\tsetSymmetricWall(2, 6, 'horizontal', 'x', 'L20');\n\tsetSymmetricWall(3, 5, 'vertical', 'x', 'L20');\n\tsetSymmetricWall(3, 4, 'vertical', 'x', 'L20');\n\t// L21\n\tsetSymmetricWall(5, 6, 'horizontal', 'x', 'L21');\n\tsetSymmetricWall(6, 6, 'horizontal', 'x', 'L21');\n};\n\nexport const Grid = {\n\tbuildWalls\n};\n","import { GRID_HEIGHT, GRID_WIDTH } from '../constants';\nimport { Ghost, Point2d, StoreType } from '../types';\nimport { MovementUtils } from './movement-utils';\n\nconst moveGhosts = (store: StoreType) => {\n\tstore.ghosts.forEach((ghost) => {\n\t\tif (ghost.scared || Math.random() < 0.15) {\n\t\t\tmoveScaredGhost(ghost, store);\n\t\t} else {\n\t\t\tmoveGhostWithPersonality(ghost, store);\n\t\t}\n\t});\n};\n\n// When scared, ghosts move randomly but with some intelligence\nconst moveScaredGhost = (ghost: Ghost, store: StoreType) => {\n\tif (!ghost.target || (ghost.x === ghost.target.x && ghost.y === ghost.target.y)) {\n\t\tghost.target = getRandomDestination(ghost.x, ghost.y);\n\t}\n\n\tconst validMoves = MovementUtils.getValidMoves(ghost.x, ghost.y);\n\tif (validMoves.length === 0) return;\n\n\t// Move toward target but with some randomness to appear \"scared\"\n\tconst dx = ghost.target.x - ghost.x;\n\tconst dy = ghost.target.y - ghost.y;\n\n\t// Filter moves that generally go toward the target\n\tlet possibleMoves = validMoves.filter((move) => {\n\t\tconst moveX = move[0];\n\t\tconst moveY = move[1];\n\t\treturn (dx > 0 && moveX > 0) || (dx < 0 && moveX < 0) || (dy > 0 && moveY > 0) || (dy < 0 && moveY < 0);\n\t});\n\n\t// If no valid moves toward target, use any valid move\n\tif (possibleMoves.length === 0) {\n\t\tpossibleMoves = validMoves;\n\t}\n\n\t// Choose a random move from the possible moves\n\tconst [moveX, moveY] = possibleMoves[Math.floor(Math.random() * possibleMoves.length)];\n\n\t// If Pacman has power-up, ghosts move slower\n\tif (store.pacman.powerupRemainingDuration && Math.random() < 0.5) return;\n\n\tghost.x += moveX;\n\tghost.y += moveY;\n};\n\n// Move ghost according to its personality\nconst moveGhostWithPersonality = (ghost: Ghost, store: StoreType) => {\n\tconst target = calculateGhostTarget(ghost, store);\n\tghost.target = target;\n\n\tconst nextMove = BFSTargetLocation(ghost.x, ghost.y, target.x, target.y);\n\tif (nextMove) {\n\t\tghost.x = nextMove.x;\n\t\tghost.y = nextMove.y;\n\t}\n};\n\n// Find the next position to move to using BFS\nconst BFSTargetLocation = (startX: number, startY: number, targetX: number, targetY: number): Point2d | null => {\n\t// If we're already at the target, no need to move\n\tif (startX === targetX && startY === targetY) return null;\n\n\tconst queue: { x: number; y: number; path: Point2d[] }[] = [{ x: startX, y: startY, path: [] }];\n\tconst visited = new Set<string>();\n\tvisited.add(`${startX},${startY}`);\n\n\twhile (queue.length > 0) {\n\t\tconst current = queue.shift()!;\n\t\tconst { x, y, path } = current;\n\n\t\tconst validMoves = MovementUtils.getValidMoves(x, y);\n\n\t\tfor (const [dx, dy] of validMoves) {\n\t\t\tconst newX = x + dx;\n\t\t\tconst newY = y + dy;\n\t\t\tconst key = `${newX},${newY}`;\n\n\t\t\tif (visited.has(key)) continue;\n\t\t\tvisited.add(key);\n\n\t\t\tconst newPath = [...path, { x: newX, y: newY }];\n\n\t\t\tif (newX === targetX && newY === targetY) {\n\t\t\t\treturn newPath.length > 0 ? newPath[0] : null;\n\t\t\t}\n\n\t\t\tqueue.push({ x: newX, y: newY, path: newPath });\n\t\t}\n\t}\n\n\t// If no path found, no need to move\n\treturn null;\n};\n\n// Calculate ghost target based on personality\nconst calculateGhostTarget = (ghost: Ghost, store: StoreType): Point2d => {\n\tconst { pacman } = store;\n\tlet pacDirection = [0, 0];\n\tswitch (ghost.name) {\n\t\tcase 'blinky': // Red ghost - directly targets Pacman\n\t\t\treturn { x: pacman.x, y: pacman.y };\n\n\t\tcase 'pinky': // Pink ghost - targets 4 spaces ahead of Pacman\n\t\t\tpacDirection = getPacmanDirection(store);\n\n\t\t\tconst lookAhead = 4;\n\t\t\tlet fourAhead = {\n\t\t\t\tx: pacman.x + pacDirection[0] * lookAhead,\n\t\t\t\ty: pacman.y + pacDirection[1] * lookAhead\n\t\t\t};\n\n\t\t\tfourAhead.x = Math.min(Math.max(fourAhead.x, 0), GRID_WIDTH - 1);\n\t\t\tfourAhead.y = Math.min(Math.max(fourAhead.y, 0), GRID_HEIGHT - 1);\n\t\t\treturn fourAhead;\n\n\t\tcase 'inky': // Blue ghost - complex targeting based on Blinky's position\n\t\t\tconst blinky = store.ghosts.find((g) => g.name === 'blinky');\n\t\t\tpacDirection = getPacmanDirection(store);\n\n\t\t\t// Target is 2 spaces ahead of Pacman\n\t\t\tlet twoAhead = {\n\t\t\t\tx: pacman.x + pacDirection[0] * 2,\n\t\t\t\ty: pacman.y + pacDirection[1] * 2\n\t\t\t};\n\n\t\t\t// Then double the vector from Blinky to that position\n\t\t\tif (blinky) {\n\t\t\t\ttwoAhead = {\n\t\t\t\t\tx: twoAhead.x + (twoAhead.x - blinky.x),\n\t\t\t\t\ty: twoAhead.y + (twoAhead.y - blinky.y)\n\t\t\t\t};\n\t\t\t}\n\t\t\ttwoAhead.x = Math.min(Math.max(twoAhead.x, 0), GRID_WIDTH - 1);\n\t\t\ttwoAhead.y = Math.min(Math.max(twoAhead.y, 0), GRID_HEIGHT - 1);\n\t\t\treturn twoAhead;\n\n\t\tcase 'clyde': // Orange ghost - targets Pacman when far, runs away when close\n\t\t\tconst distanceToPacman = MovementUtils.calculateDistance(ghost.x, ghost.y, pacman.x, pacman.y);\n\t\t\tif (distanceToPacman > 8) {\n\t\t\t\treturn { x: pacman.x, y: pacman.y };\n\t\t\t} else {\n\t\t\t\treturn { x: 0, y: GRID_HEIGHT - 1 };\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// Default behavior targets Pacman directly\n\t\t\treturn { x: pacman.x, y: pacman.y };\n\t}\n};\n\nconst getPacmanDirection = (store: StoreType): [number, number] => {\n\tswitch (store.pacman.direction) {\n\t\tcase 'right':\n\t\t\treturn [1, 0];\n\t\tcase 'left':\n\t\t\treturn [-1, 0];\n\t\tcase 'up':\n\t\t\treturn [0, -1];\n\t\tcase 'down':\n\t\t\treturn [0, 1];\n\t\tdefault:\n\t\t\treturn [0, 0];\n\t}\n};\n\n// Get a random destination for scared ghosts\nconst getRandomDestination = (x: number, y: number) => {\n\tconst maxDistance = 8;\n\tconst randomX = x + Math.floor(Math.random() * (2 * maxDistance + 1)) - maxDistance;\n\tconst randomY = y + Math.floor(Math.random() * (2 * maxDistance + 1)) - maxDistance;\n\treturn {\n\t\tx: Math.max(0, Math.min(randomX, GRID_WIDTH - 1)),\n\t\ty: Math.max(0, Math.min(randomY, GRID_HEIGHT - 1))\n\t};\n};\n\nexport const GhostsMovement = {\n\tmoveGhosts\n};\n","import { GRID_HEIGHT, GRID_WIDTH, WALLS } from '../constants';\n\n// Check for walls and grid edges\nconst getValidMoves = (x: number, y: number): [number, number][] => {\n\tconst directions: [number, number][] = [\n\t\t[-1, 0], // left\n\t\t[1, 0], // right\n\t\t[0, -1], // up\n\t\t[0, 1] // down\n\t];\n\treturn directions.filter(([dx, dy]) => {\n\t\tconst newX = x + dx;\n\t\tconst newY = y + dy;\n\n\t\tif (newX < 0 || newX >= GRID_WIDTH || newY < 0 || newY >= GRID_HEIGHT) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (dx === -1) {\n\t\t\treturn !WALLS.vertical[x][y].active;\n\t\t} else if (dx === 1) {\n\t\t\treturn !WALLS.vertical[x + 1][y].active;\n\t\t} else if (dy === -1) {\n\t\t\treturn !WALLS.horizontal[x][y].active;\n\t\t} else if (dy === 1) {\n\t\t\treturn !WALLS.horizontal[x][y + 1].active;\n\t\t}\n\n\t\treturn true;\n\t});\n};\n\nconst calculateDistance = (x1: number, y1: number, x2: number, y2: number): number => {\n\treturn Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n};\n\nexport const MovementUtils = {\n\tgetValidMoves,\n\tcalculateDistance\n};\n","import { GRID_HEIGHT, GRID_WIDTH, PACMAN_POWERUP_DURATION } from '../constants';\nimport { Point2d, StoreType } from '../types';\nimport { MovementUtils } from './movement-utils';\n\nconst RECENT_POSITIONS_LIMIT = 5;\n\nconst movePacman = (store: StoreType) => {\n\tif (store.pacman.deadRemainingDuration) {\n\t\treturn;\n\t}\n\n\tconst hasPowerup = !!store.pacman.powerupRemainingDuration;\n\tconst scaredGhosts = store.ghosts.filter((ghost) => ghost.scared);\n\n\tlet targetPosition: Point2d;\n\n\tif (hasPowerup && scaredGhosts.length > 0) {\n\t\tconst ghostPosition = findClosestScaredGhost(store);\n\t\tif (ghostPosition) {\n\t\t\ttargetPosition = ghostPosition;\n\t\t} else {\n\t\t\ttargetPosition = findOptimalTarget(store);\n\t\t}\n\t} else if (store.pacman.target) {\n\t\tif (store.pacman.target.x == store.pacman.x && store.pacman.target.y == store.pacman.y) {\n\t\t\ttargetPosition = findOptimalTarget(store);\n\t\t\tstore.pacman.target = { x: targetPosition?.x, y: targetPosition?.y };\n\t\t} else {\n\t\t\ttargetPosition = store.pacman.target;\n\t\t}\n\t} else {\n\t\ttargetPosition = findOptimalTarget(store);\n\t\tstore.pacman.target = { x: targetPosition?.x, y: targetPosition?.y };\n\t}\n\n\tconst nextPosition = calculateOptimalPath(store, targetPosition);\n\n\tif (nextPosition) {\n\t\tupdatePacmanPosition(store, nextPosition);\n\t} else {\n\t\tmakeDesperationMove(store);\n\t}\n\n\tcheckAndEatPoint(store);\n};\n\nconst findClosestScaredGhost = (store: StoreType) => {\n\tconst scaredGhosts = store.ghosts.filter((ghost) => ghost.scared);\n\n\tif (scaredGhosts.length === 0) return null;\n\n\treturn scaredGhosts.reduce(\n\t\t(closest, ghost) => {\n\t\t\tconst distance = MovementUtils.calculateDistance(ghost.x, ghost.y, store.pacman.x, store.pacman.y);\n\t\t\treturn distance < closest.distance ? { x: ghost.x, y: ghost.y, distance } : closest;\n\t\t},\n\t\t{ x: store.pacman.x, y: store.pacman.y, distance: Infinity }\n\t);\n};\n\nconst findOptimalTarget = (store: StoreType) => {\n\tlet pointCells: { x: number; y: number; value: number }[] = [];\n\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y < GRID_HEIGHT; y++) {\n\t\t\tif (store.grid[x][y].intensity > 0) {\n\t\t\t\tconst distance = MovementUtils.calculateDistance(x, y, store.pacman.x, store.pacman.y);\n\t\t\t\tconst value = store.grid[x][y].intensity / (distance + 1);\n\t\t\t\tpointCells.push({ x, y, value });\n\t\t\t}\n\t\t}\n\t}\n\n\tpointCells.sort((a, b) => b.value - a.value);\n\treturn pointCells[0];\n};\n\nconst calculateOptimalPath = (store: StoreType, target: Point2d) => {\n\tconst queue: { x: number; y: number; path: Point2d[]; score: number }[] = [\n\t\t{ x: store.pacman.x, y: store.pacman.y, path: [], score: 0 }\n\t];\n\tconst visited = new Set<string>();\n\tvisited.add(`${store.pacman.x},${store.pacman.y}`);\n\n\tconst dangerMap = createDangerMap(store);\n\n\twhile (queue.length > 0) {\n\t\tqueue.sort((a, b) => b.score - a.score);\n\t\tconst current = queue.shift()!;\n\t\tconst { x, y, path } = current;\n\n\t\tif (x === target.x && y === target.y) {\n\t\t\treturn path.length > 0 ? path[0] : null;\n\t\t}\n\n\t\tconst validMoves = MovementUtils.getValidMoves(x, y);\n\n\t\tfor (const [dx, dy] of validMoves) {\n\t\t\tconst newX = x + dx;\n\t\t\tconst newY = y + dy;\n\t\t\tconst key = `${newX},${newY}`;\n\n\t\t\tif (!visited.has(key)) {\n\t\t\t\tconst newPath = [...path, { x: newX, y: newY }];\n\t\t\t\tconst danger = dangerMap.get(key) || 0;\n\t\t\t\tconst pointValue = store.grid[newX][newY].intensity;\n\t\t\t\tconst distanceToTarget = MovementUtils.calculateDistance(newX, newY, target.x, target.y);\n\n\t\t\t\tlet revisitPenalty = 0;\n\t\t\t\tif (store.pacman.recentPositions?.includes(key)) {\n\t\t\t\t\trevisitPenalty += 100; // Penalize recently visited positions\n\t\t\t\t}\n\n\t\t\t\tqueue.push({\n\t\t\t\t\tx: newX,\n\t\t\t\t\ty: newY,\n\t\t\t\t\tpath: newPath,\n\t\t\t\t\tscore: pointValue - danger - distanceToTarget / 10 - revisitPenalty\n\t\t\t\t});\n\t\t\t\tvisited.add(key);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst createDangerMap = (store: StoreType) => {\n\tconst dangerMap = new Map<string, number>();\n\tconst hasPowerup = !!store.pacman.powerupRemainingDuration;\n\n\tstore.ghosts.forEach((ghost) => {\n\t\tif (ghost.scared) return;\n\n\t\tfor (let dx = -5; dx <= 5; dx++) {\n\t\t\tfor (let dy = -5; dy <= 5; dy++) {\n\t\t\t\tconst x = ghost.x + dx;\n\t\t\t\tconst y = ghost.y + dy;\n\n\t\t\t\tif (x >= 0 && x < GRID_WIDTH && y >= 0 && y < GRID_HEIGHT) {\n\t\t\t\t\tconst key = `${x},${y}`;\n\t\t\t\t\tconst distance = Math.abs(dx) + Math.abs(dy);\n\t\t\t\t\tconst dangerValue = 15 - distance;\n\n\t\t\t\t\tif (dangerValue > 0) {\n\t\t\t\t\t\tconst currentDanger = dangerMap.get(key) || 0;\n\t\t\t\t\t\tdangerMap.set(key, Math.max(currentDanger, dangerValue));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tif (hasPowerup) {\n\t\tfor (const [key, value] of dangerMap.entries()) {\n\t\t\tdangerMap.set(key, value / 5);\n\t\t}\n\t}\n\n\treturn dangerMap;\n};\n\nconst makeDesperationMove = (store: StoreType) => {\n\tconst validMoves = MovementUtils.getValidMoves(store.pacman.x, store.pacman.y);\n\n\tif (validMoves.length === 0) return;\n\n\tconst safestMove = validMoves.reduce(\n\t\t(safest, [dx, dy]) => {\n\t\t\tconst newX = store.pacman.x + dx;\n\t\t\tconst newY = store.pacman.y + dy;\n\n\t\t\tlet minGhostDistance = Infinity;\n\n\t\t\tstore.ghosts.forEach((ghost) => {\n\t\t\t\tif (!ghost.scared) {\n\t\t\t\t\tconst distance = MovementUtils.calculateDistance(ghost.x, ghost.y, newX, newY);\n\t\t\t\t\tminGhostDistance = Math.min(minGhostDistance, distance);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn minGhostDistance > safest.distance ? { dx, dy, distance: minGhostDistance } : safest;\n\t\t},\n\t\t{ dx: 0, dy: 0, distance: -Infinity }\n\t);\n\n\tconst newX = store.pacman.x + safestMove.dx;\n\tconst newY = store.pacman.y + safestMove.dy;\n\n\tupdatePacmanPosition(store, { x: newX, y: newY });\n};\n\nconst updatePacmanPosition = (store: StoreType, position: Point2d) => {\n\tstore.pacman.recentPositions ||= [];\n\tstore.pacman.recentPositions.push(`${position.x},${position.y}`);\n\tif (store.pacman.recentPositions.length > RECENT_POSITIONS_LIMIT) {\n\t\tstore.pacman.recentPositions.shift();\n\t}\n\n\tconst dx = position.x - store.pacman.x;\n\tconst dy = position.y - store.pacman.y;\n\n\tif (dx > 0) store.pacman.direction = 'right';\n\telse if (dx < 0) store.pacman.direction = 'left';\n\telse if (dy > 0) store.pacman.direction = 'down';\n\telse if (dy < 0) store.pacman.direction = 'up';\n\n\tstore.pacman.x = position.x;\n\tstore.pacman.y = position.y;\n};\n\nconst checkAndEatPoint = (store: StoreType) => {\n\tif (store.grid[store.pacman.x][store.pacman.y].intensity > 0) {\n\t\tstore.pacman.totalPoints += store.grid[store.pacman.x][store.pacman.y].commitsCount;\n\t\tstore.pacman.points++;\n\t\tstore.config.pointsIncreasedCallback(store.pacman.totalPoints);\n\t\tstore.grid[store.pacman.x][store.pacman.y].intensity = 0;\n\n\t\tif (store.pacman.points >= 10) activatePowerUp(store);\n\t}\n};\n\nconst activatePowerUp = (store: StoreType) => {\n\tstore.pacman.powerupRemainingDuration = PACMAN_POWERUP_DURATION;\n\tstore.ghosts.forEach((ghost) => (ghost.scared = true));\n};\n\nexport const PacmanMovement = {\n\tmovePacman\n};\n","export enum Sound {\n\tDEFAULT = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_chomp.wav',\n\tBEGINNING = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_beginning.wav',\n\tGAME_OVER = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_death.wav',\n\tEAT_GHOST = 'https://cdn.jsdelivr.net/npm/pacman-contribution-graph/src/assets/sounds/pacman_eatghost.wav'\n}\n\nexport class MusicPlayer {\n\tprivate static instance: MusicPlayer;\n\tprivate audioContext: AudioContext;\n\tprivate sounds: Map<Sound, AudioBuffer> = new Map();\n\tprivate currentSource: AudioBufferSourceNode | null = null;\n\tprivate defaultSource: AudioBufferSourceNode | null = null;\n\tpublic isMuted: boolean = false;\n\n\tprivate constructor() {\n\t\tthis.audioContext = new AudioContext();\n\t}\n\n\tpublic static getInstance(): MusicPlayer {\n\t\tif (!MusicPlayer.instance) {\n\t\t\tMusicPlayer.instance = new MusicPlayer();\n\t\t}\n\t\treturn MusicPlayer.instance;\n\t}\n\n\tpublic async preloadSounds(): Promise<void> {\n\t\tfor (const sound of Object.values(Sound)) {\n\t\t\tconst response = await fetch(sound);\n\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\tconst audioBuffer = await this.audioContext.decodeAudioData(arrayBuffer);\n\t\t\tthis.sounds.set(sound as Sound, audioBuffer);\n\t\t}\n\t}\n\n\tpublic async play(sound: Sound): Promise<void> {\n\t\tif (this.isMuted) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.currentSource) {\n\t\t\ttry {\n\t\t\t\tthis.currentSource.stop();\n\t\t\t} catch (ex) {}\n\t\t}\n\n\t\tconst buffer = this.sounds.get(sound);\n\t\tif (!buffer) {\n\t\t\tconsole.error(`Sound ${sound} not found`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.currentSource = this.audioContext.createBufferSource();\n\t\tthis.currentSource.buffer = buffer;\n\t\tthis.currentSource.connect(this.audioContext.destination);\n\n\t\tif (!this.isMuted) {\n\t\t\tthis.currentSource.start();\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.currentSource!.onended = () => {\n\t\t\t\tthis.currentSource = null;\n\t\t\t\tresolve();\n\t\t\t};\n\t\t});\n\t}\n\n\tpublic startDefaultSound(): void {\n\t\tif (this.defaultSource) {\n\t\t\ttry {\n\t\t\t\tthis.defaultSource.stop();\n\t\t\t} catch (ex) {}\n\t\t}\n\n\t\tconst buffer = this.sounds.get(Sound.DEFAULT);\n\t\tif (!buffer) {\n\t\t\tconsole.error('Default sound not found');\n\t\t\treturn;\n\t\t}\n\n\t\tthis.defaultSource = this.audioContext.createBufferSource();\n\t\tthis.defaultSource.buffer = buffer;\n\t\tthis.defaultSource.loop = true;\n\t\tthis.defaultSource.connect(this.audioContext.destination);\n\n\t\tif (!this.isMuted) {\n\t\t\tthis.defaultSource.start();\n\t\t}\n\t}\n\n\tpublic stopDefaultSound(): void {\n\t\tif (this.defaultSource) {\n\t\t\ttry {\n\t\t\t\tthis.defaultSource.stop();\n\t\t\t} catch (ex) {}\n\t\t\tthis.defaultSource = null;\n\t\t}\n\t}\n\n\tpublic mute(): void {\n\t\tthis.isMuted = true;\n\t\tif (this.currentSource) {\n\t\t\tthis.currentSource.disconnect();\n\t\t}\n\t\tif (this.defaultSource) {\n\t\t\tthis.defaultSource.disconnect();\n\t\t}\n\t}\n\n\tpublic unmute(): void {\n\t\tthis.isMuted = false;\n\t\tif (this.currentSource) {\n\t\t\tthis.currentSource.connect(this.audioContext.destination);\n\t\t}\n\t\tif (this.defaultSource) {\n\t\t\tthis.defaultSource.connect(this.audioContext.destination);\n\t\t}\n\t}\n}\n","import type { Config, StoreType } from './types';\n\nexport const Store: StoreType = {\n\tframeCount: 0,\n\tcontributions: [],\n\tpacman: {\n\t\tx: 0,\n\t\ty: 0,\n\t\tdirection: 'right',\n\t\tpoints: 0,\n\t\ttotalPoints: 0,\n\t\tdeadRemainingDuration: 0,\n\t\tpowerupRemainingDuration: 0,\n\t\trecentPositions: []\n\t},\n\tghosts: [],\n\tgrid: [],\n\tmonthLabels: [],\n\tpacmanMouthOpen: true,\n\tgameInterval: 0,\n\tgameHistory: [],\n\tconfig: undefined as unknown as Config\n};\n","import {\n\tCELL_SIZE,\n\tDELTA_TIME,\n\tGAP_SIZE,\n\tGHOSTS,\n\tGRID_HEIGHT,\n\tGRID_WIDTH,\n\tPACMAN_COLOR,\n\tPACMAN_COLOR_DEAD,\n\tPACMAN_COLOR_POWERUP,\n\tWALLS\n} from './constants';\nimport { AnimationData, StoreType } from './types';\nimport { Utils } from './utils';\n\nconst generateAnimatedSVG = (store: StoreType) => {\n\tconst svgWidth = GRID_WIDTH * (CELL_SIZE + GAP_SIZE);\n\tconst svgHeight = GRID_HEIGHT * (CELL_SIZE + GAP_SIZE) + 20;\n\tlet svg = `<svg width=\"${svgWidth}\" height=\"${svgHeight}\" xmlns=\"http://www.w3.org/2000/svg\">`;\n\tsvg += `<desc>Generated with https://github.com/abozanona/pacman-contribution-graph on ${new Date()}</desc>`;\n\tsvg += `<rect width=\"100%\" height=\"100%\" fill=\"${Utils.getCurrentTheme(store).gridBackground}\"/>`;\n\n\tsvg += generateGhostsPredefinition();\n\n\t// Month labels\n\tlet lastMonth = '';\n\tfor (let y = 0; y < GRID_WIDTH; y++) {\n\t\tif (store.monthLabels[y] !== lastMonth) {\n\t\t\tconst xPos = y * (CELL_SIZE + GAP_SIZE) + CELL_SIZE / 2;\n\t\t\tsvg += `<text x=\"${xPos}\" y=\"10\" text-anchor=\"middle\" font-size=\"10\" fill=\"${Utils.getCurrentTheme(store).textColor}\">${store.monthLabels[y]}</text>`;\n\t\t\tlastMonth = store.monthLabels[y];\n\t\t}\n\t}\n\n\t// Grid\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y < GRID_HEIGHT; y++) {\n\t\t\tconst cellX = x * (CELL_SIZE + GAP_SIZE);\n\t\t\tconst cellY = y * (CELL_SIZE + GAP_SIZE) + 15;\n\t\t\tconst cellColorAnimation = generateChangingValuesAnimation(store, generateCellColorValues(store, x, y));\n\t\t\tsvg += `<rect id=\"c-${x}-${y}\" x=\"${cellX}\" y=\"${cellY}\" width=\"${CELL_SIZE}\" height=\"${CELL_SIZE}\" rx=\"5\" fill=\"${Utils.getCurrentTheme(store).emptyContributionBoxColor}\">\n <animate attributeName=\"fill\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\" \n values=\"${cellColorAnimation.values}\" \n keyTimes=\"${cellColorAnimation.keyTimes}\"/>\n </rect>`;\n\t\t}\n\t}\n\n\t// Walls\n\tfor (let x = 0; x < GRID_WIDTH; x++) {\n\t\tfor (let y = 0; y < GRID_HEIGHT; y++) {\n\t\t\tif (WALLS.horizontal[x][y].active) {\n\t\t\t\tsvg += `<rect id=\"wh-${x}-${y}\" x=\"${x * (CELL_SIZE + GAP_SIZE) - GAP_SIZE}\" y=\"${y * (CELL_SIZE + GAP_SIZE) - GAP_SIZE + 15}\" width=\"${CELL_SIZE + GAP_SIZE}\" height=\"${GAP_SIZE}\" rx=\"5\" fill=\"${Utils.getCurrentTheme(store).wallColor}\"></rect>`;\n\t\t\t}\n\t\t\tif (WALLS.vertical[x][y].active) {\n\t\t\t\tsvg += `<rect id=\"wv-${x}-${y}\" x=\"${x * (CELL_SIZE + GAP_SIZE) - GAP_SIZE}\" y=\"${y * (CELL_SIZE + GAP_SIZE) - GAP_SIZE + 15}\" width=\"${GAP_SIZE}\" height=\"${CELL_SIZE + GAP_SIZE}\" rx=\"5\" fill=\"${Utils.getCurrentTheme(store).wallColor}\"></rect>`;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Pacman\n\tconst pacmanColorAnimation = generateChangingValuesAnimation(store, generatePacManColors(store));\n\tconst pacmanPositionAnimation = generateChangingValuesAnimation(store, generatePacManPositions(store));\n\tconst pacmanRotationAnimation = generateChangingValuesAnimation(store, generatePacManRotations(store));\n\tsvg += `<path id=\"pacman\" d=\"${generatePacManPath(0.55)}\"\n >\n\t\t<animate attributeName=\"fill\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${pacmanColorAnimation.keyTimes}\"\n values=\"${pacmanColorAnimation.values}\"/>\n <animateTransform attributeName=\"transform\" type=\"translate\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${pacmanPositionAnimation.keyTimes}\"\n values=\"${pacmanPositionAnimation.values}\"\n additive=\"sum\"/>\n <animateTransform attributeName=\"transform\" type=\"rotate\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${pacmanRotationAnimation.keyTimes}\"\n values=\"${pacmanRotationAnimation.values}\"\n additive=\"sum\"/>\n <animate attributeName=\"d\" dur=\"0.5s\" repeatCount=\"indefinite\"\n values=\"${generatePacManPath(0.55)};${generatePacManPath(0.05)};${generatePacManPath(0.55)}\"/>\n </path>`;\n\n\t// Ghosts\n\tstore.ghosts.forEach((ghost, index) => {\n\t\tconst ghostPositionAnimation = generateChangingValuesAnimation(store, generateGhostPositions(store, index));\n\t\tconst ghostColorAnimation = generateChangingValuesAnimation(store, generateGhostColors(store, index));\n\t\tsvg += `<use id=\"ghost${index}\" width=\"${CELL_SIZE}\" height=\"${CELL_SIZE}\" href=\"#ghost-${ghost.name}\">\n <animateTransform attributeName=\"transform\" type=\"translate\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${ghostPositionAnimation.keyTimes}\"\n values=\"${ghostPositionAnimation.values}\"/>\n <animate attributeName=\"href\" dur=\"${store.gameHistory.length * DELTA_TIME}ms\" repeatCount=\"indefinite\"\n keyTimes=\"${ghostColorAnimation.keyTimes}\"\n values=\"${ghostColorAnimation.values}\"/>\n </use>`;\n\t});\n\n\tsvg += '</svg>';\n\treturn svg;\n};\n\nconst generatePacManPath = (mouthAngle: number) => {\n\tconst radius = CELL_SIZE / 2;\n\tconst startAngle = mouthAngle;\n\tconst endAngle = 2 * Math.PI - mouthAngle;\n\n\treturn `M ${radius},${radius}\n L ${radius + radius * Math.cos(startAngle)},${radius + radius * Math.sin(startAngle)}\n A ${radius},${radius} 0 1,1 ${radius + radius * Math.cos(endAngle)},${radius + radius * Math.sin(endAngle)}\n Z`;\n};\n\nconst generatePacManPositions = (store: StoreType): string[] => {\n\treturn store.gameHistory.map((state) => {\n\t\tconst x = state.pacman.x * (CELL_SIZE + GAP_SIZE);\n\t\tconst y = state.pacman.y * (CELL_SIZE + GAP_SIZE) + 15;\n\t\treturn `${x},${y}`;\n\t});\n};\n\nconst generatePacManRotations = (store: StoreType): string[] => {\n\tconst pivit = CELL_SIZE / 2;\n\treturn store.gameHistory.map((state) => {\n\t\tswitch (state.pacman.direction) {\n\t\t\tcase 'right':\n\t\t\t\treturn `0 ${pivit} ${pivit}`;\n\t\t\tcase 'left':\n\t\t\t\treturn `180 ${pivit} ${pivit}`;\n\t\t\tcase 'up':\n\t\t\t\treturn `270 ${pivit} ${pivit}`;\n\t\t\tcase 'down':\n\t\t\t\treturn `90 ${pivit} ${pivit}`;\n\t\t\tdefault:\n\t\t\t\treturn `0 ${pivit} ${pivit}`;\n\t\t}\n\t});\n};\n\nconst generatePacManColors = (store: StoreType): string[] => {\n\treturn store.gameHistory.map((state) => {\n\t\tif (state.pacman.deadRemainingDuration) {\n\t\t\treturn PACMAN_COLOR_DEAD;\n\t\t} else if (state.pacman.powerupRemainingDuration) {\n\t\t\treturn PACMAN_COLOR_POWERUP;\n\t\t} else {\n\t\t\treturn PACMAN_COLOR;\n\t\t}\n\t});\n};\n\nconst generateCellColorValues = (store: StoreType, x: number, y: number): string[] => {\n\treturn store.gameHistory.map((state) => {\n\t\tconst intensity = state.grid[x][y];\n\t\tif (intensity > 0) {\n\t\t\tconst adjustedIntensity = intensity < 0.2 ? 0.3 : intensity;\n\t\t\treturn Utils.hexToHexAlpha(Utils.getCurrentTheme(store).contributionBoxColor, adjustedIntensity);\n\t\t} else {\n\t\t\treturn Utils.getCurrentTheme(store).emptyContributionBoxColor;\n\t\t}\n\t});\n};\n\nconst generateGhostPositions = (store: StoreType, ghostIndex: number): string[] => {\n\treturn store.gameHistory.map((state) => {\n\t\tconst ghost = state.ghosts[ghostIndex];\n\t\tconst x = ghost.x * (CELL_SIZE + GAP_SIZE);\n\t\tconst y = ghost.y * (CELL_SIZE + GAP_SIZE) + 15;\n\t\treturn `${x},${y}`;\n\t});\n};\n\nconst generateGhostColors = (store: StoreType, ghostIndex: number): string[] => {\n\treturn store.gameHistory.map((state) => {\n\t\tconst ghost = state.ghosts[ghostIndex];\n\t\treturn '#' + (ghost.scared ? ghostShort('scared') : ghostShort(ghost.name));\n\t});\n};\n\nconst generateGhostsPredefinition = () => {\n\treturn `<defs>\n\t\t<symbol id=\"${ghostShort('blinky')}\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['blinky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"${ghostShort('clyde')}\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['clyde'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"${ghostShort('inky')}\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['inky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"${ghostShort('pinky')}\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['pinky'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t\t<symbol id=\"${ghostShort('scared')}\" viewBox=\"0 0 100 100\">\n <image href=\"${GHOSTS['scared'].imgDate}\" width=\"100\" height=\"100\"/>\n\t\t</symbol>\n\t</defs>`;\n};\n\nconst ghostShort = (ghostName: string): string => {\n\tswitch (ghostName) {\n\t\tcase 'blinky':\n\t\t\treturn 'gb';\n\t\tcase 'clyde':\n\t\t\treturn 'gc';\n\t\tcase 'inky':\n\t\t\treturn 'gi';\n\t\tcase 'pinky':\n\t\t\treturn 'gp';\n\t\tcase 'scared':\n\t\t\treturn 'gs';\n\t\tdefault:\n\t\t\treturn ghostName;\n\t}\n};\n\nconst generateChangingValuesAnimation = (store: StoreType, changingValues: string[]): AnimationData => {\n\tif (store.gameHistory.length !== changingValues.length) {\n\t\tthrow new Error('The length of changingValues must match the length of gameHistory');\n\t}\n\n\tconst totalFrames = store.gameHistory.length;\n\tlet keyTimes: number[] = [];\n\tlet values: string[] = [];\n\tlet lastValue: string | null = null;\n\tlet lastIndex: number | null = null;\n\n\tchangingValues.forEach((currentValue, index) => {\n\t\tif (currentValue !== lastValue) {\n\t\t\tif (lastValue !== null && lastIndex !== null && index - 1 !== lastIndex) {\n\t\t\t\t// Add a keyframe right before the value change\n\t\t\t\tkeyTimes.push(Number(((index - 0.000001) / (totalFrames - 1)).toFixed(6)));\n\t\t\t\tvalues.push(lastValue);\n\t\t\t}\n\t\t\t// Add the new value keyframe\n\t\t\tkeyTimes.push(Number((index / (totalFrames - 1)).toFixed(6)));\n\t\t\tvalues.push(currentValue);\n\t\t\tlastValue = currentValue;\n\t\t\tlastIndex = index;\n\t\t}\n\t});\n\n\t// Ensure the last frame is always included\n\tif (keyTimes[keyTimes.length - 1] !== 1) {\n\t\tkeyTimes.push(1);\n\t\tvalues.push(lastValue!);\n\t}\n\n\treturn {\n\t\tkeyTimes: keyTimes.join(';'),\n\t\tvalues: values.join(';')\n\t};\n};\n\nexport const SVG = {\n\tgenerateAnimatedSVG\n};\n","import { GAME_THEMES } from './constants';\nimport type { Contribution, GameTheme, StoreType } from './types';\n\nconst getGitlabContribution = async (store: StoreType): Promise<Contribution[]> => {\n\t// const response = await fetch(`https://gitlab.com/users/${username}/calendar.json`);\n\tconst response = await fetch(\n\t\t`https://v0-new-project-q1hhrdodoye-abozanona-gmailcoms-projects.vercel.app/api/contributions?username=${store.config.username}`\n\t);\n\tconst contributionsList = await response.json();\n\treturn Object.entries(contributionsList).map(([date, count]) => ({\n\t\tdate: new Date(date),\n\t\tcount: Number(count)\n\t}));\n};\n\nconst getGithubContribution = async (store: StoreType): Promise<Contribution[]> => {\n\tconst commits = [];\n\tlet isComplete: boolean = false;\n\tlet page = 1;\n\t// TODO: Consider using GraphQL endpoint when user has an access token?\n\tdo {\n\t\ttry {\n\t\t\tconst headers: HeadersInit = {};\n\t\t\tif (store.config.githubSettings?.accessToken) {\n\t\t\t\theaders['Authorization'] = 'Bearer ' + store.config.githubSettings.accessToken;\n\t\t\t}\n\t\t\tconst response = await fetch(\n\t\t\t\t`https://api.github.com/search/commits?q=author:${store.config.username}&sort=author-date&order=desc&page=${page}&per_page=1000`,\n\t\t\t\t{\n\t\t\t\t\theaders\n\t\t\t\t}\n\t\t\t);\n\t\t\tconst contributionsList = await response.json();\n\t\t\tisComplete = contributionsList.items.length === 0;\n\t\t\tcommits.push(...contributionsList.items);\n\t\t\tpage++;\n\t\t} catch (ex) {\n\t\t\tisComplete = true;\n\t\t}\n\t} while (!isComplete);\n\treturn Array.from(\n\t\tcommits\n\t\t\t.reduce((map: any, item: any) => {\n\t\t\t\tconst dateString = item.commit.committer.date.split('T')[0];\n\t\t\t\tconst date = new Date(dateString);\n\t\t\t\tconst count = (map.get(dateString) || { count: 0 }).count + 1;\n\t\t\t\treturn map.set(dateString, { date, count });\n\t\t\t}, new Map())\n\t\t\t.values()\n\t);\n};\n\nconst getCurrentTheme = (store: StoreType): GameTheme => {\n\treturn GAME_THEMES[store.config.gameTheme] ?? GAME_THEMES['github'];\n};\n\nconst hexToRGBA = (hex: string, alpha: number): string => {\n\tconst r = parseInt(hex.slice(1, 3), 16);\n\tconst g = parseInt(hex.slice(3, 5), 16);\n\tconst b = parseInt(hex.slice(5, 7), 16);\n\treturn `rgba(${r}, ${g}, ${b}, ${alpha})`;\n};\n\nconst hexToHexAlpha = (hex: string, alpha: number): string => {\n\thex = hex.replace(/^#/, '');\n\tif (hex.length === 3) {\n\t\thex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n\t}\n\tconst alphaHex = Math.round(alpha * 255)\n\t\t.toString(16)\n\t\t.padStart(2, '0');\n\treturn `#${hex}${alphaHex}`;\n};\n\nexport const Utils = {\n\tgetGitlabContribution,\n\tgetGithubContribution,\n\tgetCurrentTheme,\n\thexToRGBA,\n\thexToHexAlpha\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Game } from './game';\nimport { Grid } from './grid';\nimport { Store } from './store';\nimport { Config, StoreType } from './types';\nimport { Utils } from './utils';\n\nexport class PacmanRenderer {\n\tstore: StoreType;\n\tconf: Config;\n\n\tconstructor(conf: Config) {\n\t\tthis.store = structuredClone(Store);\n\t\tthis.conf = { ...conf };\n\t\tGrid.buildWalls();\n\t}\n\n\tpublic async start() {\n\t\tconst defaultConfing: Config = {\n\t\t\tplatform: 'github',\n\t\t\tusername: '',\n\t\t\tcanvas: undefined as unknown as HTMLCanvasElement,\n\t\t\toutputFormat: 'svg',\n\t\t\tsvgCallback: (_: string) => {},\n\t\t\tgameOverCallback: () => () => {},\n\t\t\tgameTheme: 'github',\n\t\t\tgameSpeed: 1,\n\t\t\tenableSounds: false,\n\t\t\tpointsIncreasedCallback: (_: number) => {}\n\t\t};\n\t\tthis.store.config = { ...defaultConfing, ...this.conf };\n\n\t\tswitch (this.conf.platform) {\n\t\t\tcase 'gitlab':\n\t\t\t\tthis.store.contributions = await Utils.getGitlabContribution(this.store);\n\t\t\t\tbreak;\n\n\t\t\tcase 'github':\n\t\t\t\tthis.store.contributions = await Utils.getGithubContribution(this.store);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tGame.startGame(this.store);\n\t}\n\n\tpublic stop() {\n\t\tGame.stopGame(this.store);\n\t}\n}\n"],"names":[],"sourceRoot":""}
|