traintrape-moi/client/utils/features/game/gameSlice.ts

66 lines
1.7 KiB
TypeScript
Raw Normal View History

2024-12-11 16:26:36 +00:00
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import { ChallengeAction } from '../challengeActions/challengeActionsSlice'
2024-12-11 16:26:36 +00:00
export interface RunPayload {
id: number
gameId: number
runnerId: number
start: string
end: string | null
}
export interface GamePayload {
id: number
started: boolean
currentRunId: number | null
currentRun: RunPayload | null
}
2024-12-11 16:26:36 +00:00
export interface GameState {
playerId: number | null
gameStarted: boolean
money: number
currentRunner: boolean
currentChallengeId: number | null
chaseFreeTime: number | null // date
penaltyStart: number | null // date
penaltyEnd: number | null //date
2024-12-11 16:26:36 +00:00
}
const initialState: GameState = {
playerId: null,
gameStarted: false,
money: 0,
currentRunner: false,
currentChallengeId: null,
2024-12-11 16:26:36 +00:00
chaseFreeTime: null,
penaltyStart: null,
penaltyEnd: null,
}
export const gameSlice = createSlice({
name: 'game',
initialState: initialState,
reducers: {
setPlayerId: (state, action: PayloadAction<number>) => {
state.playerId = action.payload
},
updateMoney: (state, action: PayloadAction<number>) => {
state.money = action.payload
},
updateGameState: (state, action: PayloadAction<GamePayload>) => {
const game: GamePayload = action.payload
state.gameStarted = game.started
state.currentRunner = state.playerId === game.currentRun?.runnerId
if (state.currentRunner)
state.chaseFreeTime = null
else if (game.currentRun)
state.chaseFreeTime = new Date(game.currentRun?.start).getTime() + 45 * 60 * 1000
}
2024-12-11 16:26:36 +00:00
},
})
export const { setPlayerId, updateMoney, updateGameState } = gameSlice.actions
2024-12-11 16:26:36 +00:00
export default gameSlice.reducer