/[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.63 by dheck, Sat Jun 28 14:15:28 2003 UTC revision 1.64 by reallysoft, Mon Jun 30 08:47:49 2003 UTC
# Line 54  using world::Item; Line 54  using world::Item;
54  using world::MakeItem;  using world::MakeItem;
55  using namespace OxydLib;  using namespace OxydLib;
56    
57    namespace {
58        enigma::Direction direction_oxyd2enigma(OxydLib::Direction odir) {
59            enigma::Direction edir = NODIR;
60            switch (odir) {
61                case Direction_Up:    edir = NORTH; break;
62                case Direction_Down:  edir = SOUTH; break;
63                case Direction_Left:  edir = WEST; break;
64                case Direction_Right: edir = EAST; break;
65                default :
66                    fprintf(stderr, "Unknown OxydLib-direction %i!\n", int(odir));
67                    break;
68            }
69            return edir;
70        }
71    }
72    
73  //----------------------------------------  //----------------------------------------
74  // Oxyd level packs  // Oxyd level packs
75  //----------------------------------------  //----------------------------------------
# Line 94  namespace Line 110  namespace
110    
111          Level *get_level() const { return m_level; }          Level *get_level() const { return m_level; }
112    
113          Stone *makeLaser(int type, int x, int y);          Stone *makeLaser(int type);
114    
115      private:      private:
116          // Private methods          // Private methods
# Line 102  namespace Line 118  namespace
118          void load_items (const Level &level);          void load_items (const Level &level);
119          void load_stones (const Level &level);          void load_stones (const Level &level);
120          void load_actors (const Level &level);          void load_actors (const Level &level);
121            void scramble_puzzles (const Level &level);
122          void connect_signals (const Level &level);          void connect_signals (const Level &level);
123    
124          GameType get_gametype() const;          GameType get_gametype() const;
# Line 240  LevelPack_Oxyd::make_item (int type) Line 257  LevelPack_Oxyd::make_item (int type)
257  }  }
258    
259  void  void
260    LevelPack_Oxyd::scramble_puzzles (const Level &level) {
261        int count  = level.getNumScrambleItems();
262        int repeat = options::Difficulty == DIFFICULTY_EASY ? 1 : 4;
263    
264        while (repeat--) {
265            for (int i = 0; i<count; ++i) {
266                const ScrambleItem&  si   = level.getScrambleItem(i);
267                Stone               *puzz = world::GetStone(GridPos(si.getX(), si.getY()));
268    
269                if (puzz)
270                    SendMessage(puzz, "scramble", Value(direction_oxyd2enigma(si.getDir())));
271            }
272        }
273    }
274    
275    void
276  LevelPack_Oxyd::load_items (const Level &level)  LevelPack_Oxyd::load_items (const Level &level)
277  {  {
278      const Grid &grid = level.getGrid (GridType_Objects);      const Grid &grid = level.getGrid (GridType_Objects);
# Line 250  LevelPack_Oxyd::load_items (const Level Line 283  LevelPack_Oxyd::load_items (const Level
283  }  }
284    
285  Stone *  Stone *
286  LevelPack_Oxyd::makeLaser(int type, int x, int y) {  LevelPack_Oxyd::makeLaser(int type) {
287      assert(type >= 0 && type <= 2); // oxyd supports three different lasers per level      assert(type >= 0 && type <= 2); // oxyd supports three different lasers per level
288      const Laser& laser = get_level()->getLaser(type);      const Laser& laser = get_level()->getLaser(type);
289    
290      enigma::Direction dir = NODIR;      enigma::Direction dir = direction_oxyd2enigma(laser.getDir());
291      bool              on  = laser.getOn();      bool              on  = laser.getOn();
292    
     switch (laser.getDir()) {  
         case Direction_Up:    dir = NORTH; break;  
         case Direction_Down:  dir = SOUTH; break;  
         case Direction_Left:  dir = WEST; break;  
         case Direction_Right: dir = EAST; break;  
         default :  
             fprintf(stderr, "Unknown laser direction!\n");  
             break;  
     }  
   
293      Stone *st = 0;      Stone *st = 0;
294      if (dir != NODIR) {      if (dir != NODIR) {
295          string lasername("st-laser");          string lasername("st-laser");
# Line 433  LevelPack_Oxyd::load_level (size_t index Line 456  LevelPack_Oxyd::load_level (size_t index
456      load_floor (level);      load_floor (level);
457      load_items (level);      load_items (level);
458      load_stones (level);      load_stones (level);
459        scramble_puzzles(level);
460      load_actors (level);      load_actors (level);
461      connect_signals (level);      connect_signals (level);
462    
# Line 506  LP_Oxyd1::make_stone (int type, int x, i Line 530  LP_Oxyd1::make_stone (int type, int x, i
530      Stone *st = 0;      Stone *st = 0;
531      switch (type) {      switch (type) {
532      case 0x44: case 0x45: case 0x46:      case 0x44: case 0x45: case 0x46:
533          st = makeLaser(type-0x44, x, y);          st = makeLaser(type-0x44);
534          break;          break;
535      default :      default :
536          st = LevelPack_Oxyd::make_stone(type, x, y);          st = LevelPack_Oxyd::make_stone(type, x, y);
# Line 553  LP_OxydExtra::make_stone (int type, int Line 577  LP_OxydExtra::make_stone (int type, int
577      Stone *st = 0;      Stone *st = 0;
578      switch (type) {      switch (type) {
579      case 0x3e: case 0x3f: case 0x40:      case 0x3e: case 0x3f: case 0x40:
580          st = makeLaser(type-0x3e, x, y);          st = makeLaser(type-0x3e);
581          break;          break;
582      default :      default :
583          st = LevelPack_Oxyd::make_stone(type, x, y);          st = LevelPack_Oxyd::make_stone(type, x, y);
# Line 597  LP_PerOxyd::make_stone (int type, int x, Line 621  LP_PerOxyd::make_stone (int type, int x,
621          }          }
622          break;          break;
623      case 0x3e: case 0x3f:  case 0x40:      case 0x3e: case 0x3f:  case 0x40:
624          st = makeLaser(type-0x3e, x, y);          st = makeLaser(type-0x3e);
625          break;          break;
626      default:      default:
627          st = LevelPack_Oxyd::make_stone(type, x, y);          st = LevelPack_Oxyd::make_stone(type, x, y);
# Line 631  LP_OxydMagnum::make_stone (int type, int Line 655  LP_OxydMagnum::make_stone (int type, int
655      Stone *st = 0;      Stone *st = 0;
656      switch (type) {      switch (type) {
657      case 0x44: case 0x45: case 0x46:      case 0x44: case 0x45: case 0x46:
658          st = makeLaser(type-0x44, x, y);          st = makeLaser(type-0x44);
659          break;          break;
660      default:      default:
661          st = LevelPack_Oxyd::make_stone(type, x, y);          st = LevelPack_Oxyd::make_stone(type, x, y);

Legend:
Removed from v.1.63  
changed lines
  Added in v.1.64

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