[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] r3594 - trunk/pingus/src
From: |
grumbel at BerliOS |
Subject: |
[Pingus-CVS] r3594 - trunk/pingus/src |
Date: |
Mon, 30 Jun 2008 18:37:54 +0200 |
Author: grumbel
Date: 2008-06-30 18:37:49 +0200 (Mon, 30 Jun 2008)
New Revision: 3594
Modified:
trunk/pingus/src/file_reader.cpp
trunk/pingus/src/file_reader.hpp
trunk/pingus/src/pingus_demo.cpp
trunk/pingus/src/pingus_demo.hpp
trunk/pingus/src/server_event.cpp
trunk/pingus/src/sexpr_file_reader.cpp
trunk/pingus/src/sexpr_file_reader.hpp
Log:
Changed PingusDemo to use FileReader
Modified: trunk/pingus/src/file_reader.cpp
===================================================================
--- trunk/pingus/src/file_reader.cpp 2008-06-30 04:21:02 UTC (rev 3593)
+++ trunk/pingus/src/file_reader.cpp 2008-06-30 16:37:49 UTC (rev 3594)
@@ -201,15 +201,24 @@
FileReader
FileReader::parse(const Pathname& pathname)
{
+ return FileReader::parse(pathname.get_sys_path());
+}
+
+std::vector<FileReader>
+FileReader::parse_many(const Pathname& pathname)
+{
boost::shared_ptr<lisp::Lisp> sexpr =
lisp::Parser::parse(pathname.get_sys_path());
if (sexpr)
{
- return SExprFileReader(sexpr->get_list_elem(0));
+ std::vector<FileReader> sections;
+ for(size_t i = 0; i < sexpr->get_list_size(); ++i)
+ sections.push_back(SExprFileReader(sexpr->get_list_elem(i)));
+ return sections;
}
else
{
- return FileReader();
- }
+ return std::vector<FileReader>();
+ }
}
/* EOF */
Modified: trunk/pingus/src/file_reader.hpp
===================================================================
--- trunk/pingus/src/file_reader.hpp 2008-06-30 04:21:02 UTC (rev 3593)
+++ trunk/pingus/src/file_reader.hpp 2008-06-30 16:37:49 UTC (rev 3594)
@@ -77,6 +77,7 @@
static FileReader parse(const std::string& filename);
static FileReader parse(const Pathname& pathname);
+ static std::vector<FileReader> parse_many(const Pathname& pathname);
private:
boost::shared_ptr<FileReaderImpl> impl;
};
Modified: trunk/pingus/src/pingus_demo.cpp
===================================================================
--- trunk/pingus/src/pingus_demo.cpp 2008-06-30 04:21:02 UTC (rev 3593)
+++ trunk/pingus/src/pingus_demo.cpp 2008-06-30 16:37:49 UTC (rev 3594)
@@ -20,37 +20,34 @@
#include <stdexcept>
#include <fstream>
#include "pathname.hpp"
+#include "file_reader.hpp"
#include "server_event.hpp"
+#include "pingus_error.hpp"
#include "pingu_enums.hpp"
#include "pingus_demo.hpp"
PingusDemo::PingusDemo(const Pathname& pathname)
{
- std::ifstream in(pathname.get_sys_path().c_str());
- std::string line;
-
- while(std::getline(in, line))
- {
- char action[256];
- int time;
- int id;
+ std::vector<FileReader> lines = FileReader::parse_many(pathname);
- if (sscanf(line.c_str(), "(pingu-action (time %d) (id %d) (action
\"%s\"))", &time, &id, action) == 3)
+ if (!lines.empty())
+ {
+ PingusError::raise("'" + pathname.str() + "', demo file is empty");
+ }
+ else
+ {
+ if (lines.front().get_name() == "level")
{
- ServerEvent::make_pingu_action_event(time, id,
Actions::action_from_string(action));
+ if (!lines.front().read_string("name", levelname))
+ {
+ PingusError::raise("(level (name ...)) entry missing in demo
file '" + pathname.str() + "'");
+ }
}
- else if (sscanf(line.c_str(), "(armageddon (time %d))", &time) == 1)
+
+ for(std::vector<FileReader>::iterator i = lines.begin()+1; i !=
lines.end(); ++i)
{
- ServerEvent::make_armageddon_event(time);
+ events.push_back(ServerEvent(*i));
}
- else if (sscanf(line.c_str(), "(finish (time %d))", &time) == 1)
- {
- ServerEvent::make_finish_event(time);
- }
- else
- {
- throw std::runtime_error("Couldn't open " + pathname.str());
- }
}
}
Modified: trunk/pingus/src/pingus_demo.hpp
===================================================================
--- trunk/pingus/src/pingus_demo.hpp 2008-06-30 04:21:02 UTC (rev 3593)
+++ trunk/pingus/src/pingus_demo.hpp 2008-06-30 16:37:49 UTC (rev 3594)
@@ -26,6 +26,9 @@
class PingusDemo
{
private:
+ std::string levelname;
+ std::vector<ServerEvent> events;
+
public:
PingusDemo(const Pathname& pathname);
Modified: trunk/pingus/src/server_event.cpp
===================================================================
--- trunk/pingus/src/server_event.cpp 2008-06-30 04:21:02 UTC (rev 3593)
+++ trunk/pingus/src/server_event.cpp 2008-06-30 16:37:49 UTC (rev 3594)
@@ -40,6 +40,11 @@
type = ARMAGEDDON_EVENT;
reader.read_int("time", time_stamp);
}
+ else if (reader.get_name() == "finish")
+ {
+ type = FINISH_EVENT;
+ reader.read_int("time", time_stamp);
+ }
else if (reader.get_name() == "pingu-action")
{
type = PINGU_ACTION_EVENT;
Modified: trunk/pingus/src/sexpr_file_reader.cpp
===================================================================
--- trunk/pingus/src/sexpr_file_reader.cpp 2008-06-30 04:21:02 UTC (rev
3593)
+++ trunk/pingus/src/sexpr_file_reader.cpp 2008-06-30 16:37:49 UTC (rev
3594)
@@ -26,7 +26,7 @@
#include "math/vector2i.hpp"
#include "file_reader_impl.hpp"
#include "sexpr_file_reader.hpp"
-
+
class SExprFileReaderImpl: public FileReaderImpl
{
public:
@@ -253,5 +253,5 @@
: FileReader(boost::shared_ptr<FileReaderImpl>(new
SExprFileReaderImpl(lisp)))
{
}
-
+
/* EOF */
Modified: trunk/pingus/src/sexpr_file_reader.hpp
===================================================================
--- trunk/pingus/src/sexpr_file_reader.hpp 2008-06-30 04:21:02 UTC (rev
3593)
+++ trunk/pingus/src/sexpr_file_reader.hpp 2008-06-30 16:37:49 UTC (rev
3594)
@@ -22,7 +22,7 @@
#include "file_reader.hpp"
#include "lisp/lisp.hpp"
-
+
/** */
class SExprFileReader : public FileReader
{
@@ -30,7 +30,7 @@
public:
SExprFileReader(boost::shared_ptr<lisp::Lisp> lisp);
};
-
+
#endif
/* EOF */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] r3594 - trunk/pingus/src,
grumbel at BerliOS <=