Boutons pour démarrer le jeu
This commit is contained in:
parent
7aa9dde5a9
commit
c28097d443
@ -1,18 +1,81 @@
|
|||||||
|
import { useGameRepairMutation, useGameResetMutation, useGameStartMutation, useGameStopMutation, useGameSwitchPlayerMutation } from '@/hooks/mutations/useGameMutation'
|
||||||
import { useAuth } from '@/hooks/useAuth'
|
import { useAuth } from '@/hooks/useAuth'
|
||||||
|
import { useGame } from '@/hooks/useGame'
|
||||||
import { useRouter } from 'expo-router'
|
import { useRouter } from 'expo-router'
|
||||||
import { FAB, List, Surface } from 'react-native-paper'
|
import { FAB, List, Surface } from 'react-native-paper'
|
||||||
|
|
||||||
export default function HistoryScreen() {
|
export default function HistoryScreen() {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const auth = useAuth()
|
const auth = useAuth()
|
||||||
|
const game = useGame()
|
||||||
|
|
||||||
|
const gameStartMutation = useGameStartMutation({
|
||||||
|
auth,
|
||||||
|
game,
|
||||||
|
})
|
||||||
|
const gameStopMutation = useGameStopMutation({
|
||||||
|
auth,
|
||||||
|
game,
|
||||||
|
})
|
||||||
|
const gameSwitchMutation = useGameSwitchPlayerMutation({
|
||||||
|
auth,
|
||||||
|
game,
|
||||||
|
})
|
||||||
|
const gameRepairMutation = useGameRepairMutation({
|
||||||
|
auth,
|
||||||
|
game,
|
||||||
|
})
|
||||||
|
const gameResetMutation = useGameResetMutation({
|
||||||
|
auth,
|
||||||
|
game,
|
||||||
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Surface
|
<Surface
|
||||||
style={{ flex: 1 }}>
|
style={{ flex: 1 }}>
|
||||||
<List.Item
|
<List.Section title={"Paramètres"}>
|
||||||
title="Connexion au serveur"
|
<List.Item
|
||||||
description={auth.loggedIn ? "Vous êtes déjà connecté⋅e" : "Vous n'êtes pas connecté⋅e"}
|
key={"login"}
|
||||||
right={() => <FAB icon="login" size="small" onPress={() => router.navigate('/login')} />}
|
title="Connexion au serveur"
|
||||||
onPress={() => router.navigate('/login')} />
|
description={auth.loggedIn ? "Vous êtes déjà connecté⋅e" : "Vous n'êtes pas connecté⋅e"}
|
||||||
|
right={() => <FAB icon="login" size="small" onPress={() => router.navigate('/login')} />}
|
||||||
|
onPress={() => router.navigate('/login')} />
|
||||||
|
</List.Section>
|
||||||
|
<List.Section title={"Gestion du jeu"}>
|
||||||
|
<List.Item
|
||||||
|
key={"start"}
|
||||||
|
title="Démarrer le jeu"
|
||||||
|
disabled={game.gameStarted}
|
||||||
|
right={() => <FAB icon="play" size="small" disabled={game.gameStarted} />}
|
||||||
|
onPress={() => gameStartMutation.mutate()} />
|
||||||
|
<List.Item
|
||||||
|
key={"stop"}
|
||||||
|
title="Arrêter le jeu"
|
||||||
|
disabled={!game.gameStarted}
|
||||||
|
right={() => <FAB icon="stop" size="small" disabled={!game.gameStarted} />}
|
||||||
|
onPress={() => gameStopMutation.mutate()} />
|
||||||
|
<List.Item
|
||||||
|
key={"switch"}
|
||||||
|
title="Changer de joueur⋅se en course"
|
||||||
|
description="À utiliser après une capture"
|
||||||
|
disabled={!game.gameStarted}
|
||||||
|
right={() => <FAB icon="exit-run" size="small" disabled={!game.gameStarted} />}
|
||||||
|
onPress={() => gameSwitchMutation.mutate()} />
|
||||||
|
</List.Section>
|
||||||
|
<List.Section title={"Avancé"}>
|
||||||
|
<List.Item
|
||||||
|
key={"repair"}
|
||||||
|
title="Réparer"
|
||||||
|
description="Permet de réparer les soldes des joueur⋅ses à partir des défis réalisés et des trains emprunter. À manipuler avec précaution."
|
||||||
|
right={() => <FAB icon="reload-alert" size="small" variant={'tertiary'} />}
|
||||||
|
onPress={() => gameRepairMutation.mutate()} />
|
||||||
|
<List.Item
|
||||||
|
key={"reset"}
|
||||||
|
title="Réinitialiser les données de jeu"
|
||||||
|
description="Permet de détruire toutes les données. À manipuler avec précaution."
|
||||||
|
right={() => <FAB icon="reload-alert" size="small" variant={'tertiary'} />}
|
||||||
|
onPress={() => gameResetMutation.mutate()} />
|
||||||
|
</List.Section>
|
||||||
</Surface>
|
</Surface>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
155
client/hooks/mutations/useGameMutation.ts
Normal file
155
client/hooks/mutations/useGameMutation.ts
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
import { AuthState } from "@/utils/features/auth/authSlice"
|
||||||
|
import { GameState } from "@/utils/features/game/gameSlice"
|
||||||
|
import { useMutation } from "@tanstack/react-query"
|
||||||
|
|
||||||
|
type ErrorResponse = {
|
||||||
|
error: string
|
||||||
|
message: string
|
||||||
|
statusCode: number
|
||||||
|
}
|
||||||
|
|
||||||
|
type onPostSuccessFunc = () => void
|
||||||
|
type ErrorFuncProps = { response?: ErrorResponse, error?: Error }
|
||||||
|
type onErrorFunc = (props: ErrorFuncProps) => void
|
||||||
|
|
||||||
|
type GameProps = {
|
||||||
|
game: GameState
|
||||||
|
auth: AuthState
|
||||||
|
onPostSuccess?: onPostSuccessFunc
|
||||||
|
onError?: onErrorFunc
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useGameStartMutation = ({ game, auth, onPostSuccess, onError }: GameProps) => {
|
||||||
|
return useMutation({
|
||||||
|
mutationFn: async () => {
|
||||||
|
return fetch(`${process.env.EXPO_PUBLIC_TRAINTRAPE_MOI_SERVER}/game/start/`, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Authorization": `Bearer ${auth.token}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
}).then(resp => resp.json())
|
||||||
|
},
|
||||||
|
onSuccess: async (data) => {
|
||||||
|
if (data.error) {
|
||||||
|
if (onError)
|
||||||
|
onError({ response: data })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (onPostSuccess)
|
||||||
|
onPostSuccess()
|
||||||
|
},
|
||||||
|
onError: async (error: Error) => {
|
||||||
|
if (onError)
|
||||||
|
onError({ error: error })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useGameStopMutation = ({ auth, game, onPostSuccess, onError }: GameProps) => {
|
||||||
|
return useMutation({
|
||||||
|
mutationFn: async () => {
|
||||||
|
return fetch(`${process.env.EXPO_PUBLIC_TRAINTRAPE_MOI_SERVER}/game/stop/`, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Authorization": `Bearer ${auth.token}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
}).then(resp => resp.json())
|
||||||
|
},
|
||||||
|
onSuccess: async (data) => {
|
||||||
|
if (data.error) {
|
||||||
|
if (onError)
|
||||||
|
onError({ response: data })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (onPostSuccess)
|
||||||
|
onPostSuccess()
|
||||||
|
},
|
||||||
|
onError: async (error: Error) => {
|
||||||
|
if (onError)
|
||||||
|
onError({ error: error })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useGameSwitchPlayerMutation = ({ auth, game, onPostSuccess, onError }: GameProps) => {
|
||||||
|
return useMutation({
|
||||||
|
mutationFn: async () => {
|
||||||
|
return fetch(`${process.env.EXPO_PUBLIC_TRAINTRAPE_MOI_SERVER}/game/switch-running-player/`, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Authorization": `Bearer ${auth.token}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
}).then(resp => resp.json())
|
||||||
|
},
|
||||||
|
onSuccess: async (data) => {
|
||||||
|
if (data.error) {
|
||||||
|
if (onError)
|
||||||
|
onError({ response: data })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (onPostSuccess)
|
||||||
|
onPostSuccess()
|
||||||
|
},
|
||||||
|
onError: async (error: Error) => {
|
||||||
|
if (onError)
|
||||||
|
onError({ error: error })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useGameRepairMutation = ({ auth, game, onPostSuccess, onError }: GameProps) => {
|
||||||
|
return useMutation({
|
||||||
|
mutationFn: async () => {
|
||||||
|
return fetch(`${process.env.EXPO_PUBLIC_TRAINTRAPE_MOI_SERVER}/game/repair/`, {
|
||||||
|
method: "PUT",
|
||||||
|
headers: {
|
||||||
|
"Authorization": `Bearer ${auth.token}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
}).then(resp => resp.json())
|
||||||
|
},
|
||||||
|
onSuccess: async (data) => {
|
||||||
|
if (data.error) {
|
||||||
|
if (onError)
|
||||||
|
onError({ response: data })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (onPostSuccess)
|
||||||
|
onPostSuccess()
|
||||||
|
},
|
||||||
|
onError: async (error: Error) => {
|
||||||
|
if (onError)
|
||||||
|
onError({ error: error })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useGameResetMutation = ({ auth, game, onPostSuccess, onError }: GameProps) => {
|
||||||
|
return useMutation({
|
||||||
|
mutationFn: async () => {
|
||||||
|
return fetch(`${process.env.EXPO_PUBLIC_TRAINTRAPE_MOI_SERVER}/game/reset/`, {
|
||||||
|
method: "DELETE",
|
||||||
|
headers: {
|
||||||
|
"Authorization": `Bearer ${auth.token}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
}).then(resp => resp.json())
|
||||||
|
},
|
||||||
|
onSuccess: async (data) => {
|
||||||
|
if (data.error) {
|
||||||
|
if (onError)
|
||||||
|
onError({ response: data })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (onPostSuccess)
|
||||||
|
onPostSuccess()
|
||||||
|
},
|
||||||
|
onError: async (error: Error) => {
|
||||||
|
if (onError)
|
||||||
|
onError({ error: error })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
@ -35,6 +35,7 @@ export async function startGeolocationService(): Promise<void | (() => void)> {
|
|||||||
accuracy: Location.Accuracy.BestForNavigation,
|
accuracy: Location.Accuracy.BestForNavigation,
|
||||||
activityType: Location.ActivityType.OtherNavigation,
|
activityType: Location.ActivityType.OtherNavigation,
|
||||||
deferredUpdatesInterval: 100,
|
deferredUpdatesInterval: 100,
|
||||||
|
timeInterval: 100,
|
||||||
foregroundService: {
|
foregroundService: {
|
||||||
killServiceOnDestroy: false,
|
killServiceOnDestroy: false,
|
||||||
notificationBody: "Géolocalisation activée pour « Traintrape-moi »",
|
notificationBody: "Géolocalisation activée pour « Traintrape-moi »",
|
||||||
|
Loading…
Reference in New Issue
Block a user