59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import { ref } from 'vue'
|
|
import { defineStore } from 'pinia'
|
|
import type { GameSessionState, GameState, Movement, PlayerState } from '@/common/interfaces'
|
|
|
|
export const useGameStore = defineStore('game', () => {
|
|
const sessionState = ref<GameSessionState | undefined>(undefined)
|
|
const gameState = ref<GameState | undefined>(undefined)
|
|
const playerState = ref<PlayerState | undefined>(undefined)
|
|
const canMakeMove = ref(false)
|
|
const canSelectTile = ref(false)
|
|
const moveToMake = ref<Movement | undefined>(undefined)
|
|
const incomingFreeEnds = ref<[number, number] | undefined>(undefined)
|
|
|
|
function updateSessionState(newState: GameSessionState) {
|
|
sessionState.value = newState
|
|
}
|
|
|
|
function updateGameState(newState: GameState) {
|
|
gameState.value = newState
|
|
}
|
|
|
|
function updatePlayerState(newState: PlayerState) {
|
|
playerState.value = newState
|
|
}
|
|
|
|
function updateCanMakeMove(value: boolean) {
|
|
canMakeMove.value = value
|
|
}
|
|
|
|
function setMoveToMake(move: Movement) {
|
|
moveToMake.value = move
|
|
}
|
|
|
|
function updateCanSelectTile(value: boolean) {
|
|
canSelectTile.value = value
|
|
}
|
|
|
|
function setIncomingFreeEnds(freeEnds: [number, number]) {
|
|
incomingFreeEnds.value = freeEnds
|
|
}
|
|
|
|
return {
|
|
sessionState,
|
|
gameState,
|
|
playerState,
|
|
canMakeMove,
|
|
moveToMake,
|
|
incomingFreeEnds,
|
|
canSelectTile,
|
|
updateSessionState,
|
|
updateGameState,
|
|
updatePlayerState,
|
|
updateCanMakeMove,
|
|
setMoveToMake,
|
|
setIncomingFreeEnds,
|
|
updateCanSelectTile
|
|
}
|
|
})
|