Merge branch 'Persistance' of https://codefirst.iut.uca.fr/git/BOB_PARTEAM/BOB_PARTY into Persistance
continuous-integration/drone/push Build is failing Details

Persistance
Mathilde JEAN 2 years ago
commit 8c7f5e364b

@ -5,7 +5,6 @@ import LoaderUserApi from './src/services/userServices/loaderUserApi'
import ManagerUser from './src/services/userServices/managerUser' import ManagerUser from './src/services/userServices/managerUser'
import FakeSaverUser from './src/services/userServices/fakeSaverUser' import FakeSaverUser from './src/services/userServices/fakeSaverUser'
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { useUserStore } from './src/context/userContext';
import ManagerConversation from './src/services/conversationService/managerConversation' import ManagerConversation from './src/services/conversationService/managerConversation'
import { LoaderConversationApi } from './src/services/conversationService/loaderConversationApi' import { LoaderConversationApi } from './src/services/conversationService/loaderConversationApi'
import { FakeSaverConversation } from './src/services/conversationService/fakeSaverConversation' import { FakeSaverConversation } from './src/services/conversationService/fakeSaverConversation'
@ -14,6 +13,9 @@ import LoaderMatchApi from './src/services/matchServices/loaderMatchApi'
import SaverMatchApi from './src/services/matchServices/saverMatchApi' import SaverMatchApi from './src/services/matchServices/saverMatchApi'
import LoaderGameApi from './src/services/gameService/loaderGameApi' import LoaderGameApi from './src/services/gameService/loaderGameApi'
import ManagerGame from './src/services/gameService/managerGame' import ManagerGame from './src/services/gameService/managerGame'
import { useFonts } from 'expo-font';
import * as SplashScreen from 'expo-splash-screen';
import { View } from 'react-native'
export const MANAGER_USER = new ManagerUser(new LoaderUserApi, new FakeSaverUser); export const MANAGER_USER = new ManagerUser(new LoaderUserApi, new FakeSaverUser);
@ -22,13 +24,22 @@ export const MANAGER_MATCH = new ManagerMatch(new LoaderMatchApi, new SaverMatch
export const MANAGER_GAME = new ManagerGame(new LoaderGameApi); export const MANAGER_GAME = new ManagerGame(new LoaderGameApi);
export default function App() { export default function App() {
return ( const [fontsLoaded] = useFonts({
<Provider store={store}> 'Helvetica': require('./assets/fonts/Helvetica.ttf'),
<MainTabNavigator/> });
</Provider>
); if (!fontsLoaded) {
return null;
} }
return (
<Provider store={store} >
<MainTabNavigator />
</Provider>
);
}

@ -1,64 +1,9 @@
module.exports = function(api) { module.exports = function (api) {
api.cache(true); api.cache(true);
return { return {
presets: [ presets: [
[ ['babel-preset-expo'],
'@babel/preset-env', ['@babel/preset-env', { targets: { node: 'current' } }]
{
targets: {
browsers: [
'last 2 Chrome versions',
'last 2 Edge versions',
'last 2 Firefox versions',
'last 2 Safari versions',
'IE 11',
],
},
loose: true,
modules: false,
useBuiltIns: 'usage',
corejs: {
version: 3,
proposals: true,
},
},
],
'@babel/preset-react',
'@babel/preset-flow',
], ],
plugins: [
'@babel/plugin-transform-spread',
'@babel/plugin-syntax-dynamic-import',
[
'@babel/plugin-proposal-class-properties',
{
loose: false,
},
],
],
ignore: ['node_modules'],
overrides: [
{
test: ['./src/**/*.ts', './src/**/*.tsx'],
presets: [
'@babel/preset-typescript',
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
'@babel/preset-react',
],
},
],
env: {
test: {
plugins: ['babel-plugin-rewire-ts'],
presets: ['@babel/preset-typescript', '@babel/preset-env', '@babel/preset-react'],
},
},
}; };
}; };

@ -1,7 +1,5 @@
import React from 'react' import React from 'react'
import App from './App' import App from './App'
import store from './src/redux/store'
import { Provider } from 'react-redux'
// export for others scripts to use // export for others scripts to use
@ -9,10 +7,5 @@ import { Provider } from 'react-redux'
export default function Index(){ export default function Index(){
return( return(
<App/> <App/>
/*
<Provider store={store}>
<App />
</Provider>
*/
) )
} }

File diff suppressed because it is too large Load Diff

@ -10,6 +10,7 @@
"test": "jest" "test": "jest"
}, },
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.6",
"@react-native-community/datetimepicker": "6.2.0", "@react-native-community/datetimepicker": "6.2.0",
"@react-native-picker/picker": "2.4.2", "@react-native-picker/picker": "2.4.2",
"@react-navigation/bottom-tabs": "^6.4.0", "@react-navigation/bottom-tabs": "^6.4.0",
@ -23,7 +24,7 @@
"babel-preset-env": "^1.7.0", "babel-preset-env": "^1.7.0",
"babel-preset-typescript": "^7.0.0-alpha.19", "babel-preset-typescript": "^7.0.0-alpha.19",
"babel-test": "^0.2.4", "babel-test": "^0.2.4",
"expo": "^46.0.15", "expo": "^46.0.17",
"expo-status-bar": "~1.4.0", "expo-status-bar": "~1.4.0",
"jest": "^29.3.1", "jest": "^29.3.1",
"jquery": "^3.6.1", "jquery": "^3.6.1",
@ -43,9 +44,12 @@
"zustand": "^4.1.4" "zustand": "^4.1.4"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.20.5", "@babel/core": "^7.12.9",
"@babel/preset-env": "^7.20.2", "@babel/plugin-proposal-class-properties": "^7.0.0",
"@babel/preset-typescript": "^7.18.6", "@babel/plugin-transform-runtime": "^7.0.0",
"@babel/preset-env": "^7.0.0",
"@babel/register": "^7.0.0",
"@babel/runtime": "^7.5.5",
"@jest/globals": "^29.3.1", "@jest/globals": "^29.3.1",
"@types/jest": "^29.2.3", "@types/jest": "^29.2.3",
"@types/jquery": "^3.5.14", "@types/jquery": "^3.5.14",
@ -53,7 +57,7 @@
"@types/node": "^18.8.4", "@types/node": "^18.8.4",
"@types/react": "~18.0.14", "@types/react": "~18.0.14",
"@types/react-native": "~0.69.1", "@types/react-native": "~0.69.1",
"babel-jest": "^29.3.1", "babel-preset-react-native": "^4.0.0",
"ts-jest": "^29.0.3", "ts-jest": "^29.0.3",
"typescript": "^4.9.3" "typescript": "^4.9.3"
}, },

