[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] CVS: Games/Pingus/src screen_manager.cxx,1.12,1.13 screen_m
From: |
grumbel |
Subject: |
[Pingus-CVS] CVS: Games/Pingus/src screen_manager.cxx,1.12,1.13 screen_manager.hxx,1.8,1.9 |
Date: |
17 Aug 2002 12:32:25 -0000 |
Update of /usr/local/cvsroot/Games/Pingus/src
In directory dark:/tmp/cvs-serv22691
Modified Files:
screen_manager.cxx screen_manager.hxx
Log Message:
- some tweaking of the fadeout stuff, doesn't really look good, but kind of
works
Index: screen_manager.cxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/screen_manager.cxx,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- screen_manager.cxx 17 Aug 2002 11:50:09 -0000 1.12
+++ screen_manager.cxx 17 Aug 2002 12:32:23 -0000 1.13
@@ -33,9 +33,8 @@
ScreenManager* ScreenManager::instance_ = 0;
ScreenManager::ScreenManager ()
+ : last_screen (0)
{
- last_screen = 0;
-
replace_screen_arg = std::pair<Screen*, bool>(0, false);
cached_action = none;
@@ -61,7 +60,6 @@
{
Screen* current_screen = screens.back ().first;
float time_delta = delta_manager.getset ();
- int num_screens = screens.size ();
if (time_delta > 1.0)
{
@@ -80,30 +78,48 @@
GameDelta delta (time_delta, input_controller.get_events ());
last_screen = current_screen;
+
// Most likly the screen will get changed in this update call
current_screen->update (delta);
+ if (screens.empty ())
+ continue;
+
+ current_screen = screens.back ().first;
+
if (cached_action == pop)
{
real_pop_screen ();
cached_action = none;
- continue; // skip the draw once the screen has changed
}
else if (cached_action == replace)
{
real_replace_screen (replace_screen_arg.first,
replace_screen_arg.second);
cached_action = none;
- continue; // skip the draw once the screen has changed
}
-
- if (num_screens != screens.size ())
- continue;
-
- current_screen->draw ();
- Display::flip_display ();
+
+ // skip draw if the screen changed
+ if (last_screen == current_screen)
+ {
+ current_screen->draw ();
+ Display::flip_display ();
+ }
+ else
+ {
+ fade_over (last_screen, current_screen);
+ }
// Stupid hack to make this thing take less CPU
CL_System::sleep (0);
+
+ /** Delete all screens that are no longer needed */
+ for (std::vector<Screen*>::iterator i = delete_screens.begin ();
+ i != delete_screens.end ();
+ ++i)
+ {
+ delete *i;
+ }
+ delete_screens.clear ();
}
}
@@ -154,7 +170,7 @@
screens.back ().first->on_shutdown ();
if (screens.back ().second) // delete_screen
- delete screens.back ().first;
+ delete_screens.push_back(screens.back ().first);
screens.back () = std::pair<Screen*, bool> (screen, delete_screen);
screens.back ().first->on_startup ();
@@ -168,8 +184,8 @@
screens.back ().first->on_shutdown ();
if (screens.back ().second) // delete_screen
- delete screens.back ().first;
-
+ delete_screens.push_back(screens.back ().first);
+
std::cout << "ScreenManager::real_pop_screen ()" << std::endl;
screens.pop_back ();
@@ -184,16 +200,18 @@
{
DeltaManager delta_manager;
float passed_time = 0;
-
- while (passed_time < 1.0f)
+
+
+ std::list<Input::Event*> events;
+ while (passed_time < 2.0f)
{
float time_delta = delta_manager.getset ();
passed_time += time_delta;
- int border_x = int((CL_Display::get_width ()/2) * passed_time);
- int border_y = int((CL_Display::get_height ()/2) * passed_time);
+ int border_x = int((CL_Display::get_width ()/2) * passed_time/2.0f);
+ int border_y = int((CL_Display::get_height ()/2) * passed_time/2.0f);
- std::cout << "FadeOver: " << border_x << " " << border_y << std::endl;
+ //std::cout << "FadeOver: " << border_x << " " << border_y << std::endl;
new_screen->draw ();
@@ -202,6 +220,11 @@
CL_Display::get_width () -
border_x,
CL_Display::get_height () -
border_y));
old_screen->draw ();
+
+ GameDelta delta (time_delta, events);
+ new_screen->update (delta);
+ old_screen->update (delta);
+
CL_Display::pop_clip_rect ();
Display::flip_display ();
Index: screen_manager.hxx
===================================================================
RCS file: /usr/local/cvsroot/Games/Pingus/src/screen_manager.hxx,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- screen_manager.hxx 17 Aug 2002 00:30:53 -0000 1.8
+++ screen_manager.hxx 17 Aug 2002 12:32:23 -0000 1.9
@@ -35,6 +35,10 @@
or replaced) */
std::vector<std::pair<Screen*, bool> > screens;
+ /** Screens in this vector will be deleted at the end of the
+ main-loop */
+ std::vector<Screen*> delete_screens;
+
/** the screen that was used in the last update() */
Screen* last_screen;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] CVS: Games/Pingus/src screen_manager.cxx,1.12,1.13 screen_manager.hxx,1.8,1.9,
grumbel <=
- Prev by Date:
[Pingus-CVS] CVS: Games/Pingus/src screen_manager.cxx,1.11,1.12
- Next by Date:
[Pingus-CVS] CVS: Games/Pingus/src/input controller.cxx,1.15,1.16 controller.hxx,1.8,1.9
- Previous by thread:
[Pingus-CVS] CVS: Games/Pingus/src screen_manager.cxx,1.11,1.12
- Next by thread:
[Pingus-CVS] CVS: Games/Pingus/src/input controller.cxx,1.15,1.16 controller.hxx,1.8,1.9
- Index(es):