Game State Serialization
Now that we have implemented our levels, we need a way to show the progression between them and a way to jump between levels and the menu. This presents us with three tasks:
We need to store an integer value that represents how many levels have been unlocked.
When the player completes a level for the first time, we need to increment that value.
From our Main menu, we list all of the playable levels; we want to gray out the links to levels that are currently locked.
Initialize Storage
We begin by adding the integer to our persistent storage in the Game2DAppDelegate class. Therefore, we will
add the following to our applicationDidFinishLaunching:
function:
//Game2DAppDelegate.m
//setup default save data.
if([g_ResManager getUserData:ProgressionSavefile] == nil){
//progression will store the unlocked level count, from 0..3.
[g_ResManager storeUserData:[NSNumber numberWithInt:0]
toFile:ProgressionSaveFile];
}where ProgressionSaveFile is
defined as:
#define ProgressionSaveFile @"progression"
End Game
Within our GLESGameStates, we
have already written code to determine win and loss states. Now we will write some
functions that all of our levels can use to handle user input and
rendering for the end states (win or lose) and increment the progression
integer.
We modify the GLESGameState
class:
@interface GLESGameState : GameState { int endgame_state; @private float endgame_complete_time; } //... code snipped #define ENDGAME_GAME_IN_PROGRESS 0 #define ENDGAME_WINNING 1 #define ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access