/[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.61 by reallysoft, Sun Jun 22 11:47:23 2003 UTC revision 1.62 by reallysoft, Wed Jun 25 19:33:46 2003 UTC
# Line 52  using world::Stone; Line 52  using world::Stone;
52  using world::MakeStone;  using world::MakeStone;
53  using world::Item;  using world::Item;
54  using world::MakeItem;  using world::MakeItem;
55    using namespace OxydLib;
56    
57  //----------------------------------------  //----------------------------------------
58  // Oxyd level packs  // Oxyd level packs
# Line 61  namespace Line 62  namespace
62      class LevelPack_Oxyd : public LevelPack {      class LevelPack_Oxyd : public LevelPack {
63      public:      public:
64          LevelPack_Oxyd (OxydVersion ver, DatFile *dat, time_t created,          LevelPack_Oxyd (OxydVersion ver, DatFile *dat, time_t created,
65                          int idx_start, int idx_end, bool twoplayers);                          int         idx_start, int idx_end, bool twoplayers);
66          virtual ~LevelPack_Oxyd() {}  
67            virtual ~LevelPack_Oxyd() = 0; // class is interface!
68    
69          // LevelPack interface          // LevelPack interface
70          virtual string get_name() const;          virtual string get_name() const;
# Line 92  namespace Line 94  namespace
94    
95          Level *get_level() const { return m_level; }          Level *get_level() const { return m_level; }
96    
97            Stone *makeLaser(int type, int x, int y);
98    
99      private:      private:
100          // Private methods          // Private methods
101          void load_floor (const Level &level);          void load_floor (const Level &level);
# Line 115  namespace Line 119  namespace
119      };      };
120  }  }
121    
 GameType  
 LevelPack_Oxyd::get_gametype() const {  
     GameType typ = GAMET_UNKNOWN;  
     switch (m_version) {  
         case OxydVersion_Oxyd1:  
             typ = GAMET_OXYD1; break;  
         case OxydVersion_OxydMagnum:  
         case OxydVersion_OxydMagnumGold:  
             typ = GAMET_OXYDMAGNUM; break;  
         case OxydVersion_OxydExtra:  
             typ = GAMET_OXYDEXTRA; break;  
         case OxydVersion_PerOxyd:  
             typ = GAMET_PEROXYD; break;  
         default :  
             assert(0);  
             break;  
     }  
     return typ;  
 }  
   