@ -21,7 +21,7 @@ let points=0;
function CookieClicker(props: { navigation: any}){ function CookieClicker(props: { navigation: any}){
const { navigation } = props const { navigation } = props
const GAMING_TIME=45; const GAMING_TIME=120;
const setUser = useUserStore((state) => state.setUser); const setUser = useUserStore((state) => state.setUser);
@ -86,9 +86,8 @@ function CookieClicker(props: { navigation: any}){
} }
function endGame(){ function endGame(){
let tmp: User | null; const tmp=MANAGER_USER.getCurrentUser();
tmp=MANAGER_USER.getCurrentUser(); if (tmp!==null){
if (tmp!=null){
if (MANAGER_MATCH.getCurrentMatch()?.getTabUsers().includes(tmp)){ if (MANAGER_MATCH.getCurrentMatch()?.getTabUsers().includes(tmp)){
MANAGER_MATCH.getCurrentMatch()?.updatePostMatch(tmp, points); MANAGER_MATCH.getCurrentMatch()?.updatePostMatch(tmp, points);
setUser(tmp); setUser(tmp);

@ -1,5 +1,5 @@
import { FC, ReactNode, useCallback } from "react" import { FC, ReactNode, useCallback } from "react"
import { Pressable, Image, View} from "react-native" import { Pressable, Image, View } from "react-native"
import React from "react" import React from "react"
/* /*
@ -30,95 +30,94 @@ const smessage = require('../../assets/Icons/Selected/SChat.png');
const sstore = require('../../assets/Icons/Selected/SStore.png'); const sstore = require('../../assets/Icons/Selected/SStore.png');
export const BotBar : export const BotBar:
/* Parameters : /* Parameters :
* nav : tool needed to allow the navigation between the screens * nav : tool needed to allow the navigation between the screens
* state : optional parameter that indicates from which screen the component has been called * state : optional parameter that indicates from which screen the component has been called
(the string must be the name of the screen) (the string must be the name of the screen)
*/ */
FC<{nav: any, state?: String}> = FC<{ nav: any, state?: String }> =
({nav, state}) => ({ nav, state }) => {
{
const setTabSkin = useStoreStore((state) => state.setTabSkin); const setTabSkin = useStoreStore((state) => state.setTabSkin);
const setTabConv = useConversationStore((state) => state.setTabConv); const setTabConv = useConversationStore((state) => state.setTabConv);
const handleStoreChange = useCallback(async () => { const handleStoreChange = useCallback(async () => {
let tabSkinStore=[...tabSkinApp]; let tabSkinStore = [...tabSkinApp];
let tmp=MANAGER_USER.getCurrentUser()?.getTabSkin(); // const tmp=MANAGER_USER.getCurrentUser()?.getTabSkin();
if (tmp!=undefined){ // if (tmp!==undefined){
tmp.forEach(skin => { MANAGER_USER.getCurrentUser()?.getTabSkin()?.forEach(skin => {
for (let i=0; i<tabSkinStore.length; i++){ for (let i = 0; i < tabSkinStore.length; i++) {
if(skin.isEqual(tabSkinStore[i])){ if (skin.isEqual(tabSkinStore[i])) {
tabSkinStore.splice(i,1); tabSkinStore.splice(i, 1);
} }
} }
}); });
setTabSkin(tabSkinStore); setTabSkin(tabSkinStore);
} // }
}, []); }, []);
const handleConversationChange = useCallback(async () => { const handleConversationChange = useCallback(async () => {
let tmp=MANAGER_USER.getCurrentUser(); const tmp = MANAGER_USER.getCurrentUser();
if (tmp!=undefined){ if (tmp !== null) {
await MANAGER_CONVERSATION.getLoaderConversation().loadByUser(tmp).then((res) => { await MANAGER_CONVERSATION.getLoaderConversation().loadByUser(tmp).then((res) => {
MANAGER_CONVERSATION.setCurrentTabConv(res); MANAGER_CONVERSATION.setCurrentTabConv(res);
setTabConv(res); setTabConv(res);
}); });
} }
}, []); }, []);
/* /*
By default, all the images are the white ones By default, all the images are the white ones
*/ */
var imgLeft=message, imgMid=gamepad, imgRight=store var imgLeft = message, imgMid = gamepad, imgRight = store
/* /*
For each screen corresponding to a screen of the bottom bar, For each screen corresponding to a screen of the bottom bar,
we need to change one of the icons to the corresponding blue one we need to change one of the icons to the corresponding blue one
(for example, when the chat screen is displayed, (for example, when the chat screen is displayed,
the icon of the messages must switch to the blue one) the icon of the messages must switch to the blue one)
*/ */
switch (state) { switch (state) {
case 'Home': case 'Home':
imgMid = sgamepad imgMid = sgamepad
break; break;
case 'Chat': case 'Chat':
imgLeft = smessage imgLeft = smessage
break; break;
case 'Store': case 'Store':
imgRight = sstore imgRight = sstore
break; break;
default: default:
break; break;
} }
/* /*
Once the icons are correctly attributed, Once the icons are correctly attributed,
the function can display the component the function can display the component
*/ */
return ( return (
<View style={styles.footer}> <View style={styles.footer}>
<Pressable onPress={() => {handleConversationChange() ;nav.navigate('ChatTab')}}> <Pressable onPress={() => { handleConversationChange(); nav.navigate('ChatTab') }}>
<Image <Image
style={styles.icon} style={styles.icon}
source={imgLeft} source={imgLeft}
/> />
</Pressable> </Pressable>
<Pressable onPress={()=> {nav.navigate('HomeTab', {screen: 'Home'})}}> <Pressable onPress={() => { nav.navigate('HomeTab', { screen: 'Home' }) }}>
<Image <Image
style={styles.icon} style={styles.icon}
source={imgMid} source={imgMid}
/> />
</Pressable> </Pressable>
<Pressable onPress={() => {handleStoreChange(); nav.navigate('StoreTab')}}> <Pressable onPress={() => { handleStoreChange(); nav.navigate('StoreTab') }}>
<Image <Image
style={styles.icon} style={styles.icon}
source={imgRight} source={imgRight}
/> />
</Pressable> </Pressable>
</View> </View>
) )
} }

@ -30,8 +30,8 @@ FC<{game: Game, nav: any}> =
const createNewMatchSolo = useCallback(async (game : Game, nav: any) => { const createNewMatchSolo = useCallback(async (game : Game, nav: any) => {
const m=new MatchCreator(); const m=new MatchCreator();
let tmp=MANAGER_USER.getCurrentUser(); const tmp=MANAGER_USER.getCurrentUser();
if (tmp!=null){ if (tmp!==null){
let match=await m.createMatch(tmp, game); let match=await m.createMatch(tmp, game);
MANAGER_MATCH.setCurrentMatch(match); MANAGER_MATCH.setCurrentMatch(match);
setMatch(match); setMatch(match);

@ -8,12 +8,9 @@ import { Skin } from "../core/skin"
*/ */
import styles from "./style/Skin.style" import styles from "./style/Skin.style"
import { useDispatch, useSelector } from "react-redux" import { useDispatch, useSelector } from "react-redux"
import { loginUser } from "../redux/features/currentUserSlice"
import { RootState } from "../redux/store"
import { MANAGER_USER } from "../../App" import { MANAGER_USER } from "../../App"
import { useUserStore } from "../context/userContext" import { useUserStore } from "../context/userContext"
import { ManagerCoinsUser } from "../core/User/userCoinsModifier" import { ManagerCoinsUser } from "../core/User/userCoinsModifier"
import ManagerUser from "../services/userServices/managerUser"
import UserSkinModifier from "../core/User/userSkinModifier" import UserSkinModifier from "../core/User/userSkinModifier"
import { useStoreStore } from "../context/storeContext" import { useStoreStore } from "../context/storeContext"
import tabSkinApp from "../constSkin" import tabSkinApp from "../constSkin"
@ -21,129 +18,128 @@ import tabSkinApp from "../constSkin"
export const SkinComponent : export const SkinComponent:
/* Parameters : /* Parameters :
* skin : Skin to be displayed * skin : Skin to be displayed
* state : Indicates from wich screen the component has been called * state : Indicates from wich screen the component has been called
*/ */
FC<{nav : any, skin: Skin, state: String}> = FC<{ nav: any, skin: Skin, state: String }> =
({nav, skin, state}) => ({ nav, skin, state }) => {
{
const navigation = nav; const navigation = nav;
const dispatch=useDispatch(); const dispatch = useDispatch();
const setUser = useUserStore((state) => state.setUser); const setUser = useUserStore((state) => state.setUser);
const setTabSkin = useStoreStore((state) => state.setTabSkin); const setTabSkin = useStoreStore((state) => state.setTabSkin);
async function changerSkin(skin:Skin) { async function changerSkin(skin: Skin) {
const m=new UserSkinModifier(); const m = new UserSkinModifier();
const tmp = MANAGER_USER.getCurrentUser(); const tmp = MANAGER_USER.getCurrentUser();
if (tmp!=null){ if (tmp !== null) {
await m.changeCurrentSkin(tmp, skin); await m.changeCurrentSkin(tmp, skin);
setUser(tmp); setUser(tmp);
MANAGER_USER.setCurrentUser(tmp); MANAGER_USER.setCurrentUser(tmp);
}
} }
}
const handleStoreChange = useCallback(async () => { const handleStoreChange = useCallback(async () => {
let tabSkinStore=[...tabSkinApp]; let tabSkinStore = [...tabSkinApp];
let tmp=MANAGER_USER.getCurrentUser()?.getTabSkin(); // const tmp=MANAGER_USER.getCurrentUser()?.getTabSkin();
if (tmp!=undefined){ // if (tmp!=undefined){
tmp.forEach(skin => { MANAGER_USER.getCurrentUser()?.getTabSkin()?.forEach(skin => {
for (let i=0; i<tabSkinStore.length; i++){ for (let i = 0; i < tabSkinStore.length; i++) {
if(skin.isEqual(tabSkinStore[i])){ if (skin.isEqual(tabSkinStore[i])) {
tabSkinStore.splice(i,1); tabSkinStore.splice(i, 1);
} }
} }
}); });
setTabSkin(tabSkinStore); setTabSkin(tabSkinStore);
} //}
}, []); }, []);
async function buySkin(skin:Skin) { async function buySkin(skin: Skin) {
const mSkin=new UserSkinModifier(); const mSkin = new UserSkinModifier();
const mCoins= new ManagerCoinsUser(); const mCoins = new ManagerCoinsUser();
const tmp = MANAGER_USER.getCurrentUser(); const tmp = MANAGER_USER.getCurrentUser();
if (tmp!=null){ if (tmp !== null) {
await mCoins.removeCoins(tmp,skin.getSkinCost()).then(async (res) => { await mCoins.removeCoins(tmp, skin.getSkinCost()).then(async (res) => {
if(res==true){ if (res == true) {
await mSkin.addSkin(tmp, skin); await mSkin.addSkin(tmp, skin);
setUser(tmp); setUser(tmp);
MANAGER_USER.setCurrentUser(tmp); MANAGER_USER.setCurrentUser(tmp);
Alert.alert("Achat du skin"); Alert.alert("Achat du skin");
handleStoreChange(); handleStoreChange();
} }
else{ else {
Alert.alert("Pas assez d'argent pour acheter le skin"); Alert.alert("Pas assez d'argent pour acheter le skin");
} }
}); });
} }
} }
/* The display of this component depends of the screen from where it has been called: /* The display of this component depends of the screen from where it has been called:
* From the TopBar (icon) : Small image in a circle * From the TopBar (icon) : Small image in a circle
* From the shop (shop) : Image + Name + Price, Pressable => Buy the skin * From the shop (shop) : Image + Name + Price, Pressable => Buy the skin
* From the profile (profile) : Name + Image, Pressable => Change the skin * From the profile (profile) : Name + Image, Pressable => Change the skin
*/ */
switch (state) { switch (state) {
case 'icon': case 'icon':
return ( return (
<View> <View>
<Image source={{uri: skin.getSkinSource()}} style={styles.icon}/> <Image source={{ uri: skin.getSkinSource() }} style={styles.icon} />
</View> </View>
) )
case 'shop': case 'shop':
return( return (
<Pressable onPress={() => buySkin(skin)} style={styles.imageWrapper}> <Pressable onPress={() => buySkin(skin)} style={styles.imageWrapper}>
<Text style={styles.nomSkin}>{skin.getSkinName()}</Text> <Text style={styles.nomSkin}>{skin.getSkinName()}</Text>
<Image <Image
style={styles.imageSkin} style={styles.imageSkin}
source={{uri: skin.getSkinSource()}} source={{ uri: skin.getSkinSource() }}
/> />
<Text style={styles.nomSkin}>100</Text> <Text style={styles.nomSkin}>100</Text>
</Pressable> </Pressable>
) )
case 'liste': case 'liste':
return( return (
<Pressable onPress={() => {changerSkin(skin); navigation.goBack()}} style={styles.imageWrapper}> <Pressable onPress={() => { changerSkin(skin); navigation.goBack() }} style={styles.imageWrapper}>
<Text style={styles.nomSkin}>{skin.getSkinName()}</Text> <Text style={styles.nomSkin}>{skin.getSkinName()}</Text>
<Image
style={styles.imageSkin}
source={{ uri: skin.getSkinSource() }}
/>
</Pressable>
)
case 'profile':
return (
<Pressable onPress={() => Alert.alert("cool")} style={styles.imageWrapperProfil}>
<Text style={styles.nomSkin}>{skin.getSkinName()}</Text>
<Image
style={styles.imageSkin}
source={{ uri: skin.getSkinSource() }}
/>
</Pressable>
)
default:
return (
<Image <Image
style={styles.imageSkin} style={styles.imageSkin}
source={{uri: skin.getSkinSource()}} source={{ uri: skin.getSkinSource() }}
/> />
</Pressable> )
) }
case 'profile':
return(
<Pressable onPress={() => Alert.alert("cool")} style={styles.imageWrapperProfil}>
<Text style={styles.nomSkin}>{skin.getSkinName()}</Text>
<Image
style={styles.imageSkin}
source={{uri: skin.getSkinSource()}}
/>
</Pressable>
)
default:
return(
<Image
style={styles.imageSkin}
source={{uri: skin.getSkinSource()}}
/>
)
} }
}

@ -12,6 +12,12 @@ interface GameState {
tabGame: Game[] | undefined; tabGame: Game[] | undefined;
setTabGame: (tabGame: Game[]) => void; setTabGame: (tabGame: Game[]) => void;
resetTabGame: () => void; resetTabGame: () => void;
tabGameSolo: Game[] | undefined;
setTabGameSolo: (tabGame: Game[]) => void;
resetTabGameSolo: () => void;
tabGameMulti: Game[] | undefined;
setTabGameMulti: (tabGame: Game[]) => void;
resetTabGameMulti: () => void;
} }
// Define store data and methods // Define store data and methods
@ -19,5 +25,11 @@ export const useGameStore = create<GameState>()((set, get) => ({
tabGame: undefined, tabGame: undefined,
setTabGame: (tabGame) => set((state) => ({ tabGame: tabGame })), setTabGame: (tabGame) => set((state) => ({ tabGame: tabGame })),
resetTabGame: () => set((state) => ({ tabGame: undefined })), resetTabGame: () => set((state) => ({ tabGame: undefined })),
tabGameSolo: undefined,
setTabGameSolo: (tabGame) => set((state) => ({ tabGameSolo: tabGame })),
resetTabGameSolo: () => set((state) => ({ tabGameSolo: undefined })),
tabGameMulti: undefined,
setTabGameMulti: (tabGame) => set((state) => ({ tabGameMulti: tabGame })),
resetTabGameMulti: () => set((state) => ({ tabGameMulti: undefined })),
})); }));

@ -31,7 +31,6 @@ export const currentUserSlice = createSlice({
updatePseudo: (state, action: PayloadAction<string>) =>{ updatePseudo: (state, action: PayloadAction<string>) =>{
const newUser: User = new User(currentUser.getId(), currentUser.getUsername(), currentUser.getPassword(), currentUser.getNationality(), currentUser.getSexe(), currentUser.getDateOfBirth()); const newUser: User = new User(currentUser.getId(), currentUser.getUsername(), currentUser.getPassword(), currentUser.getNationality(), currentUser.getSexe(), currentUser.getDateOfBirth());
console.log(currentUser);
newUser.setUsername(action.payload); newUser.setUsername(action.payload);
return { return {
...state, ...state,

@ -20,7 +20,6 @@ let tabConv:Conversation[]=[];
function GameChoice(props: { navigation: any}) { function GameChoice(props: { navigation: any}) {
const { navigation} = props const { navigation} = props
console.log(MANAGER_GAME.getTabGame());
return ( return (
<View style={stylesScreen.container}> <View style={stylesScreen.container}>
<TopBar <TopBar
@ -37,7 +36,7 @@ function GameChoice(props: { navigation: any}) {
</View> </View>
<BotBar <BotBar
nav={navigation} nav={navigation}
state='Store' state='Home'
/> />
</View> </View>
); );

@ -1,5 +1,5 @@
import { StatusBar } from 'expo-status-bar' import { StatusBar } from 'expo-status-bar'
import { View} from 'react-native' import { View } from 'react-native'
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import stylesScreen from './style/screens.style' import stylesScreen from './style/screens.style'
import { TopBar } from '../components/TopBar'; import { TopBar } from '../components/TopBar';
@ -8,53 +8,114 @@ import { Conversation } from '../core/conversation';
import { ButtonGameTypeChoice } from '../components/ButtonGameTypeChoice'; import { ButtonGameTypeChoice } from '../components/ButtonGameTypeChoice';
import { MANAGER_GAME } from '../../App'; import { MANAGER_GAME } from '../../App';
import { useGameStore } from '../context/gameContext'; import { useGameStore } from '../context/gameContext';
import { GameSolo } from '../core/gameSolo';
import { Game } from '../core/game';
import game from '../testGameSolo';
let tabConv:Conversation[]=[]; let tabConv: Conversation[] = [];
function Home(props: { navigation: any; }) { function Home(props: { navigation: any; }) {
const { navigation } = props const { navigation } = props
const setTabGame = useGameStore((state) => state.setTabGame); const setTabGame = useGameStore((state) => state.setTabGame);
const setTabGameSolo = useGameStore((state) => state.setTabGameSolo);
const setTabGameMulti = useGameStore((state) => state.setTabGameMulti);
const handleGame = useCallback(async () => { /*
let tmp=MANAGER_GAME.getTabGame(); const handleGame = useCallback(async (typeJeu: string) => {
if (tmp==null){ switch(typeJeu){
await MANAGER_GAME.getLoaderGame().loadAllGame().then((res) => { case 'solo':
MANAGER_GAME.setTabGame(res); let tabSolo:Game[]=[]
setTabGame(res); let tmp=MANAGER_GAME.getTabGameSolo();
navigation.navigate('GameChoiceTab') if (tmp==null){
}); let tabAll=MANAGER_GAME.getTabGame();
} if (tabAll==null){
else{ await MANAGER_GAME.getLoaderGame().loadAllGame().then((res) => {
MANAGER_GAME.setTabGame(res);
setTabGame(res);
});
}
tabAll?.forEach(game =>{
if (game.getNbPlayerMax()==1){
tabSolo.push(game);
}
})
MANAGER_GAME.setTabGameSolo(tabSolo);
setTabGameSolo(tabSolo);
navigation.navigate('GameChoiceTab')
}
else{
navigation.navigate('GameChoiceTab')
}
case 'multi':
let tabMulti:Game[]=[]
let tkt=MANAGER_GAME.getTabGameSolo();
if (tkt==null){
let tabAll=MANAGER_GAME.getTabGame();
if (tabAll==null){
await MANAGER_GAME.getLoaderGame().loadAllGame().then((res) => {
MANAGER_GAME.setTabGame(res);
setTabGame(res);
});
}
tabAll?.forEach(game =>{
if (game.getNbPlayerMax()==1){
tabSolo.push(game);
}
})
MANAGER_GAME.setTabGameMulti(tabMulti);
setTabGameMulti(tabMulti);
navigation.navigate('GameChoiceTab')
}
else{
navigation.navigate('GameChoiceTab')
}
}
}, []);
*/
const handleGame = useCallback(async (typeJeu: string) => {
const tmp = MANAGER_GAME.getTabGame();
if (tmp === null) {
await MANAGER_GAME.getLoaderGame().loadAllGame().then((res) => {
MANAGER_GAME.setTabGame(res);
setTabGame(res);
navigation.navigate('GameChoiceTab') navigation.navigate('GameChoiceTab')
} });
}
else {
navigation.navigate('GameChoiceTab')
}
}, []); }, []);
return ( return (
<View style={stylesScreen.container}> <View style={stylesScreen.container}>
<TopBar <TopBar
nav={navigation} nav={navigation}
state= 'Home' state='Home'
/> />
<View style={stylesScreen.bodyCenter}> <View style={stylesScreen.bodyCenter}>
<ButtonGameTypeChoice <ButtonGameTypeChoice
title='Jouer Seul' title='Jouer Seul'
onPress={() => {handleGame()}} onPress={() => { handleGame("solo") }}
/> />
<ButtonGameTypeChoice <ButtonGameTypeChoice
title='Défier mes amis' title='Défier mes amis'
onPress={() => handleGame()} onPress={() => handleGame("multi")}
/> />
</View> </View>
<BotBar <BotBar
nav={navigation} nav={navigation}
state='Home' state='Home'
/> />
</View> </View>
); );
} }
export default Home export default Home

@ -30,8 +30,8 @@ function Settings(props: { navigation: any; }) {
async function changeUsername(username:string){ async function changeUsername(username:string){
const m = new UserModificationManager(); const m = new UserModificationManager();
let tmp=MANAGER_USER.getCurrentUser(); const tmp=MANAGER_USER.getCurrentUser();
if (tmp!=null){ if (tmp!==null){
await m.changeUsername(tmp, username); await m.changeUsername(tmp, username);
setUser(tmp); setUser(tmp);
MANAGER_USER.setCurrentUser(tmp); MANAGER_USER.setCurrentUser(tmp);
@ -40,8 +40,8 @@ function Settings(props: { navigation: any; }) {
async function changePassword(password:string){ async function changePassword(password:string){
const m = new UserModificationManager(); const m = new UserModificationManager();
let tmp=MANAGER_USER.getCurrentUser(); const tmp=MANAGER_USER.getCurrentUser();
if (tmp!=null){ if (tmp!==null){
await m.changePassword(tmp, password); await m.changePassword(tmp, password);
setUser(tmp); setUser(tmp);
MANAGER_USER.setCurrentUser(tmp); MANAGER_USER.setCurrentUser(tmp);

@ -38,9 +38,7 @@ function SignIn(props: { navigation: any; }) {
setUser(MANAGER_USER.getCurrentUser()); setUser(MANAGER_USER.getCurrentUser());
navigation.navigate('HomeTab'); navigation.navigate('HomeTab');
} }
else{
console.log("wesh c'est null");
}
}); });
}, []); }, []);

@ -26,7 +26,6 @@ function SignUp(props: { navigation: any; }) {
function onDateSelected(event : DateTimePickerEvent, value : Date | undefined) { function onDateSelected(event : DateTimePickerEvent, value : Date | undefined) {
console.log(value);
if (value != undefined) { if (value != undefined) {
setDate(value); setDate(value);
} }

@ -24,9 +24,7 @@ export default class LoaderGameApi implements ILoaderGame{
map.set(300,150); map.set(300,150);
map.set(450,1000); map.set(450,1000);
const cookieClicker= new GameSolo(1, "Cookie Clicker", "https://codefirst.iut.uca.fr/git/BOB_PARTEAM/BOB_PARTY/raw/branch/typescript/bob_party/assets/ImagesJeux/Pong.png", "/Games/CookieClicker/cookieClicker.tsx", 1, 1, map); const cookieClicker= new GameSolo(1, "Cookie Clicker", "https://codefirst.iut.uca.fr/git/BOB_PARTEAM/BOB_PARTY/raw/branch/typescript/bob_party/assets/ImagesJeux/Pong.png", "/Games/CookieClicker/cookieClicker.tsx", 1, 1, map);
const test= new GameSolo(1, "Test", "https://codefirst.iut.uca.fr/git/BOB_PARTEAM/BOB_PARTY/raw/branch/typescript/bob_party/assets/ImagesJeux/Pendu.jpg", "/Games/CookieClicker/cookieClicker.tsx", 1, 1, map); tab=[cookieClicker];
tab=[cookieClicker, test];
console.log(tab);
}); });
return tab; return tab;

@ -5,6 +5,10 @@ export default class ManagerGame{
private tabGame: Game[] | null=null; private tabGame: Game[] | null=null;
private tabGameSolo: Game[] | null=null;
private tabGameMulti: Game[] | null=null;
private loaderGame: ILoaderGame; private loaderGame: ILoaderGame;
constructor(loader:ILoaderGame){ constructor(loader:ILoaderGame){
@ -19,6 +23,22 @@ export default class ManagerGame{
this.tabGame=g; this.tabGame=g;
} }
getTabGameSolo(){
return this.tabGame;
}
setTabGameSolo(g:Game[] | null){
this.tabGameSolo=g;
}
getTabGameMulti(){
return this.tabGameMulti;
}
setTabGameMulti(g:Game[] | null){
this.tabGameMulti=g;
}
getLoaderGame(){ getLoaderGame(){
return this.loaderGame; return this.loaderGame;
} }

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save