diff --git a/apps/frontend/src/assets/recipes.json b/apps/frontend/src/assets/recipes.json index de42056..0a70a84 100644 --- a/apps/frontend/src/assets/recipes.json +++ b/apps/frontend/src/assets/recipes.json @@ -1514,6 +1514,13 @@ "description": "Млекопитающее, наиболее близкое к человеку по строению тела.", "recipes": [["human", "wool"]] }, + { + "id": "freak_games", + "name": "Freak Games", + "description": "Причудливые игры.", + "recipes": [["monkey", "hamster"]], + "ended": true + }, { "id": "dung", "name": "Навоз", diff --git a/apps/frontend/src/assets/sprites.ts b/apps/frontend/src/assets/sprites.ts index 7845fde..30e2fa5 100644 --- a/apps/frontend/src/assets/sprites.ts +++ b/apps/frontend/src/assets/sprites.ts @@ -168,6 +168,7 @@ import forest from './sprites/forest.webp' import fossil from './sprites/fossil.webp' import france from './sprites/france.webp' import frankenstein from './sprites/frankenstein.webp' +import freak_games from './sprites/freak_games.webp' import french_fries from './sprites/french_fries.webp' import frog from './sprites/frog.webp' import fruit from './sprites/fruit.webp' @@ -658,6 +659,7 @@ export const sprites: Record = { fossil, france, frankenstein, + freak_games, french_fries, frog, fruit, diff --git a/apps/frontend/src/assets/sprites/freak_games.webp b/apps/frontend/src/assets/sprites/freak_games.webp new file mode 100644 index 0000000..3ca12e7 Binary files /dev/null and b/apps/frontend/src/assets/sprites/freak_games.webp differ diff --git a/apps/frontend/src/components/alchemy-board.vue b/apps/frontend/src/components/alchemy-board.vue index f9dec16..db330ff 100644 --- a/apps/frontend/src/components/alchemy-board.vue +++ b/apps/frontend/src/components/alchemy-board.vue @@ -5,13 +5,14 @@ import { useElementBounding, useEventListener } from '@vueuse/core' import { useBoard } from '@/stores/use-board.js' import { useGame } from '@/stores/use-game.js' import { useOpenedElements } from '@/stores/use-opened-elements.js' -import { API_URL } from '@/constants.js' import recipes from '@/assets/recipes.json' +import { useSounds } from '@/stores/use-sounds' import type { AlchemyElement, AlchemyElementOnBoard, Position } from '@/types.js' const game = useGame() const openedElements = useOpenedElements() +const sounds = useSounds() const board = useBoard() const boardRef = ref() const boardBounding = useElementBounding(boardRef) @@ -41,20 +42,23 @@ function checkCollision(boardElement: AlchemyElementOnBoard): void { boardElement.position.y < boardItem.position.y + board.elementSize.height && boardElement.position.y + board.elementSize.height > boardItem.position.y ) { - checkRecipe([boardElement.id, boardItem.id]) - .then((element) => { - if (!element) return - removeElement([boardItem, boardElement]) - сreateElement(boardItem, element) - openedElements.addElement(element) - }) + const element = checkRecipe([boardElement.id, boardItem.id]) + if (!element) return + + if (element.id === 'freak_games') { + sounds.freakGamesAudio.play() + } + + removeElement([boardItem, boardElement]) + createElement(boardItem, element) + openedElements.addElement(element) } } } -async function checkRecipe( +function checkRecipe( recipe: [string, string] -): Promise { +): AlchemyElementOnBoard | undefined { for (const element of recipes) { if (element.recipes.length === 0) continue for (const elementRecipe of element.recipes) { @@ -83,7 +87,7 @@ function removeElement(boardElement: AlchemyElementOnBoard[]): void { }) } -function сreateElement( +function createElement( boardElement: AlchemyElementOnBoard, newElement: AlchemyElement, isCopy = false @@ -121,7 +125,7 @@ useEventListener(boardRef, 'dblclick', (event) => { v-bind:alchemy-element="boardElement" v-bind:board-bounding="boardBounding" v-on:position="updatePosition(boardElement, $event)" - v-on:update:clone-element="сreateElement(boardElement, $event, true)" + v-on:update:clone-element="createElement(boardElement, $event, true)" v-on:update:remove-element="removeElement([$event, boardElement])" /> diff --git a/apps/frontend/src/stores/use-sounds.ts b/apps/frontend/src/stores/use-sounds.ts index 0f6b370..86ddd8b 100644 --- a/apps/frontend/src/stores/use-sounds.ts +++ b/apps/frontend/src/stores/use-sounds.ts @@ -1,7 +1,11 @@ import { defineStore } from 'pinia' import { sounds } from '@/assets/sounds' +import freakGames from '@/assets/freak-games.mp3' export const useSounds = defineStore('sounds', () => { + const freakGamesAudio = new Audio(freakGames) + freakGamesAudio.volume = 1 + const createAudio = new Audio(sounds.create) createAudio.volume = 0.5 @@ -12,6 +16,7 @@ export const useSounds = defineStore('sounds', () => { takingAudio.volume = 0.7 return { + freakGamesAudio, createAudio, createNewAudio, takingAudio diff --git a/apps/frontend/vite.config.ts b/apps/frontend/vite.config.ts index cbaeaf2..9cd182d 100644 --- a/apps/frontend/vite.config.ts +++ b/apps/frontend/vite.config.ts @@ -54,7 +54,6 @@ const configurationByType: Record voi export default defineConfig({ server: { - port: 3001, proxy: { '/api': { target: 'http://127.0.0.1:3000/api', diff --git a/package.json b/package.json index b1eedf4..0d5fb74 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "version": "0.0.0", "private": true, "scripts": { - "dev": "pnpm --filter=./apps/* run dev", + "dev": "pnpm --filter=./apps/frontend run dev", + "_dev": "pnpm --filter=./apps/* run dev", "build": "pnpm --filter=./apps/* run build", "build:frontend": "pnpm --filter=./apps/frontend run build", "lint": "pnpm --filter=./apps/* run lint"