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

Diff of /enigma/src/world.cc

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

revision 1.18 by dheck, Thu Apr 24 21:23:21 2003 UTC revision 1.19 by dheck, Sat Apr 26 07:34:42 2003 UTC
# Line 42  using namespace px; Line 42  using namespace px;
42    
43  namespace  namespace
44  {  {
45        Object *GetObject (const GridLoc &l)
46        {
47            switch (l.layer) {
48            case GRID_FLOOR:  return GetFloor(l.pos);
49            case GRID_ITEMS:  return GetItem(l.pos);
50            case GRID_STONES: return GetStone(l.pos);
51            default: return 0;
52            }
53        }
54        
55    
56      class Signal {      class Signal {
57      public:      public:
58          virtual ~Signal() {};          virtual ~Signal() {};
59          virtual void emit_from (Object *source) = 0;          virtual void emit_from (Object *source) = 0;
60      };      };
61    
62      class SimpleSignal : public Signal{      class SimpleSignal : public Signal {
63      public:      public:
64          SimpleSignal (Object *src, Object *dst, const string &msg)          SimpleSignal (Object *src, GridLoc dstloc, const string &msg)
65          : source (src), dest(dst), message(msg)          : source (src), destloc(dstloc), message(msg)
66          {}          {}
67    
68          void emit_from (Object *src) {          void emit_from (Object *src) {
69              if (source == src)              if (source == src) {
70                  SendMessage (dest, message);                  Object *dst = GetObject (destloc);
71                    SendMessage (dst, message);
72                }
73          }          }
74      private:      private:
75          Object *source, *dest;          Object *source;
76            GridLoc destloc;
77          string message;          string message;
78      };      };
79    
# Line 742  world::Load(const string &name) Line 756  world::Load(const string &name)
756      filename += ".lua";      filename += ".lua";
757    
758    
759      // Restart the Lua environment, so symbol definitions from      // Restart the Lua environment so symbol definitions from
760      // different levels do not get in each other's way.      // different levels do not get in each other's way.
761      lua::Shutdown();      lua::Shutdown();
762      lua::Init();      lua::Init();
# Line 905  bool world::HasRubberBand (Actor *a, Sto Line 919  bool world::HasRubberBand (Actor *a, Sto
919  // Signals  // Signals
920  //----------------------------------------  //----------------------------------------
921    
922  void world::AddSignal (Object *src, Object *dst, const string &msg)  void world::AddSignal (GridLoc srcloc, GridLoc dstloc, const string &msg)
923  {  {
924      level->signals.add (new SimpleSignal (src, dst, msg));      if (Object *src = GetObject(srcloc)) {
925            src->set_attrib("action", "signal");
926            level->signals.add (new SimpleSignal (src, dstloc, msg));
927        }
928        else {
929            Log << "AddSignal: Invalid signal source\n";
930        }
931  }  }
932    
933    
934  void world::EmitSignals (Object *src)  void world::EmitSignals (Object *src)
935  {  {
936      level->signals.emit_from (src);      level->signals.emit_from (src);

Legend:
Removed from v.1.18  
changed lines
  Added in v.1.19

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