diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 6779ce6..d6fabcc 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -13,6 +13,8 @@ "generate": "Release the fish", "ready": "Ready", "cancel": "Cancel", + "copyLink": "Copy join link", + "joinGame": "Join game", "mainScreen": "Go to main screen", "instruction": "How to play", "rules": "Game rules" diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 23ad8b0..011d86a 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -13,6 +13,8 @@ "generate": "Запустить рыбу", "ready": "Готов", "cancel": "Отмена", + "copyLink": "Копировать ссылку для подключения", + "joinGame": "Присоединится к игре", "mainScreen": "На главный экран", "instruction": "Как играть", "rules": "Правила" diff --git a/src/stores/game.js b/src/stores/game.js index 58762ea..2d04aa0 100644 --- a/src/stores/game.js +++ b/src/stores/game.js @@ -124,7 +124,11 @@ export const useGameStore = defineStore("game", { ready() { const board = new boardConstructor(this.boardSize, this.getAvailableItems()) if (!board.isAllItemsReady(this.player.items)) return - this.player.status = "ready" + if (this.player.status == "ready") { + this.player.status = "lobby" + } else { + this.player.status = "ready" + } if (this.mode == "single") { useBotStore().generate() return diff --git a/src/stores/websocket.js b/src/stores/websocket.js index 3064f42..68e2881 100644 --- a/src/stores/websocket.js +++ b/src/stores/websocket.js @@ -46,7 +46,7 @@ export const useWebsocketStore = defineStore("websocket", { break case 'join': console.log('Recieve join from ' + data.from) - if (game.owner != player.id) return // Only owner ccan process join + if (game.owner != player.id) return // Only owner can process join game.join(data.from) break case 'welcome': diff --git a/src/views/JoinView.vue b/src/views/JoinView.vue index 8e495a5..dca503a 100644 --- a/src/views/JoinView.vue +++ b/src/views/JoinView.vue @@ -3,23 +3,25 @@ import { useBotStore } from '@/stores/bot'; import { useGameStore } from '@/stores/game'; import { usePlayerStore } from '@/stores/player'; import { useWebsocketStore } from '@/stores/websocket'; -import { useRoute } from 'vue-router' +import { useRoute, useRouter } from 'vue-router' - - -const route = useRoute() const player = usePlayerStore() const game = useGameStore() const bot = useBotStore() - -game.$reset() -bot.$reset() -localStorage.removeItem('game') -localStorage.removeItem('bot') - +const route = useRoute() +const router = useRouter() const websocket = useWebsocketStore() -if (player.id == null) player.initPlayer() -websocket.init(route.params.gameId) + +if (game.owner == player.id || game.player.id == player.id) { + router.replace({ name: 'lobby', params: { gameId: game.id } }) +} else { + game.$reset() + bot.$reset() + localStorage.removeItem('game') + localStorage.removeItem('bot') + if (player.id == null) player.initPlayer() + websocket.init(route.params.gameId) +} const join = () => { websocket.send({ @@ -31,7 +33,7 @@ const join = () => { - {{ $t("button.startNewGame") }} + {{ $t("button.joinGame") }} diff --git a/src/views/LobbyView.vue b/src/views/LobbyView.vue index 79c6a33..ae1e806 100644 --- a/src/views/LobbyView.vue +++ b/src/views/LobbyView.vue @@ -13,7 +13,6 @@ if (game.createdAt == null) { router.replace({name:'index'}) } - const board = new boardConstructor(game.boardSize, game.getAvailableItems()) //Board cells in browser MB not needed const playerView = ref() @@ -27,8 +26,14 @@ const generate = () => { //Set ready status for player const ready = () => { if (game.mode == 'single') useBotStore().generate() - if (board.isAllItemsReady(game.player.items)) - game.ready() + if (board.isAllItemsReady(game.player.items)) game.ready() +} +const copyJoinLink = async () => { + try { + await navigator.clipboard.writeText(window.location.origin + '/join/' + game.id); + } catch (err) { + console.error('Failed to copy: ', err); + } } const drawCell = (row, col) => { let classes = '' @@ -63,7 +68,8 @@ onBeforeUnmount(() => { - {{ $t("button.generate") }} + {{ $t("button.generate") }} + {{ $t("button.copyLink") }} {{ game.player.status == 'ready' ? $t("button.cancel") : $t("button.ready") }}