|
|
|
@ -25,6 +25,7 @@ interface WorldProgressState {
|
|
|
|
export interface GameProgressState {
|
|
|
|
export interface GameProgressState {
|
|
|
|
inventory: string[],
|
|
|
|
inventory: string[],
|
|
|
|
difficulty: number,
|
|
|
|
difficulty: number,
|
|
|
|
|
|
|
|
openedIntro: boolean,
|
|
|
|
data: WorldProgressState
|
|
|
|
data: WorldProgressState
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -52,7 +53,7 @@ const initalLevelProgressState: LevelProgressState = {code: "", completed: false
|
|
|
|
/** Add an empty skeleton with progress for the current game */
|
|
|
|
/** Add an empty skeleton with progress for the current game */
|
|
|
|
function addGameProgress (state: ProgressState, action: PayloadAction<{game: string}>) {
|
|
|
|
function addGameProgress (state: ProgressState, action: PayloadAction<{game: string}>) {
|
|
|
|
if (!state.games[action.payload.game]) {
|
|
|
|
if (!state.games[action.payload.game]) {
|
|
|
|
state.games[action.payload.game] = {inventory: [], data: {}, difficulty: DEFAULT_DIFFICULTY}
|
|
|
|
state.games[action.payload.game] = {inventory: [], openedIntro: true, data: {}, difficulty: DEFAULT_DIFFICULTY}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -95,7 +96,7 @@ export const progressSlice = createSlice({
|
|
|
|
},
|
|
|
|
},
|
|
|
|
/** delete all progress for this game */
|
|
|
|
/** delete all progress for this game */
|
|
|
|
deleteProgress(state: ProgressState, action: PayloadAction<{game: string}>) {
|
|
|
|
deleteProgress(state: ProgressState, action: PayloadAction<{game: string}>) {
|
|
|
|
state.games[action.payload.game] = {inventory: [], data: {}, difficulty: DEFAULT_DIFFICULTY}
|
|
|
|
state.games[action.payload.game] = {inventory: [], data: {}, openedIntro: true, difficulty: DEFAULT_DIFFICULTY}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
/** delete progress for this level */
|
|
|
|
/** delete progress for this level */
|
|
|
|
deleteLevelProgress(state: ProgressState, action: PayloadAction<{game: string, world: string, level: number}>) {
|
|
|
|
deleteLevelProgress(state: ProgressState, action: PayloadAction<{game: string, world: string, level: number}>) {
|
|
|
|
@ -117,6 +118,11 @@ export const progressSlice = createSlice({
|
|
|
|
addGameProgress(state, action)
|
|
|
|
addGameProgress(state, action)
|
|
|
|
state.games[action.payload.game].difficulty = action.payload.difficulty
|
|
|
|
state.games[action.payload.game].difficulty = action.payload.difficulty
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
/** set the difficulty */
|
|
|
|
|
|
|
|
changedOpenedIntro(state: ProgressState, action: PayloadAction<{game: string, openedIntro: boolean}>) {
|
|
|
|
|
|
|
|
addGameProgress(state, action)
|
|
|
|
|
|
|
|
state.games[action.payload.game].openedIntro = action.payload.openedIntro
|
|
|
|
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
@ -173,14 +179,21 @@ export function selectProgress(game: string) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/** return progress for the current game if it exists */
|
|
|
|
/** return difficulty for the current game if it exists */
|
|
|
|
export function selectDifficulty(game: string) {
|
|
|
|
export function selectDifficulty(game: string) {
|
|
|
|
return (state) => {
|
|
|
|
return (state) => {
|
|
|
|
return state.progress.games[game]?.difficulty ?? DEFAULT_DIFFICULTY
|
|
|
|
return state.progress.games[game]?.difficulty ?? DEFAULT_DIFFICULTY
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** return whether the intro has been read */
|
|
|
|
|
|
|
|
export function selectOpenedIntro(game: string) {
|
|
|
|
|
|
|
|
return (state) => {
|
|
|
|
|
|
|
|
return state.progress.games[game]?.openedIntro
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/** Export actions to modify the progress */
|
|
|
|
/** Export actions to modify the progress */
|
|
|
|
export const { changedSelection, codeEdited, levelCompleted, deleteProgress,
|
|
|
|
export const { changedSelection, codeEdited, levelCompleted, deleteProgress,
|
|
|
|
deleteLevelProgress, loadProgress, helpEdited, changedInventory,
|
|
|
|
deleteLevelProgress, loadProgress, helpEdited, changedInventory, changedOpenedIntro,
|
|
|
|
changedDifficulty } = progressSlice.actions
|
|
|
|
changedDifficulty } = progressSlice.actions
|
|
|
|
|