Add game join UI and OnlineGame scaffold
Rename JoinMenu to GameJoinMenu and add a JoinGameObject model + OTP input for entering a 6-digit game code. Introduce a new JoinGameObject interface file. Update OnlineMode.vue to import and render GameJoinMenu and GameEndedMenu, add refs for joiningModel, game, gameField, currentSelectionIndex and gameEndedInformation, wire create/ join handlers (stubbed) and the main game view (Field and InfoField). Refactor LocalGame to OnlineGame, export it as default and add a stubbed drop method; adjust import path formatting. Several functions remain as stubs to be implemented in follow-up commits.
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
<script setup lang="ts">
|
||||
import CreateOrJoinMenu from '@/components/CreateOrJoinMenu.vue';
|
||||
import GameCreationMenu from '@/components/GameCreationMenu.vue';
|
||||
import GameEndedMenu from '@/components/GameEndedMenu.vue';
|
||||
import GameJoinMenu from '@/components/GameJoinMenu.vue';
|
||||
import type { GameSettings } from '@/scripts/interfaces/GameSettings';
|
||||
import type JoinGameObject from '@/scripts/interfaces/JoinGameObject';
|
||||
import OnlineGame from '@/scripts/logic/onlineMode/OnlineGame';
|
||||
import type { GameEnded } from '@/scripts/logic/signalR/GameConnection';
|
||||
import { ref } from 'vue';
|
||||
|
||||
enum CurrentState {
|
||||
@@ -18,7 +23,19 @@ let settings = ref<GameSettings>({
|
||||
fieldSize: { x: 7, y: 6 },
|
||||
});
|
||||
|
||||
let joiningModel = ref<JoinGameObject>({
|
||||
failed: false,
|
||||
});
|
||||
|
||||
var currentState = ref<CurrentState>(CurrentState.CreateOrJoinSelection);
|
||||
const game = ref<OnlineGame>(new OnlineGame(settings.value));
|
||||
const gameField = ref<number[][]>([]);
|
||||
const currentSelectionIndex = ref<number | null>(null);
|
||||
const gameEndedInformation = ref<GameEnded | null>(null);
|
||||
|
||||
async function createGame() {}
|
||||
|
||||
async function tryToJoin() {}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -30,9 +47,32 @@ var currentState = ref<CurrentState>(CurrentState.CreateOrJoinSelection);
|
||||
|
||||
<GameCreationMenu
|
||||
v-model:settings="settings"
|
||||
@create-game="console.log('create game')"
|
||||
@create-game="createGame()"
|
||||
v-if="currentState === CurrentState.CreatingGame"
|
||||
/>
|
||||
|
||||
<GameJoinMenu
|
||||
:joinGameObject="joiningModel"
|
||||
v-if="currentState === CurrentState.JoiningGame"
|
||||
@join="tryToJoin()"
|
||||
/>
|
||||
|
||||
<GameEndedMenu
|
||||
:game-ended-information="gameEndedInformation"
|
||||
v-else-if="currentState === CurrentState.EndScreen"
|
||||
></GameEndedMenu>
|
||||
|
||||
<div id="game" v-else>
|
||||
<div class="game-content">
|
||||
<Field
|
||||
:game-state="gameField"
|
||||
v-model:current-selection-index="currentSelectionIndex"
|
||||
@click-on-game-field="game.drop(currentSelectionIndex ?? 1)"
|
||||
/>
|
||||
|
||||
<InfoField :msg="game.currentDescription"></InfoField>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
|
||||
Reference in New Issue
Block a user