[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] CVS: Games/Pingus/src client.cxx,1.11,1.12 client.hxx,1.9,1
From: |
grumbel |
Subject: |
[Pingus-CVS] CVS: Games/Pingus/src client.cxx,1.11,1.12 client.hxx,1.9,1.10 gui_screen.cxx,1.2,1.3 gui_screen.hxx,1.2,1.3 screen_manager.cxx,1.4,1.5 screen_manager.hxx,1.5,1.6 |
Date: |
3 Aug 2002 09:59:25 -0000 |
Update of /usr/local/cvsroot/Games/Pingus/src
In directory dark:/tmp/cvs-serv2859
Modified Files:
client.cxx client.hxx gui_screen.cxx gui_screen.hxx
screen_manager.cxx screen_manager.hxx
Log Message:
some more fixes to the GUIScreen and ScreenManager pop/replace screens works
now mostly
Index: client.cxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/client.cxx,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- client.cxx 2 Aug 2002 22:55:19 -0000 1.11
+++ client.cxx 3 Aug 2002 09:59:23 -0000 1.12
@@ -119,6 +119,12 @@
{
}
+void
+Client::update (const GameDelta& delta)
+{
+ GUIScreen::update (delta);
+}
+
void
Client::update (float delta)
{
@@ -473,13 +479,6 @@
Client::draw ()
{
GUIScreen::draw ();
-}
-
-void
-Client::update (const GameDelta& delta)
-{
- update (delta.get_time ());
- GUIScreen::update (delta);
}
void
Index: client.hxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/client.hxx,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- client.hxx 2 Aug 2002 22:55:19 -0000 1.9
+++ client.hxx 3 Aug 2002 09:59:23 -0000 1.10
@@ -100,6 +100,7 @@
/** Update all parts of the world */
void update (float delta);
+ void update (const GameDelta&);
//void process_events ();
@@ -113,7 +114,6 @@
// Overloaded GUIScreen stuff
void draw ();
- void update (const GameDelta& delta);
void on_startup ();
void on_shutdown ();
Index: gui_screen.cxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/gui_screen.cxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- gui_screen.cxx 2 Aug 2002 13:17:42 -0000 1.2
+++ gui_screen.cxx 3 Aug 2002 09:59:23 -0000 1.3
@@ -46,6 +46,7 @@
GUIScreen::update (const GameDelta& delta)
{
gui_manager->update (delta);
+ update (delta.get_time ());
for (std::list<Input::Event*>::const_iterator i = delta.get_events ().begin
();
i != delta.get_events ().end (); ++i)
Index: gui_screen.hxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/gui_screen.hxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- gui_screen.hxx 2 Aug 2002 13:17:42 -0000 1.2
+++ gui_screen.hxx 3 Aug 2002 09:59:23 -0000 1.3
@@ -47,6 +47,7 @@
/** Pass a delta to the screen */
virtual void update (const GameDelta& delta);
+ virtual void update (float) {}
virtual void on_pause_press () {}
virtual void on_fast_forward_press () {}
Index: screen_manager.cxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/screen_manager.cxx,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- screen_manager.cxx 2 Aug 2002 11:25:47 -0000 1.4
+++ screen_manager.cxx 3 Aug 2002 09:59:23 -0000 1.5
@@ -31,6 +31,10 @@
ScreenManager::ScreenManager ()
{
last_screen = 0;
+
+ replace_screen_arg = std::pair<Screen*, bool>(0, false);
+ cached_action = none;
+
push_screen (PingusMenuManager::instance (), false);
}
@@ -49,7 +53,7 @@
{
Screen* current_screen = screens.back ().first;
float time_delta = delta_manager.getset ();
-
+
if (time_delta > 1.0)
{
std::cout << "PingusMenuManager: detected large delta (" << time_delta
@@ -69,17 +73,21 @@
last_screen = current_screen;
// Most likly the screen will get changed in this update call
current_screen->update (delta);
-
- if (last_screen != current_screen)
- {
- last_screen = current_screen;
- continue;
- }
-
current_screen->draw ();
Display::flip_display ();
+ if (cached_action == pop)
+ {
+ real_pop_screen ();
+ cached_action = none;
+ }
+ else if (cached_action == replace)
+ {
+ real_replace_screen (replace_screen_arg.first,
replace_screen_arg.second);
+ cached_action = none;
+ }
+
// Stupid hack to make this thing take less CPU
CL_System::sleep (0);
}
@@ -104,31 +112,40 @@
void
ScreenManager::pop_screen ()
{
- Screen* current_screen = screens.back ().first;
- bool delete_screen = screens.back ().second;
-
- current_screen->on_shutdown ();
-
- if (delete_screen)
- delete current_screen;
-
- screens.pop_back ();
+ assert (cached_action == none);
+ cached_action = pop;
}
void
ScreenManager::replace_screen (Screen* screen, bool delete_screen)
{
- Screen* current_screen = screens.back ().first;
- bool delete_c_screen = screens.back ().second;
+ assert (cached_action == none);
+ cached_action = replace;
+ replace_screen_arg = std::pair<Screen*, bool> (screen, delete_screen);
+}
- current_screen->on_shutdown ();
+void
+ScreenManager::real_replace_screen (Screen* screen, bool delete_screen)
+{
+ screens.back ().first->on_shutdown ();
- if (delete_c_screen)
- {
- delete current_screen;
- }
+ if (screens.back ().second) // delete_screen
+ delete screens.back ().first;
+
+ screens.back () = std::pair<Screen*, bool> (screen, delete_screen);
+ screens.back ().first->on_startup ();
+}
- screens.back () = std::pair<Screen*, bool>(screen, delete_screen);
+void
+ScreenManager::real_pop_screen ()
+{
+ screens.back ().first->on_shutdown ();
+
+ if (screens.back ().second) // delete_screen
+ delete screens.back ().first;
+
+ screens.pop_back ();
+ screens.back ().first->on_startup ();
}
/* EOF */
Index: screen_manager.hxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/screen_manager.hxx,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- screen_manager.hxx 2 Aug 2002 11:25:47 -0000 1.5
+++ screen_manager.hxx 3 Aug 2002 09:59:23 -0000 1.6
@@ -37,6 +37,9 @@
/** the screen that was used in the last update() */
Screen* last_screen;
+ enum { none, pop, replace } cached_action;
+ std::pair<Screen*, bool> replace_screen_arg;
+
ScreenManager ();
public:
~ScreenManager ();
@@ -54,6 +57,14 @@
/** Remove the current screen and fall back to the last one */
void pop_screen ();
+private:
+ /** Replace the current screen */
+ void real_replace_screen (Screen*, bool delete_screen);
+
+ /** Remove the current screen and fall back to the last one */
+ void real_pop_screen ();
+
+public:
static ScreenManager* instance ();
};
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] CVS: Games/Pingus/src client.cxx,1.11,1.12 client.hxx,1.9,1.10 gui_screen.cxx,1.2,1.3 gui_screen.hxx,1.2,1.3 screen_manager.cxx,1.4,1.5 screen_manager.hxx,1.5,1.6,
grumbel <=
- Prev by Date:
[Pingus-CVS] CVS: Games/Pingus/src/worldmap manager.cxx,1.6,1.7 manager.hxx,1.5,1.6 worldmap.cxx,1.5,1.6 worldmap.hxx,1.4,1.5
- Next by Date:
[Pingus-CVS] CVS: Games/Pingus/src action_button.cxx,1.6,1.7 client.cxx,1.12,1.13 client.hxx,1.10,1.11 game_session.cxx,1.4,1.5 true_server.cxx,1.3,1.4
- Previous by thread:
[Pingus-CVS] CVS: Games/Pingus/src/worldmap manager.cxx,1.6,1.7 manager.hxx,1.5,1.6 worldmap.cxx,1.5,1.6 worldmap.hxx,1.4,1.5
- Next by thread:
[Pingus-CVS] CVS: Games/Pingus/src action_button.cxx,1.6,1.7 client.cxx,1.12,1.13 client.hxx,1.10,1.11 game_session.cxx,1.4,1.5 true_server.cxx,1.3,1.4
- Index(es):