Statistics are now saved to disk
[supertux.git] / src / statistics.hpp
index 02c0a5c..4aca2ad 100644 (file)
@@ -2,7 +2,8 @@
 //
 //  SuperTux (Statistics module)
 //  Copyright (C) 2004 Ricardo Cruz <rick2@aeiou.pt>
-//  Copyright (C) 2006 Ondrej Hosek <white.timberwolf@aon.at>
+//  Copyright (C) 2006 Ondrej Hosek <ondra.hosek@gmail.com>
+//  Copyright (C) 2006 Christoph Sommer <christoph.sommer@2006.expires.deltadevelopment.de>
 //
 //  This program is free software; you can redistribute it and/or
 //  modify it under the terms of the GNU General Public License
@@ -13,7 +14,7 @@
 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 //  GNU General Public License for more details.
-// 
+//
 //  You should have received a copy of the GNU General Public License
 //  along with this program; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 #ifndef SUPERTUX_STATISTICS_H
 #define SUPERTUX_STATISTICS_H
 
+#include <squirrel.h>
 #include "timer.hpp"
-#include "lisp/lisp.hpp"
-#include "lisp/writer.hpp"
-#include "video/surface.hpp"
-#include "video/drawing_context.hpp"
-
-#define SPLAYER 0
-#define STOTAL  1
 
-enum {
-//  SCORE_STAT,
-  COINS_COLLECTED_STAT,
-  BADGUYS_KILLED_STAT,
-  TIME_NEEDED_STAT,
-  NUM_STATS
-};
+namespace lisp { class Writer; }
+namespace lisp { class Lisp; }
+class Surface;
+class DrawingContext;
 
 /** This class is a layer between level and worldmap to keep
  *  track of stuff like scores, and minor, but funny things, like
  *  number of jumps and stuff */
-
 class Statistics
 {
 public:
-  // don't forget to call reset() to init stat
-  Statistics();
+  int coins; /**< coins collected */
+  int total_coins; /**< coins in level */
+  int badguys; /**< badguys actively killed */
+  int total_badguys; /**< (vincible) badguys in level */
+  float time; /**< seconds needed */
+  int secrets; /**< secret areas found */
+  int total_secrets; /**< secret areas in level */
+
+public:
+  Statistics(); /**< Creates new statistics, call reset() before counting */
   ~Statistics();
 
   /// read statistics from lisp file
-  void parse(const lisp::Lisp& lisp);
+  //void parse(const lisp::Lisp& lisp);
   /// write statistics to lisp file
-  void write(lisp::Writer& writer);
+  //void write(lisp::Writer& writer);
 
-  /* Draw to the worldmap or a game message */
-  // TODO: make this functions working
-  void draw_worldmap_info(DrawingContext& context);
-  void draw_message_info(DrawingContext& context, std::string title);
-  void draw_endseq_panel(DrawingContext& context, Statistics* best_stats, Surface* backdrop); /**< draw panel shown during level's end sequence */
-
-  /* Add / Set / Get points to/from one of the stats this can keep track of */
-  void add_points(int stat, int points);
-  void set_points(int stat, int points);
-  int get_points(int stat);
+  /**
+   * serialize statistics object as squirrel table "statistics"
+   */
+  void serialize_to_squirrel(HSQUIRRELVM vm);
 
-  void set_total_points(int stat, int points);
+  /**
+   * unserialize statistics object from squirrel table "statistics"
+   */
+  void unserialize_from_squirrel(HSQUIRRELVM vm);
 
-  /* Reset statistics */
-  void reset();
+  void draw_worldmap_info(DrawingContext& context); /**< draw worldmap stat HUD */
+  void draw_message_info(DrawingContext& context, std::string title); /**< draw stats at level start */
+  void draw_endseq_panel(DrawingContext& context, Statistics* best_stats, Surface* backdrop); /**< draw panel shown during level's end sequence */
 
-  /* Give another Statistics object, find the best of each one */
-  void merge(Statistics& stats);
+  void zero(); /**< Set stats to zero */
+  void reset(); /**< Set stats (but not totals) to zero */
+  void merge(Statistics& stats); /**< Given another Statistics object finds the best of each one */
+  void operator+=(const Statistics& o); /**< Add two Statistics objects */
 
-  /* Add two statistic objects */
-  void operator+=(const Statistics& o);
+  void declare_invalid(); /**< marks statistics as invalid for their entire lifetime (e.g. after cheating). Invalid statistics will not be merged or drawn. */
 
 private:
-  int stats[NUM_STATS][2];
-
-  Timer timer;
-  int display_stat;
+  bool valid; /**< stores whether this statistics can be trusted */
+  Timer timer; /**< for draw_worldmap_info: time until switching to next stat */
+  int display_stat; /**< for draw_worldmap_info: which stat is currently displayed */
 };
 
-extern Statistics global_stats;
-
 #endif /*SUPERTUX_STATISTICS_H*/