pingus-cvs
[Top][All Lists]
Advanced

[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 ();
 };
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]