Structure de données jeu client
This commit is contained in:
parent
d1adba04da
commit
7aa9dde5a9
@ -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"
|
||||||
|
|
||||||
|
@ -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 = {
|
||||||
|
@ -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 = () => {
|
||||||
|
3
client/hooks/useChallengeActions.ts
Normal file
3
client/hooks/useChallengeActions.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { useAppSelector } from "./useStore"
|
||||||
|
|
||||||
|
export const useChallengeActions = () => useAppSelector((state) => state.challengeActions)
|
3
client/hooks/useChallenges.ts
Normal file
3
client/hooks/useChallenges.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { useAppSelector } from "./useStore"
|
||||||
|
|
||||||
|
export const useTrain = () => useAppSelector((state) => state.challenges)
|
12
client/hooks/useGame.ts
Normal file
12
client/hooks/useGame.ts
Normal 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
3
client/hooks/useTrain.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { useAppSelector } from "./useStore"
|
||||||
|
|
||||||
|
export const useTrain = () => useAppSelector((state) => state.train)
|
@ -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)
|
|
||||||
}
|
|
||||||
*/
|
|
@ -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
|
27
client/utils/features/challenges/challengesSlice.ts
Normal file
27
client/utils/features/challenges/challengesSlice.ts
Normal 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
|
38
client/utils/features/game/gameSlice.ts
Normal file
38
client/utils/features/game/gameSlice.ts
Normal 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
|
107
client/utils/features/train/trainSlice.ts
Normal file
107
client/utils/features/train/trainSlice.ts
Normal 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
|
@ -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,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user