[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] r3757 - in trunk/pingus/src: input screen
From: |
grumbel at BerliOS |
Subject: |
[Pingus-CVS] r3757 - in trunk/pingus/src: input screen |
Date: |
Thu, 10 Jul 2008 07:38:43 +0200 |
Author: grumbel
Date: 2008-07-10 07:38:42 +0200 (Thu, 10 Jul 2008)
New Revision: 3757
Modified:
trunk/pingus/src/input/controller.cpp
trunk/pingus/src/input/controller.hpp
trunk/pingus/src/screen/screen_manager.cpp
trunk/pingus/src/screen/screen_manager.hpp
Log:
Cleaned up Input recording code a bit
Modified: trunk/pingus/src/input/controller.cpp
===================================================================
--- trunk/pingus/src/input/controller.cpp 2008-07-10 05:37:25 UTC (rev
3756)
+++ trunk/pingus/src/input/controller.cpp 2008-07-10 05:38:42 UTC (rev
3757)
@@ -19,7 +19,7 @@
#include "controller.hpp"
namespace Input {
-
+
Controller* Controller::current_ = 0;
Controller*
@@ -232,14 +232,21 @@
events.push_back(makeKeyboardEvent(key));
}
-std::vector<Event>
-Controller::poll_events()
+void
+Controller::clear_events()
{
- std::vector<Event> old_events = events;
events.clear();
- return old_events;
}
+void
+Controller::poll_events(std::vector<Event>& out_events)
+{
+ for(std::vector<Event>::iterator i = events.begin(); i != events.end(); ++i)
+ out_events.push_back(*i);
+
+ events.clear();
+}
+
} // namespace Input
/* EOF */
Modified: trunk/pingus/src/input/controller.hpp
===================================================================
--- trunk/pingus/src/input/controller.hpp 2008-07-10 05:37:25 UTC (rev
3756)
+++ trunk/pingus/src/input/controller.hpp 2008-07-10 05:38:42 UTC (rev
3757)
@@ -29,7 +29,7 @@
class ControllerPointer;
class ControllerScroller;
class ControllerKeyboard;
-
+
class Controller
{
@@ -48,7 +48,8 @@
std::vector<Event> events;
public:
- std::vector<Event> poll_events();
+ void clear_events();
+ void poll_events(std::vector<Event>& events);
Controller(const ControllerDescription& desc);
~Controller();
@@ -76,7 +77,7 @@
Controller(const Controller&);
Controller& operator= (const Controller&);
};
-
+
} // namespace Input
#endif
Modified: trunk/pingus/src/screen/screen_manager.cpp
===================================================================
--- trunk/pingus/src/screen/screen_manager.cpp 2008-07-10 05:37:25 UTC (rev
3756)
+++ trunk/pingus/src/screen/screen_manager.cpp 2008-07-10 05:38:42 UTC (rev
3757)
@@ -139,8 +139,10 @@
ScreenManager* ScreenManager::instance_ = 0;
ScreenManager::ScreenManager()
- : display_gc(new DrawingContext())
-{
+ : display_gc(new DrawingContext()),
+ record_input(false),
+ playback_input(false)
+{
assert(instance_ == 0);
instance_ = this;
@@ -168,18 +170,45 @@
show_swcursor(swcursor_enabled);
Uint32 last_ticks = SDL_GetTicks();
+ float delta;
+ std::vector<Input::Event> events;
while (!screens.empty())
{
- Uint32 ticks = SDL_GetTicks();
- float delta = float(ticks - last_ticks)/1000.0f;
+ events.clear();
- if (0)
- if (0)
- write(std::cerr, delta);
- else
+ // Get time and update Input::Events
+ if (playback_input)
+ {
+ // Get Time
read(std::cin, delta);
+ // Update InputManager so that SDL_QUIT and stuff can be handled,
even if the basic events are taken from record
+ input_manager->update(delta);
+ input_controller->clear_events();
+ read_events(std::cin, events);
+ }
+ else
+ {
+ // Get Time
+ Uint32 ticks = SDL_GetTicks();
+ delta = float(ticks - last_ticks)/1000.0f;
+ last_ticks = ticks;
+
+ // Update InputManager and get Events
+ input_manager->update(delta);
+ input_controller->poll_events(events);
+ }
+
+ if (record_input)
+ {
+ write(std::cerr, delta);
+ write_events(std::cerr, events);
+ }
+
+ if (swcursor_enabled)
+ cursor.update(delta);
+
// previous frame took more than one second
if (delta > 1.0)
{
@@ -188,11 +217,8 @@
<< "), ignoring and doing frameskip" << std::endl;
}
else
- {
- if (swcursor_enabled)
- cursor.update(delta);
-
- update(delta);
+ {
+ update(delta, events);
// cap the framerate at the desired value
if (delta < 1.0f / desired_fps) {
@@ -200,34 +226,16 @@
SDL_Delay(static_cast<Uint32>(1000 *((1.0f / desired_fps) -
delta)));
}
}
-
- last_ticks = ticks;
}
}
void
-ScreenManager::update(float delta)
+ScreenManager::update(float delta, const std::vector<Input::Event>& events)
{
ScreenPtr last_screen = get_current_screen();
-
- // update the input, break away as soon as the current screen changed
- input_manager->update(delta);
- std::vector<Input::Event> events;
-
- if (1)
+
+ for(std::vector<Input::Event>::const_iterator i = events.begin(); i !=
events.end(); ++i)
{
- events = input_controller->poll_events();
- //write_events(std::cerr, events);
- }
- else
- {
- read_events(std::cin, events);
- }
-
- for(std::vector<Input::Event>::iterator i = events.begin();
- i != events.end();
- ++i)
- {
if (i->type == Input::POINTER_EVENT_TYPE && i->pointer.name ==
Input::STANDARD_POINTER)
mouse_pos = Vector2f(i->pointer.x, i->pointer.y);
@@ -246,23 +254,23 @@
return;
}
- // Draw screen
- if (get_current_screen()->draw(*display_gc))
- {
- display_gc->render(Display::get_screen(), Rect(Vector2i(0,0),
Size(Display::get_width(),
-
Display::get_height())));
-
- if (swcursor_enabled)
- {
- cursor.draw(mouse_pos.x, mouse_pos.y, Display::get_screen());
- }
-
- if (print_fps)
- fps_counter->draw();
-
- Display::flip_display();
- display_gc->clear();
- }
+ // Draw screen to DrawingContext
+ get_current_screen()->draw(*display_gc);
+
+ // Render the DrawingContext to the screen
+ display_gc->render(Display::get_screen(), Rect(Vector2i(0,0),
Size(Display::get_width(),
+
Display::get_height())));
+ display_gc->clear();
+
+ // Draw the mouse pointer
+ if (swcursor_enabled)
+ cursor.draw(mouse_pos.x, mouse_pos.y, Display::get_screen());
+
+ // Draw FPS Counter
+ if (print_fps)
+ fps_counter->draw();
+
+ Display::flip_display();
}
ScreenPtr
Modified: trunk/pingus/src/screen/screen_manager.hpp
===================================================================
--- trunk/pingus/src/screen/screen_manager.hpp 2008-07-10 05:37:25 UTC (rev
3756)
+++ trunk/pingus/src/screen/screen_manager.hpp 2008-07-10 05:38:42 UTC (rev
3757)
@@ -26,6 +26,7 @@
namespace Input {
class Manager;
+class Event;
class Controller;
}
@@ -56,6 +57,9 @@
Vector2f mouse_pos;
+ bool record_input;
+ bool playback_input;
+
public:
ScreenManager ();
~ScreenManager();
@@ -66,7 +70,7 @@
not return until the somebody signals a quit() */
void display();
- void update(float delta);
+ void update(float delta, const std::vector<Input::Event>& events);
/** Replace the current screen */
void replace_screen(Screen*);
@@ -80,11 +84,11 @@
/** Remove all screens */
void pop_all_screens();
+ void show_swcursor(bool v);
+
/** @return a pointer to the current Screen */
ScreenPtr get_current_screen();
- void show_swcursor(bool v);
-
private:
/** FadeOver test*/
void fade_over(ScreenPtr old_screen, ScreenPtr new_screen);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3757 - in trunk/pingus/src: input screen,
grumbel at BerliOS <=