X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fstatistics.cpp;h=5eb0cefd07c210497b7e03b8f4341106f5422f5b;hb=aec9bf199857d0ae1a5dc54cd96ae37177493deb;hp=8c0b1f8097fc198b9ac3e59e81d1fa966d7faa08;hpb=7c579d3ef0a6667c18b53dad84c63c05d2760a84;p=supertux.git diff --git a/src/statistics.cpp b/src/statistics.cpp index 8c0b1f809..5eb0cefd0 100644 --- a/src/statistics.cpp +++ b/src/statistics.cpp @@ -20,8 +20,8 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include -#include -#include +#include +#include #include #include #include "video/drawing_context.hpp" @@ -32,6 +32,7 @@ #include "main.hpp" #include "statistics.hpp" #include "log.hpp" +#include "scripting/squirrel_util.hpp" namespace { const int nv_coins = std::numeric_limits::min(); @@ -57,6 +58,7 @@ Statistics::~Statistics() { } +/* void Statistics::parse(const lisp::Lisp& reader) { @@ -80,6 +82,42 @@ Statistics::write(lisp::Writer& writer) writer.write_int("secrets-found", secrets); writer.write_int("secrets-found-total", total_secrets); } +*/ + +void +Statistics::serialize_to_squirrel(HSQUIRRELVM vm) +{ + // TODO: there's some bug in the unserialization routines that breaks stuff when an empty statistics table is written, so -- as a workaround -- let's make sure we will actually write something first + if (!((coins != nv_coins) || (total_coins != nv_coins) || (badguys != nv_badguys) || (total_badguys != nv_badguys) || (time != nv_time) || (secrets != nv_secrets) || (total_secrets != nv_secrets))) return; + + sq_pushstring(vm, "statistics", -1); + sq_newtable(vm); + if (coins != nv_coins) Scripting::store_int(vm, "coins-collected", coins); + if (total_coins != nv_coins) Scripting::store_int(vm, "coins-collected-total", total_coins); + if (badguys != nv_badguys) Scripting::store_int(vm, "badguys-killed", badguys); + if (total_badguys != nv_badguys) Scripting::store_int(vm, "badguys-killed-total", total_badguys); + if (time != nv_time) Scripting::store_float(vm, "time-needed", time); + if (secrets != nv_secrets) Scripting::store_int(vm, "secrets-found", secrets); + if (total_secrets != nv_secrets) Scripting::store_int(vm, "secrets-found-total", total_secrets); + sq_createslot(vm, -3); +} + +void +Statistics::unserialize_from_squirrel(HSQUIRRELVM vm) +{ + sq_pushstring(vm, "statistics", -1); + if(SQ_FAILED(sq_get(vm, -2))) { + return; + } + Scripting::get_int(vm, "coins-collected", coins); + Scripting::get_int(vm, "coins-collected-total", total_coins); + Scripting::get_int(vm, "badguys-killed", badguys); + Scripting::get_int(vm, "badguys-killed-total", total_badguys); + Scripting::get_float(vm, "time-needed", time); + Scripting::get_int(vm, "secrets-found", secrets); + Scripting::get_int(vm, "secrets-found-total", total_secrets); + sq_pop(vm, 1); +} //define TOTAL_DISPLAY_TIME 3400 //define FADING_TIME 600 @@ -267,6 +305,15 @@ Statistics::draw_endseq_panel(DrawingContext& context, Statistics* best_stats, S } void +Statistics::zero() +{ + reset(); + total_coins = 0; + total_badguys = 0; + total_secrets = 0; +} + +void Statistics::reset() { coins = 0;