/[enigma]/enigma/src/oxyd.cc
ViewVC logotype

Diff of /enigma/src/oxyd.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.45 by reallysoft, Sat May 31 10:01:58 2003 UTC revision 1.46 by reallysoft, Sun Jun 1 18:50:23 2003 UTC
# Line 30  Line 30 
30  #include "objects.hh"  #include "objects.hh"
31  #include "world.hh"  #include "world.hh"
32  #include "display.hh"  #include "display.hh"
33    #include "system.hh"
34    
35  #include "oxydlib/DatFile.h"  #include "oxydlib/DatFile.h"
36  #include "oxydlib/FileUtils.h"  #include "oxydlib/FileUtils.h"
# Line 57  namespace Line 58  namespace
58  {  {
59      class LevelPack_Oxyd : public LevelPack {      class LevelPack_Oxyd : public LevelPack {
60      public:      public:
61          LevelPack_Oxyd (OxydVersion ver, DatFile *dat, int idx_start, int idx_end);          LevelPack_Oxyd (OxydVersion ver, DatFile *dat, time_t created, int idx_start, int idx_end);
62    
63          // LevelPack interface          // LevelPack interface
64          virtual string get_name() const;          virtual string get_name() const;
# Line 66  namespace Line 67  namespace
67          bool load_level (size_t index);          bool load_level (size_t index);
68    
69          LevelInfo *get_info (size_t index);          LevelInfo *get_info (size_t index);
70    
71            time_t get_modtime(size_t /*index*/) { // filedate of levelpack
72                return m_created;
73            }
74    
75      protected:      protected:
76          /* Conversion tables from Oxyd bytecodes to Enigma object names. */          /* Conversion tables from Oxyd bytecodes to Enigma object names. */
77          enigma_mapping::Mapping m_mapping;          enigma_mapping::Mapping m_mapping;
# Line 86  namespace Line 92  namespace
92          // Variables          // Variables
93          OxydVersion  m_version;          OxydVersion  m_version;
94          DatFile     *m_datfile;          DatFile     *m_datfile;
95            time_t       m_created; // creation date of datafile
96          Level       *m_level;   // Level currently being loaded          Level       *m_level;   // Level currently being loaded
97    
98          int level_index[200];          int level_index[200];
# Line 93  namespace Line 100  namespace
100      };      };
101  }  }
102    
103  LevelPack_Oxyd::LevelPack_Oxyd (OxydVersion ver, DatFile *dat,  LevelPack_Oxyd::LevelPack_Oxyd (OxydVersion ver, DatFile *dat, time_t created,
104                                  int idx_start, int idx_end)                                  int idx_start, int idx_end)
105      : m_mapping(ver)      : m_mapping(ver)
106      , m_version(ver)      , m_version(ver)
107      , m_datfile(dat)      , m_datfile(dat)
108        , m_created(created)
109  {  {
110      string msg;      string msg;
111      Level level;      Level level;
# Line 384  namespace Line 392  namespace
392          Stone *make_stone (int type, int x, int y);          Stone *make_stone (int type, int x, int y);
393          Item *LP_Oxyd1::make_item (int type);          Item *LP_Oxyd1::make_item (int type);
394      public:      public:
395          LP_Oxyd1 (DatFile *dat, bool twoplayers);          LP_Oxyd1 (DatFile *dat, time_t created, bool twoplayers);
396      };      };
397    
398  //     class LP_OxydExtra : public LevelPack_Oxyd {  //     class LP_OxydExtra : public LevelPack_Oxyd {
# Line 392  namespace Line 400  namespace
400  //     };  //     };
401  }  }
402    
403  LP_Oxyd1::LP_Oxyd1 (DatFile *dat, bool twoplayers)  LP_Oxyd1::LP_Oxyd1 (DatFile *dat, time_t created, bool twoplayers)
404  : LevelPack_Oxyd (OxydVersion_Oxyd1, dat,      : LevelPack_Oxyd (OxydVersion_Oxyd1, dat, created,
405                    twoplayers ? 100 : 0,                        twoplayers ? 100 : 0,
406                    twoplayers ? 199 : 99)                        twoplayers ? 199 : 99)
407  {  {
408  }  }
409    
# Line 462  namespace Line 470  namespace
470      class LP_PerOxyd : public LevelPack_Oxyd {      class LP_PerOxyd : public LevelPack_Oxyd {
471          Stone *make_stone (int type, int x, int y);          Stone *make_stone (int type, int x, int y);
472      public:      public:
473          LP_PerOxyd (DatFile *dat, bool twoplayers);          LP_PerOxyd (DatFile *dat, time_t created, bool twoplayers);
474    
475      };      };
476  }  }
477    
478  LP_PerOxyd::LP_PerOxyd (DatFile *dat, bool twoplayers)  LP_PerOxyd::LP_PerOxyd (DatFile *dat, time_t created, bool twoplayers)
479  : LevelPack_Oxyd (OxydVersion_PerOxyd, dat,      : LevelPack_Oxyd (OxydVersion_PerOxyd, dat, created,
480                    twoplayers ? 100 : 0,                        twoplayers ? 100 : 0,
481                    twoplayers ? 199 : 99)                        twoplayers ? 199 : 99)
482  {  {
483  }  }
484    
# Line 500  namespace Line 508  namespace
508      class LP_OxydMagnum : public LevelPack_Oxyd {      class LP_OxydMagnum : public LevelPack_Oxyd {
509          Stone *make_stone (int type, int x, int y);          Stone *make_stone (int type, int x, int y);
510      public:      public:
511          LP_OxydMagnum(OxydVersion, DatFile *dat);          LP_OxydMagnum(OxydVersion, DatFile *dat, time_t created);
512      };      };
513  }  }
514    
515  LP_OxydMagnum::LP_OxydMagnum(OxydVersion version, DatFile *dat)  LP_OxydMagnum::LP_OxydMagnum(OxydVersion version, DatFile *dat, time_t created)
516  : LevelPack_Oxyd (version, dat, 0, OxydVersion_OxydMagnumGold ? 120 : 99)      : LevelPack_Oxyd (version, dat, created, 0, OxydVersion_OxydMagnumGold ? 120 : 99)
517  {  {
518  }  }
519    
# Line 570  LP_OxydMagnum::make_stone (int type, int Line 578  LP_OxydMagnum::make_stone (int type, int
578    
579  namespace  namespace
580  {  {
581      struct GameInfo {      class GameInfo {
582        public:
583          GameInfo();          GameInfo();
584          GameInfo (const string &game_, const string &datfile_);          GameInfo (const string &game_, const string &datfile_);
585    
586            bool isPresent() const { return is_present; }
587            const string& datfilePath() const { return datfile_path; }
588            time_t getModTime() const { return modified; }
589    
590        private:
591          // Variables.          // Variables.
592          string      game;          string game;
593          string      datfile;          string datfile;
594          bool        is_present;          string datfile_path;
595          string      datfile_path;          bool   is_present;
596            time_t modified; // !is_present -> 0
597      };      };
598  }  }
599    
600  GameInfo::GameInfo()  GameInfo::GameInfo()
601  : is_present(false)      : is_present(false), modified(0)
602  {}  {}
603    
604    
605  GameInfo::GameInfo (const string &game_, const string &datfile_)  GameInfo::GameInfo (const string &game_, const string &datfile_)
606  : game(game_), datfile(datfile_), is_present(false)      : game(game_), datfile(datfile_), is_present(false), modified(0)
607  {  {
608      string fname;      string fname;
609      if (FindFile (datfile, datfile_path)) {      if (FindFile (datfile, datfile_path)) {
610          enigma::Log << "Found " << game << " data file\n";          enigma::Log << "Found " << game << " data file\n";
611          is_present = true;          is_present = true;
612            modified   = sysdep::FileModTime(datfile_path);
613      }      }
614  }  }
615    
# Line 604  namespace Line 620  namespace
620  {  {
621      vector<GameInfo>  games;      vector<GameInfo>  games;
622      DatFile          *datfile = 0;      DatFile          *datfile = 0;
623        time_t            datfile_modtime; // modification date of datfile
624      OxydVersion       oxyd_version;      OxydVersion       oxyd_version;
625    
626      map <string,string> soundfx_map;      map <string,string> soundfx_map;
# Line 626  enigma::oxyd::Init() Line 643  enigma::oxyd::Init()
643  bool  bool
644  enigma::oxyd::FoundOxyd (OxydVersion ver)  enigma::oxyd::FoundOxyd (OxydVersion ver)
645  {  {
646      return games[ver].is_present;      return games[ver].isPresent();
647  }  }
648    
649  DatFile *  DatFile *
# Line 641  enigma::oxyd::SetDatFile (DatFile *new_d Line 658  enigma::oxyd::SetDatFile (DatFile *new_d
658      assert(new_datfile != 0);      assert(new_datfile != 0);
659    
660      oxyd_version = ver;      oxyd_version = ver;
661      datfile = new_datfile;      datfile      = new_datfile;
662    
663      return( true);      return( true);
664  }  }
# Line 650  bool Line 667  bool
667  enigma::oxyd::OpenDatFile (OxydVersion ver)  enigma::oxyd::OpenDatFile (OxydVersion ver)
668  {  {
669      if (FoundOxyd(ver)) {      if (FoundOxyd(ver)) {
670          string fname = games[ver].datfile_path;          string fname = games[ver].datfilePath();
671          ByteVec data;          ByteVec data;
672          readFile (fname, &data);          readFile (fname, &data);
673    
674          datfile = new DatFile;          datfile         = new DatFile;
675            datfile_modtime = games[ver].getModTime();
676    
677          string errmsg;          string errmsg;
678          if (!parseDatFile (data, ver, datfile, &errmsg)) {          if (!parseDatFile (data, ver, datfile, &errmsg)) {
679              enigma::Log << "Error loading " << fname << ": " << errmsg << endl;              enigma::Log << "Error loading " << fname << ": " << errmsg << endl;
# Line 682  enigma::oxyd::MakeLevelPack (bool twopla Line 701  enigma::oxyd::MakeLevelPack (bool twopla
701    
702      switch (oxyd_version) {      switch (oxyd_version) {
703      case OxydVersion_Oxyd1:      case OxydVersion_Oxyd1:
704          return new LP_Oxyd1 (datfile, twoplayers);          return new LP_Oxyd1 (datfile, datfile_modtime, twoplayers);
705      case OxydVersion_PerOxyd:      case OxydVersion_PerOxyd:
706          return new LP_PerOxyd (datfile, twoplayers);          return new LP_PerOxyd (datfile, datfile_modtime, twoplayers);
707      case OxydVersion_OxydMagnum:      case OxydVersion_OxydMagnum:
708      case OxydVersion_OxydMagnumGold:      case OxydVersion_OxydMagnumGold:
709          return new LP_OxydMagnum (oxyd_version, datfile);          return new LP_OxydMagnum (oxyd_version, datfile, datfile_modtime);
710      default:      default:
711          {          {
712              int firstlevel = twoplayers ? 100 : 0;              int firstlevel = twoplayers ? 100 : 0;
713              int lastlevel = twoplayers ? 199 : 99;              int lastlevel = twoplayers ? 199 : 99;
714              return new LevelPack_Oxyd (oxyd_version, datfile, firstlevel, lastlevel);              return new LevelPack_Oxyd (oxyd_version, datfile, datfile_modtime, firstlevel, lastlevel);
715          }          }
716      }      }
717  }  }

Legend:
Removed from v.1.45  
changed lines
  Added in v.1.46

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26