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,21 +13,33 @@ 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);
export const MANAGER_CONVERSATION = new ManagerConversation(new LoaderConversationApi, new FakeSaverConversation); export const MANAGER_CONVERSATION = new ManagerConversation(new LoaderConversationApi, new FakeSaverConversation);
export const MANAGER_MATCH = new ManagerMatch(new LoaderMatchApi, new SaverMatchApi); export const MANAGER_MATCH = new ManagerMatch(new LoaderMatchApi, new SaverMatchApi);
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 tmp=MANAGER_USER.getCurrentUser()?.getTabSkin();
if (tmp!=undefined){
tmp.forEach(skin => {
for (let i=0; i<tabSkinStore.length; i++){
if(skin.isEqual(tabSkinStore[i])){
tabSkinStore.splice(i,1);
}
}
});
setTabSkin(tabSkinStore);
}
}, []);
const handleConversationChange = useCallback(async () => { let tabSkinStore = [...tabSkinApp];
let tmp=MANAGER_USER.getCurrentUser(); // const tmp=MANAGER_USER.getCurrentUser()?.getTabSkin();
if (tmp!=undefined){ // if (tmp!==undefined){
await MANAGER_CONVERSATION.getLoaderConversation().loadByUser(tmp).then((res) => { MANAGER_USER.getCurrentUser()?.getTabSkin()?.forEach(skin => {
MANAGER_CONVERSATION.setCurrentTabConv(res); for (let i = 0; i < tabSkinStore.length; i++) {
setTabConv(res); if (skin.isEqual(tabSkinStore[i])) {
}); tabSkinStore.splice(i, 1);
} }
}
}, []); });
setTabSkin(tabSkinStore);
/* // }
By default, all the images are the white ones }, []);
*/
var imgLeft=message, imgMid=gamepad, imgRight=store const handleConversationChange = useCallback(async () => {
const tmp = MANAGER_USER.getCurrentUser();
/* if (tmp !== null) {
For each screen corresponding to a screen of the bottom bar, await MANAGER_CONVERSATION.getLoaderConversation().loadByUser(tmp).then((res) => {
we need to change one of the icons to the corresponding blue one MANAGER_CONVERSATION.setCurrentTabConv(res);
(for example, when the chat screen is displayed, setTabConv(res);
the icon of the messages must switch to the blue one) });
*/ }
switch (state) {
case 'Home': }, []);
imgMid = sgamepad
break; /*
case 'Chat': By default, all the images are the white ones
imgLeft = smessage */
break; var imgLeft = message, imgMid = gamepad, imgRight = store
case 'Store':
imgRight = sstore /*
break; For each screen corresponding to a screen of the bottom bar,
default: we need to change one of the icons to the corresponding blue one
break; (for example, when the chat screen is displayed,
} the icon of the messages must switch to the blue one)
*/
switch (state) {
case 'Home':
imgMid = sgamepad
break;
case 'Chat':
imgLeft = smessage
break;
case 'Store':
imgRight = sstore
break;
default:
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 })),
})); }));

@ -72,4 +72,4 @@ export abstract class Game{
} }
abstract coinsCalculator(points: number): number; abstract coinsCalculator(points: number): number;
} }

@ -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