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 |
|
|
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(); |
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); |