From 145e3cca321c2d30c07044c7b0700b0d5714c380 Mon Sep 17 00:00:00 2001 From: Vitalij Ryndin Date: Wed, 16 Oct 2024 01:38:10 +0800 Subject: [PATCH] add freak games --- apps/frontend/src/assets/recipes.json | 7 +++++ apps/frontend/src/assets/sprites.ts | 2 ++ .../src/assets/sprites/freak_games.webp | Bin 0 -> 7856 bytes .../frontend/src/components/alchemy-board.vue | 28 ++++++++++-------- apps/frontend/src/stores/use-sounds.ts | 5 ++++ apps/frontend/vite.config.ts | 1 - package.json | 3 +- 7 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 apps/frontend/src/assets/sprites/freak_games.webp 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 0000000000000000000000000000000000000000..3ca12e70b6d310547d1830e52058b5e3e3e5a2bc GIT binary patch literal 7856 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 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"