[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] r3599 - in trunk/pingus/src: . components
From: |
grumbel at BerliOS |
Subject: |
[Pingus-CVS] r3599 - in trunk/pingus/src: . components |
Date: |
Mon, 30 Jun 2008 22:34:41 +0200 |
Author: grumbel
Date: 2008-06-30 22:34:40 +0200 (Mon, 30 Jun 2008)
New Revision: 3599
Modified:
trunk/pingus/src/capture_rectangle.cpp
trunk/pingus/src/components/playfield.cpp
trunk/pingus/src/demo_session.cpp
trunk/pingus/src/demo_session.hpp
trunk/pingus/src/pingus_demo.cpp
trunk/pingus/src/pingus_main.cpp
Log:
Demo playback working again
Modified: trunk/pingus/src/capture_rectangle.cpp
===================================================================
--- trunk/pingus/src/capture_rectangle.cpp 2008-06-30 19:41:27 UTC (rev
3598)
+++ trunk/pingus/src/capture_rectangle.cpp 2008-06-30 20:34:40 UTC (rev
3599)
@@ -51,7 +51,7 @@
if (pingu && pingu->catchable())
{
// Draw the capture rectangle
- if (pingu->change_allowed(client->get_action_name()))
+ if (client && pingu->change_allowed(client->get_action_name()))
{
sc.color().draw(good, pingu->get_center_pos() + Vector3f(0, 0,
1000));
}
Modified: trunk/pingus/src/components/playfield.cpp
===================================================================
--- trunk/pingus/src/components/playfield.cpp 2008-06-30 19:41:27 UTC (rev
3598)
+++ trunk/pingus/src/components/playfield.cpp 2008-06-30 20:34:40 UTC (rev
3599)
@@ -173,11 +173,14 @@
void
Playfield::on_primary_button_press(int x, int y)
{
- current_pingu = current_pingu_find(state.screen2world( Vector2i(x,y) ));
+ if (client)
+ {
+ current_pingu = current_pingu_find(state.screen2world( Vector2i(x,y) ));
- if (current_pingu)
- {
- server->send_pingu_action_event(current_pingu,
client->get_action_name());
+ if (current_pingu)
+ {
+ server->send_pingu_action_event(current_pingu,
client->get_action_name());
+ }
}
}
Modified: trunk/pingus/src/demo_session.cpp
===================================================================
--- trunk/pingus/src/demo_session.cpp 2008-06-30 19:41:27 UTC (rev 3598)
+++ trunk/pingus/src/demo_session.cpp 2008-06-30 20:34:40 UTC (rev 3599)
@@ -26,6 +26,9 @@
#include "gui/gui_manager.hpp"
#include "display/scene_context.hpp"
#include "pingus_demo.hpp"
+#include "components/playfield.hpp"
+#include "screen/screen_manager.hpp"
+#include "display/display.hpp"
#include "demo_session.hpp"
DemoSession::DemoSession(const Pathname& pathname)
@@ -33,12 +36,27 @@
// Load Demo file
demo = std::auto_ptr<PingusDemo>(new PingusDemo(pathname));
+ events = demo->get_events();
+ // Reverse the vector so that we can use pop_back()
+ std::reverse(events.begin(), events.end());
+
// Create server
server = std::auto_ptr<Server>(new
Server(PingusLevel(Pathname(demo->get_levelname(), Pathname::DATA_PATH))));
// Create GUI
pcounter = new PingusCounter(server.get());
gui_manager->add(pcounter, true);
+
+ int world_width = server->get_world()->get_width();
+ int world_height = server->get_world()->get_height();
+
+ playfield = new Playfield(server.get(), 0,
+ Rect(Vector2i(Math::max((Display::get_width() -
world_width)/2, 0),
+ Math::max((Display::get_height() -
world_height)/2, 0)),
+ Size(Math::min(Display::get_width(),
world_width),
+ Math::min(Display::get_height(),
world_height))));
+
+ gui_manager->add(playfield, true);
}
DemoSession::~DemoSession()
@@ -101,28 +119,22 @@
// FIXME: Duplicate all timing code here?!
server->update();
update_demo();
-
- int skip_count = 0;
- while (1) //CL_Keyboard::get_keycode(CL_KEY_SPACE) && skip_count < 10)
- {
- ++skip_count;
- server->update();
- update_demo();
- }
}
void
DemoSession::update_demo()
{
-#if 0
while(!events.empty() && events.back().time_stamp == server->get_time())
{
ServerEvent& event = events.back();
- std::cout << "Sending: ";
- event.write(std::cout);
+ if (0)
+ {
+ std::cout << "Sending: ";
+ event.write(std::cout);
+ }
- event.send(server);
+ event.send(server.get());
events.pop_back();
}
@@ -131,7 +143,40 @@
{
std::cout << "DemoPlayer Bug: We missed a timestamp: " <<
events.back().time_stamp << std::endl;
}
-#endif
}
+
+void
+DemoSession::on_pause_press()
+{
+ std::cout << "Pause Pressed" << std::endl;
+ for(std::vector<ServerEvent>::iterator i = events.begin(); i !=
events.end(); ++i)
+ {
+ std::cout << "Event: ";
+ i->write(std::cout);
+ }
+}
+
+void
+DemoSession::on_fast_forward_press()
+{
+ std::cout << "Fast Forward Pressed: " << events.size() << " " <<
server->get_time() << std::endl;
+ server->set_fast_forward(!server->get_fast_forward());
+}
+
+void
+DemoSession::on_escape_press()
+{
+ std::cout << "Escape Pressed" << std::endl;
+ server->send_finish_event();
+ ScreenManager::instance()->pop_screen();
+}
+
+void
+DemoSession::process_scroll_event(const Input::ScrollEvent& ev)
+{
+ // FIXME: Rounding considered evil?
+ playfield->scroll(static_cast<int>(-ev.x_delta),
+ static_cast<int>(-ev.y_delta));
+}
/* EOF */
Modified: trunk/pingus/src/demo_session.hpp
===================================================================
--- trunk/pingus/src/demo_session.hpp 2008-06-30 19:41:27 UTC (rev 3598)
+++ trunk/pingus/src/demo_session.hpp 2008-06-30 20:34:40 UTC (rev 3599)
@@ -22,6 +22,8 @@
#include <memory>
#include "screen/gui_screen.hpp"
+#include <vector>
+#include "server_event.hpp"
class Server;
class XMLPDF;
@@ -36,8 +38,9 @@
class DemoSession : public GUIScreen
{
private:
- std::auto_ptr<Server> server;
+ std::auto_ptr<Server> server;
std::auto_ptr<PingusDemo> demo;
+ std::vector<ServerEvent> events;
PingusCounter* pcounter;
Playfield* playfield;
@@ -54,6 +57,11 @@
void update(float delta);
void update_demo();
+ void on_pause_press ();
+ void on_fast_forward_press ();
+ void on_escape_press ();
+
+ void process_scroll_event(const Input::ScrollEvent& ev);
private:
DemoSession (const DemoSession&);
DemoSession& operator= (const DemoSession&);
Modified: trunk/pingus/src/pingus_demo.cpp
===================================================================
--- trunk/pingus/src/pingus_demo.cpp 2008-06-30 19:41:27 UTC (rev 3598)
+++ trunk/pingus/src/pingus_demo.cpp 2008-06-30 20:34:40 UTC (rev 3599)
@@ -30,7 +30,7 @@
{
std::vector<FileReader> lines = FileReader::parse_many(pathname);
- if (!lines.empty())
+ if (lines.empty())
{
PingusError::raise("'" + pathname.str() + "', demo file is empty");
}
Modified: trunk/pingus/src/pingus_main.cpp
===================================================================
--- trunk/pingus/src/pingus_main.cpp 2008-06-30 19:41:27 UTC (rev 3598)
+++ trunk/pingus/src/pingus_main.cpp 2008-06-30 20:34:40 UTC (rev 3599)
@@ -34,6 +34,7 @@
#include "lisp/parser.hpp"
#include "editor/editor_level.hpp"
#include "string_util.hpp"
+#include "demo_session.hpp"
#include "sexpr_file_reader.hpp"
#if defined(__APPLE__)
@@ -700,7 +701,7 @@
}
}
else if (cmd_options.credits.is_set() && cmd_options.credits.get())
- { // just show the credits screen
+ { // just show the credits screen
ScreenManager::instance()->push_screen(Credits::instance(), false);
}
else if (cmd_options.font.is_set() && cmd_options.font.get())
@@ -725,11 +726,19 @@
ScreenManager::instance()->push_screen (editor, true);
}
else if (cmd_options.rest.is_set())
- { // just start the map that was passed on the command line
- ScreenManager::instance()->push_screen
- (new
StartScreen(PLFResMgr::load_plf_from_filename(Pathname(cmd_options.rest.get(),
-
Pathname::SYSTEM_PATH))),
- true);
+ { // just start the map that was passed on the command line
+ if (StringUtil::has_suffix(cmd_options.rest.get(), ".pingus-demo"))
+ { // Demo file
+ ScreenManager::instance()->push_screen
+ (new DemoSession(Pathname(cmd_options.rest.get(),
Pathname::SYSTEM_PATH)), true);
+ }
+ else
+ { // Level file
+ ScreenManager::instance()->push_screen
+ (new
StartScreen(PLFResMgr::load_plf_from_filename(Pathname(cmd_options.rest.get(),
+
Pathname::SYSTEM_PATH))),
+ true);
+ }
}
else // start a normal game
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3599 - in trunk/pingus/src: . components,
grumbel at BerliOS <=