summaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
Diffstat (limited to 'src/client')
-rw-r--r--src/client/game.c4
-rwxr-xr-xsrc/client/interface.c1
-rw-r--r--src/client/screen.c67
-rw-r--r--src/client/screen.h2
4 files changed, 47 insertions, 27 deletions
diff --git a/src/client/game.c b/src/client/game.c
index a20e3fa..7eaab20 100644
--- a/src/client/game.c
+++ b/src/client/game.c
@@ -108,8 +108,6 @@ void quitGame()
quitScreenTable();
quitScreenBrowser();
- destroyList(listHelp);
-
printf("quit..\n");
exit(0);
@@ -119,7 +117,7 @@ void startGame()
{
initGame();
- setScreen("mainMenu");
+ startScreen("mainMenu");
eventSDL();
quitGame();
diff --git a/src/client/interface.c b/src/client/interface.c
index 5b4b6b4..3ae6121 100755
--- a/src/client/interface.c
+++ b/src/client/interface.c
@@ -209,6 +209,7 @@ int eventAction()
case USR_EVT_TIMER:
drawScreen();
eventScreen();
+ switchScreen();
break;
default:
diff --git a/src/client/screen.c b/src/client/screen.c
index a96dd9e..f08d89a 100644
--- a/src/client/screen.c
+++ b/src/client/screen.c
@@ -13,6 +13,8 @@
//#define DEBUG_TIME_DRAW
static screen_t *currentScreen;
+static screen_t *futureScreen;
+
static list_t *listScreen;
static bool_t isScreenInit = FALSE;
@@ -63,24 +65,17 @@ void registerScreen(screen_t *p)
void initScreen()
{
listScreen = newList();
+
currentScreen = NULL;
+ futureScreen = NULL;
+
isScreenInit = TRUE;
}
-void setScreen(char *name)
+static screen_t* findScreen(char *name)
{
- int i;
screen_t *this;
-
- assert( name != NULL );
-
- if( currentScreen != NULL &&
- strcmp(currentScreen->name, name) == 0 )
- {
- return;
- }
-
- printf("switch screen %s..\n", name);
+ int i;
for( i = 0 ; i < listScreen->count ; i++ )
{
@@ -89,23 +84,47 @@ void setScreen(char *name)
if( strcmp(name, this->name) == 0 )
{
- flushLayer();
+ return this;
+ }
+ }
+
+ return NULL;
+}
+
+void setScreen(char *name)
+{
+ futureScreen = findScreen(name);
+ assert( futureScreen != NULL );
+}
- if( currentScreen != NULL )
- {
- printf("stop screen %s..\n", currentScreen->name);
- currentScreen->fce_stop();
- }
+void switchScreen()
+{
+ if( futureScreen == NULL )
+ {
+ return;
+ }
- currentScreen = this;
- printf("start screen %s..\n", currentScreen->name);
- currentScreen->fce_start();
+ flushLayer();
- return;
- }
+ if( currentScreen != NULL )
+ {
+ printf("stop screen %s..\n", currentScreen->name);
+ currentScreen->fce_stop();
}
- assert( ! "screen sa nenasiel !" );
+ currentScreen = futureScreen;
+ futureScreen = NULL;
+
+ //printf("switch screen %s..\n", currentScreen->name);
+
+ printf("start screen %s..\n", currentScreen->name);
+ currentScreen->fce_start();
+}
+
+void startScreen(char *name)
+{
+ setScreen(name);
+ switchScreen();
}
char* getScreen()
diff --git a/src/client/screen.h b/src/client/screen.h
index b0d1593..55e5bb6 100644
--- a/src/client/screen.h
+++ b/src/client/screen.h
@@ -24,6 +24,8 @@ extern void destroyScreen(screen_t *p);
extern void registerScreen(screen_t *p);
extern void initScreen();
extern void setScreen(char *name);
+extern void switchScreen();
+extern void startScreen(char *name);
extern char* getScreen();
extern void drawScreen();
extern void eventScreen();