Structure de données jeu client

This commit is contained in:
Emmy D'Anello 2024-12-11 17:26:36 +01:00
parent d1adba04da
commit 7aa9dde5a9
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
14 changed files with 238 additions and 28 deletions

View File

@ -1,4 +1,4 @@
import { AuthState } from "@/utils/features/location/authSlice" import { AuthState } from "@/utils/features/auth/authSlice"
import { useMutation } from "@tanstack/react-query" import { useMutation } from "@tanstack/react-query"
import { LocationObject } from "expo-location" import { LocationObject } from "expo-location"

View File

@ -1,4 +1,4 @@
import { AuthPayload } from "@/utils/features/location/authSlice" import { AuthPayload } from "@/utils/features/auth/authSlice"
import { useMutation } from "@tanstack/react-query" import { useMutation } from "@tanstack/react-query"
type ErrorResponse = { type ErrorResponse = {

View File

@ -1,5 +1,5 @@
import { useAppDispatch, useAppSelector } from "./useStore" import { useAppDispatch, useAppSelector } from "./useStore"
import { AuthPayload, login, logout } from "@/utils/features/location/authSlice" import { AuthPayload, login, logout } from "@/utils/features/auth/authSlice"
export const useAuth = () => useAppSelector((state) => state.auth) export const useAuth = () => useAppSelector((state) => state.auth)
export const useAuthLogin = () => { export const useAuthLogin = () => {

View File

@ -0,0 +1,3 @@
import { useAppSelector } from "./useStore"
export const useChallengeActions = () => useAppSelector((state) => state.challengeActions)

View File

@ -0,0 +1,3 @@
import { useAppSelector } from "./useStore"
export const useTrain = () => useAppSelector((state) => state.challenges)

12
client/hooks/useGame.ts Normal file
View File

@ -0,0 +1,12 @@
import { useAppDispatch, useAppSelector } from "./useStore"
import { setPlayerId, updateMoney } from "@/utils/features/game/gameSlice"
export const useGame = () => useAppSelector((state) => state.game)
export const useSetPlayerId = () => {
const dispath = useAppDispatch()
return (playerId: number) => dispath(setPlayerId(playerId))
}
export const useUpdateMoney = () => {
const dispatch = useAppDispatch()
return (money: number) => dispatch(updateMoney(money))
}

3
client/hooks/useTrain.ts Normal file
View File

@ -0,0 +1,3 @@
import { useAppSelector } from "./useStore"
export const useTrain = () => useAppSelector((state) => state.train)

View File

@ -17,27 +17,3 @@ export function setItem(key: string, value: string): void {
export async function setItemAsync(key: string, value: string): Promise<void> { export async function setItemAsync(key: string, value: string): Promise<void> {
localStorage.setItem(key, value) localStorage.setItem(key, value)
} }
/**
import AsyncStorage from '@react-native-async-storage/async-storage'
export async function deleteItemAsync(key: string): Promise<void> {
return AsyncStorage.removeItem(key)
}
export function getItem(key: string): string | null {
return Promise.apply(AsyncStorage.getItem(key))
}
export async function getItemAsync(key: string): Promise<string | null> {
return AsyncStorage.getItem(key)
}
export function setItem(key: string, value: string): void {
AsyncStorage.setItem(key, value)
}
export async function setItemAsync(key: string, value: string): Promise<void> {
return AsyncStorage.setItem(key, value)
}
*/

View File

@ -0,0 +1,33 @@
import { createSlice } from '@reduxjs/toolkit'
export interface ChallengeAction {
id: number
challengeId: number
title: string,
description: string,
reward: number,
success: boolean,
start: Date,
end: Date | null,
penaltyStart: Date | null,
penaltyEnd: Date | null,
}
export interface ActionsState {
challengeActions: ChallengeAction[]
}
const initialState: ActionsState = {
challengeActions: []
}
export const challengeActionsSlice = createSlice({
name: 'challengeActions',
initialState: initialState,
reducers: {
},
})
export const { } = challengeActionsSlice.actions
export default challengeActionsSlice.reducer

View File

@ -0,0 +1,27 @@
import { createSlice } from '@reduxjs/toolkit'
export interface Challenge {
id: number
title: string,
description: string,
reward: number,
}
export interface ChallengesState {
challenges: Challenge[]
}
const initialState: ChallengesState = {
challenges: []
}
export const challengesSlice = createSlice({
name: 'challenges',
initialState: initialState,
reducers: {
},
})
export const { } = challengesSlice.actions
export default challengesSlice.reducer

View File

@ -0,0 +1,38 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
export interface GameState {
playerId: number | null
gameStarted: boolean
money: number
currentRunner: boolean
chaseFreeTime: Date | null
penaltyStart: Date | null
penaltyEnd: Date | null
}
const initialState: GameState = {
playerId: null,
gameStarted: false,
money: 0,
currentRunner: false,
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
},
},
})
export const { setPlayerId, updateMoney } = gameSlice.actions
export default gameSlice.reducer

View File

@ -0,0 +1,107 @@
import { createSlice } from '@reduxjs/toolkit'
export interface InterrailLeg {
infoJson?: string
info?: InterrailLegInfo
sortOrder: number
}
export interface InterrailTravel {
date: string
infoJson?: string
info?: InterrailTravelInfo
from: string
to: string
type: number
legs: InterrailLeg[]
}
export interface InterrailJourneyData {
travels: InterrailTravel[]
}
export interface InterrailJourney {
data: InterrailJourneyData
}
export interface InterrailTime {
hours: number
minutes: number
offset: number
}
export interface InterrailDate {
day: number
month: number
year: number
}
export interface InterrailTravelInfo {
arrivalTime: InterrailTime
date: InterrailDate
departureTime: InterrailTime
haconVersion: number
dataSource: number
}
export interface InterrailStopExtraInfo {
departureTime: InterrailTime
index: number
}
export interface InterrailStopCoordinates {
latitude: number
longitude: number
}
export interface InterrailStopStation {
coordinates: InterrailStopCoordinates
country: string
name: string
stationId: number
}
export interface InterrailLegInfo {
attributeCodes: string[]
attributes: object
duration: InterrailTime
directionStation: string
endTime: InterrailTime
isSeparateTicket: boolean
operationDays: string
operator: object
dataSource: number
startTime: InterrailTime
stopExtraInfo: InterrailStopExtraInfo[]
trainName: string
trainStopStations: InterrailStopStation[]
trainType: number
}
export interface TrainTrip {
id: string
distance: number,
from: string,
to: string,
departureTime: Date,
arrivalTime: Date,
}
export interface TrainsState {
trains: TrainTrip[]
}
const initialState: TrainsState = {
trains: []
}
export const trainSlice = createSlice({
name: 'train',
initialState: initialState,
reducers: {
},
})
export const { } = trainSlice.actions
export default trainSlice.reducer

View File

@ -1,11 +1,19 @@
import { configureStore } from '@reduxjs/toolkit' import { configureStore } from '@reduxjs/toolkit'
import authReducer from './features/location/authSlice' import authReducer from './features/auth/authSlice'
import challengesReducer from './features/challenges/challengesSlice'
import challengeActionsReducer from './features/challengeActions/challengeActionsSlice'
import gameReducer from './features/game/gameSlice'
import locationReducer from './features/location/locationSlice' import locationReducer from './features/location/locationSlice'
import trainReducer from './features/train/trainSlice'
const store = configureStore({ const store = configureStore({
reducer: { reducer: {
auth: authReducer, auth: authReducer,
challenges: challengesReducer,
challengeActions: challengeActionsReducer,
game: gameReducer,
location: locationReducer, location: locationReducer,
train: trainReducer,
}, },
}) })