[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] r3755 - trunk/pingus/src/screen
From: |
grumbel at BerliOS |
Subject: |
[Pingus-CVS] r3755 - trunk/pingus/src/screen |
Date: |
Wed, 9 Jul 2008 15:01:17 +0200 |
Author: grumbel
Date: 2008-07-09 15:01:17 +0200 (Wed, 09 Jul 2008)
New Revision: 3755
Modified:
trunk/pingus/src/screen/screen_manager.cpp
trunk/pingus/src/screen/screen_manager.hpp
Log:
Hacked together a little input record thing, needs to be polished some more and
cleaned up
Modified: trunk/pingus/src/screen/screen_manager.cpp
===================================================================
--- trunk/pingus/src/screen/screen_manager.cpp 2008-07-09 13:00:28 UTC (rev
3754)
+++ trunk/pingus/src/screen/screen_manager.cpp 2008-07-09 13:01:17 UTC (rev
3755)
@@ -16,6 +16,7 @@
#include "SDL.h"
#include <iostream>
+#include <fstream>
#include "../globals.hpp"
#include "math/size.hpp"
#include "pathname.hpp"
@@ -27,7 +28,114 @@
#include "../display/drawing_context.hpp"
#include "../input/controller.hpp"
#include "../input/manager.hpp"
+
+template<class C>
+void write(std::ostream& out, C value)
+{
+ out.write(reinterpret_cast<char*>(&value), sizeof(value));
+}
+template<class C>
+void read(std::istream& out, C& value)
+{
+ out.read(reinterpret_cast<char*>(&value), sizeof(value));
+}
+
+void write_events(std::ostream& out, const std::vector<Input::Event>& events)
+{
+ write(out, events.size());
+ for(std::vector<Input::Event>::const_iterator i = events.begin();
+ i != events.end();
+ ++i)
+ {
+ write(out, *i);
+ }
+}
+
+void read_events(std::istream& out, std::vector<Input::Event>& events)
+{
+ std::vector<Input::Event>::size_type len;
+ read(out, len);
+ for(std::vector<Input::Event>::size_type i = 0; i < len; ++i)
+ {
+ Input::Event event;
+ read(out, event);
+ events.push_back(event);
+ }
+}
+
+void read_event(std::istream& out, Input::Event& event)
+{
+ read(out, event.type);
+ switch(event.type)
+ {
+ case Input::BUTTON_EVENT_TYPE:
+ read(out, event.button.name);
+ read(out, event.button.state);
+ break;
+
+ case Input::POINTER_EVENT_TYPE:
+ read(out, event.pointer.name);
+ read(out, event.pointer.x);
+ read(out, event.pointer.y);
+ break;
+
+ case Input::AXIS_EVENT_TYPE:
+ read(out, event.axis.name);
+ read(out, event.axis.dir);
+ break;
+
+ case Input::SCROLLER_EVENT_TYPE:
+ read(out, event.scroll.name);
+ read(out, event.scroll.x_delta);
+ read(out, event.scroll.y_delta);
+ break;
+
+ case Input::KEYBOARD_EVENT_TYPE:
+ read(out, event.keyboard.key);
+ break;
+
+ default:
+ assert(!"Unknown Event type");
+ }
+}
+
+void write_event(std::ostream& out, const Input::Event& event)
+{
+ write(out, event.type);
+ switch(event.type)
+ {
+ case Input::BUTTON_EVENT_TYPE:
+ write(out, event.button.name);
+ write(out, event.button.state);
+ break;
+
+ case Input::POINTER_EVENT_TYPE:
+ write(out, event.pointer.name);
+ write(out, event.pointer.x);
+ write(out, event.pointer.y);
+ break;
+
+ case Input::AXIS_EVENT_TYPE:
+ write(out, event.axis.name);
+ write(out, event.axis.dir);
+ break;
+
+ case Input::SCROLLER_EVENT_TYPE:
+ write(out, event.scroll.name);
+ write(out, event.scroll.x_delta);
+ write(out, event.scroll.y_delta);
+ break;
+
+ case Input::KEYBOARD_EVENT_TYPE:
+ write(out, event.keyboard.key);
+ break;
+
+ default:
+ assert(!"Unknown Event type");
+ }
+}
+
ScreenManager* ScreenManager::instance_ = 0;
ScreenManager::ScreenManager()
@@ -65,6 +173,12 @@
{
Uint32 ticks = SDL_GetTicks();
float delta = float(ticks - last_ticks)/1000.0f;
+
+ if (0)
+ if (0)
+ write(std::cerr, delta);
+ else
+ read(std::cin, delta);
// previous frame took more than one second
if (delta > 1.0)
@@ -98,11 +212,25 @@
// update the input, break away as soon as the current screen changed
input_manager->update(delta);
- std::vector<Input::Event> events = input_controller->poll_events();
+ std::vector<Input::Event> events;
+
+ if (1)
+ {
+ 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);
+
last_screen->update(*i);
if (last_screen != get_current_screen())
{
@@ -126,7 +254,6 @@
if (swcursor_enabled)
{
- Vector2f mouse_pos =
Input::Controller::current()->get_pointer(Input::STANDARD_POINTER)->get_pos();
cursor.draw(mouse_pos.x, mouse_pos.y, Display::get_screen());
}
@@ -162,7 +289,6 @@
screens.push_back(ScreenPtr(screen));
screen->on_startup();
}
-
void
ScreenManager::pop_screen()
{
Modified: trunk/pingus/src/screen/screen_manager.hpp
===================================================================
--- trunk/pingus/src/screen/screen_manager.hpp 2008-07-09 13:00:28 UTC (rev
3754)
+++ trunk/pingus/src/screen/screen_manager.hpp 2008-07-09 13:01:17 UTC (rev
3755)
@@ -21,6 +21,7 @@
#include <memory>
#include <boost/smart_ptr.hpp>
#include <vector>
+#include "math/vector2f.hpp"
#include "sprite.hpp"
namespace Input {
@@ -53,6 +54,8 @@
or replaced) */
std::vector<ScreenPtr> screens;
+ Vector2f mouse_pos;
+
public:
ScreenManager ();
~ScreenManager();
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3755 - trunk/pingus/src/screen,
grumbel at BerliOS <=