122  LevelPack_Oxyd::LevelPack_Oxyd (OxydVersion ver, DatFile *dat, time_t created,  LevelPack_Oxyd::LevelPack_Oxyd (OxydVersion ver, DatFile *dat, time_t created,
123                                  int idx_start, int idx_end, bool twoplayers)                                  int idx_start, int idx_end, bool twoplayers)
124  : m_mapping(ver), m_version(ver), m_datfile(dat),  : m_mapping(ver), m_version(ver), m_datfile(dat),
# Line 161  LevelPack_Oxyd::LevelPack_Oxyd (OxydVers Line 145  LevelPack_Oxyd::LevelPack_Oxyd (OxydVers
145      Log << "Levelpack '" << get_name() << "' has " << nlevels << " levels." << endl;      Log << "Levelpack '" << get_name() << "' has " << nlevels << " levels." << endl;
146  }  }
147    
148    LevelPack_Oxyd::~LevelPack_Oxyd()
149    {}
150    
151    GameType
152    LevelPack_Oxyd::get_gametype() const {
153        GameType typ = GAMET_UNKNOWN;
154        switch (m_version) {
155            case OxydVersion_Oxyd1:
156                typ = GAMET_OXYD1; break;
157            case OxydVersion_OxydMagnum:
158            case OxydVersion_OxydMagnumGold:
159                typ = GAMET_OXYDMAGNUM; break;
160            case OxydVersion_OxydExtra:
161                typ = GAMET_OXYDEXTRA; break;
162            case OxydVersion_PerOxyd:
163                typ = GAMET_PEROXYD; break;
164            default :
165                assert(0);
166                break;
167        }
168        return typ;
169    }
170    
171  string  string
172  LevelPack_Oxyd::get_name() const  LevelPack_Oxyd::get_name() const
173  {  {
# Line 250  LevelPack_Oxyd::load_items (const Level Line 257  LevelPack_Oxyd::load_items (const Level
257  }  }
258    
259  Stone *  Stone *
260    LevelPack_Oxyd::makeLaser(int type, int x, int y) {
261        assert(type >= 0 && type <= 2); // oxyd supports three different lasers per level
262        const Laser& laser = get_level()->getLaser(type);
263    
264        enigma::Direction dir = NODIR;
265        bool              on  = laser.getOn();
266    
267        switch (laser.getDir()) {
268            case Direction_Up:    dir = NORTH; break;
269            case Direction_Down:  dir = SOUTH; break;
270            case Direction_Left:  dir = WEST; break;
271            case Direction_Right: dir = EAST; break;
272            default :
273                fprintf(stderr, "Unknown laser direction!\n");
274                break;
275        }
276    
277        Stone *st = 0;
278        if (dir != NODIR) {
279            string lasername("st-laser");
280            lasername += to_suffix(dir);
281            st         = MakeStone(lasername.c_str());
282            st->set_attrib("on", Value(on)); // OnOffStone attribute
283        }
284        return st;
285    }
286    
287    Stone *
288  LevelPack_Oxyd::make_stone (int type, int /*x*/, int /*y*/)  LevelPack_Oxyd::make_stone (int type, int /*x*/, int /*y*/)
289  {  {
290      using namespace world;      using namespace world;
# Line 446  namespace Line 481  namespace
481  {  {
482      class LP_Oxyd1 : public LevelPack_Oxyd {      class LP_Oxyd1 : public LevelPack_Oxyd {
483          Stone *make_stone (int type, int x, int y);          Stone *make_stone (int type, int x, int y);
484          Item *LP_Oxyd1::make_item (int type);          Item *make_item (int type);
485      public:      public:
486          LP_Oxyd1 (DatFile *dat, time_t created, bool twoplayers);          LP_Oxyd1 (DatFile *dat, time_t created, bool twoplayers);
487      };      };
   
 //     class LP_OxydExtra : public LevelPack_Oxyd {  
   
 //     };  
488  }  }
489    
490  LP_Oxyd1::LP_Oxyd1 (DatFile *dat, time_t created, bool twoplayers)  LP_Oxyd1::LP_Oxyd1 (DatFile *dat, time_t created, bool twoplayers)
# Line 479  LP_Oxyd1::make_item (int type) Line 510  LP_Oxyd1::make_item (int type)
510  Stone *  Stone *
511  LP_Oxyd1::make_stone (int type, int x, int y)  LP_Oxyd1::make_stone (int type, int x, int y)
512  {  {
513      return LevelPack_Oxyd::make_stone(type, x, y);      Stone *st = 0;
514        switch (type) {
515        case 0x44: case 0x45: case 0x46:
516            st = makeLaser(type-0x44, x, y);
517            break;
518        default :
519            st = LevelPack_Oxyd::make_stone(type, x, y);
520            break;
521        }
522        return st;
523    }
524    
525    
526    
527    //----------------------------------------
528    // OxydExtra level pack
529    //----------------------------------------
530    namespace
531    {
532        class LP_OxydExtra : public LevelPack_Oxyd {
533            Stone *make_stone (int type, int x, int y);
534            Item *make_item (int type);
535        public:
536            LP_OxydExtra (DatFile *dat, time_t created);
537        };
538    }
539    
540    LP_OxydExtra::LP_OxydExtra (DatFile *dat, time_t created)
541        : LevelPack_Oxyd (OxydVersion_OxydExtra, dat, created, 0, 99, false)
542    {
543    }
544    
545    Item *
546    LP_OxydExtra::make_item (int type)
547    {
548        Item *it = 0;
549        switch (type) {
550        default:
551            it = LevelPack_Oxyd::make_item(type);
552            break;
553        }
554        return it;
555  }  }
556    
557    Stone *
558    LP_OxydExtra::make_stone (int type, int x, int y)
559    {
560        Stone *st = 0;
561        switch (type) {
562        case 0x3e: case 0x3f: case 0x40:
563            st = makeLaser(type-0x3e, x, y);
564            break;
565        default :
566            st = LevelPack_Oxyd::make_stone(type, x, y);
567            break;
568        }
569        return st;
570    }
571    
572    
573  //----------------------------------------  //----------------------------------------
# Line 517  LP_PerOxyd::make_stone (int type, int x, Line 603  LP_PerOxyd::make_stone (int type, int x,
603              st = MakeStone (names[type - 0x39]);              st = MakeStone (names[type - 0x39]);
604          }          }
605          break;          break;
606      default:   st = LevelPack_Oxyd::make_stone(type, x, y);      case 0x3e: case 0x3f:  case 0x40:
607            st = makeLaser(type-0x3e, x, y);
608            break;
609        default:
610            st = LevelPack_Oxyd::make_stone(type, x, y);
611            break;
612      }      }
613      return st;      return st;
614  }  }
# Line 544  LP_OxydMagnum::LP_OxydMagnum(OxydVersion Line 635  LP_OxydMagnum::LP_OxydMagnum(OxydVersion
635  Stone *  Stone *
636  LP_OxydMagnum::make_stone (int type, int x, int y)  LP_OxydMagnum::make_stone (int type, int x, int y)
637  {  {
638      return LevelPack_Oxyd::make_stone(type, x, y);      Stone *st = 0;
639        switch (type) {
640        case 0x44: case 0x45: case 0x46:
641            st = makeLaser(type-0x44, x, y);
642            break;
643        default:
644            st = LevelPack_Oxyd::make_stone(type, x, y);
645            break;
646        }
647        return st;
648  }  }
649    
650    
# Line 635  LevelPack *GameInfo::makeLevelPack(bool Line 735  LevelPack *GameInfo::makeLevelPack(bool
735      switch (ver) {      switch (ver) {
736      case OxydVersion_Oxyd1:      case OxydVersion_Oxyd1:
737          return new LP_Oxyd1 (datfile, modified, twoplayers);          return new LP_Oxyd1 (datfile, modified, twoplayers);
738        case OxydVersion_OxydExtra:
739            return new LP_OxydExtra(datfile, modified);
740      case OxydVersion_PerOxyd:      case OxydVersion_PerOxyd:
741          return new LP_PerOxyd (datfile, modified, twoplayers);          return new LP_PerOxyd (datfile, modified, twoplayers);
742      case OxydVersion_OxydMagnum:      case OxydVersion_OxydMagnum:
743      case OxydVersion_OxydMagnumGold:      case OxydVersion_OxydMagnumGold:
744          return new LP_OxydMagnum (ver, datfile, modified);          return new LP_OxydMagnum (ver, datfile, modified);
745      default:      default:
746          {          assert(0);
747              int firstlevel = twoplayers ? 100 : 0;          break;
748              int lastlevel = twoplayers ? 199 : 99;              //         {
749              return new LevelPack_Oxyd(ver, datfile, modified, firstlevel, lastlevel, twoplayers);              //             int firstlevel = twoplayers ? 100 : 0;
750          }              //             int lastlevel = twoplayers ? 199 : 99;
751                //             return new LevelPack_Oxyd(ver, datfile, modified, firstlevel, lastlevel, twoplayers);
752                //         }
753      }      }
754    
755  }  }

Legend:
Removed from v.1.61  
changed lines
  Added in v.1.62

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