player takes a swing at a solid grid (ctrl-direction at it), or it's hit by a solid-ish beam (normal thrown item, Magic Dart, etc), then a "wall hit" dungeon event will be issued for that square; a Lua marker can listen to that event to implement a switch/lever/button.
No Lua glue or Lua convenience classes yet.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10573 c06c8d41-db1a-0410-9941-cceddc491573
6LJ7HNA6M2RVACJM4OASJPQAQ42UZGCXW636AVJ4CPICGQZBKLWQC
R25VQ2MUGGDTO5UZR2DPO5XUYSA3LB6RIEBGLJ6CD75T2GED2ZNAC
NOUFW6ACJ7KPVHSPF4WLRAVOWI7PZ6OAVYDRMI3WYNPXVMGAB3QAC
7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC
AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC
HWTL2S7OVOJRJAAN66ZTT26HJDAOIW6RKAG5NFMNZJU63CTU2U5AC
Y3NLZQBRMBULLMTLNCG5VSLRZFUAD4MI6VMYN7Q3L5YMIVDN5DAQC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
FC7M3JHVRPOLZP7YWOJN4O6YJV7KRJUMPLTI2Q4ANCO7GD23YKWQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
BC24BZTIVJ6GORK7XXGHQ7YXKYBEPFCTKVCANZE6PEXY4L3ZQMCAC
}
// Press trigger/switch/button in wall if hit by something solid
// or solid-ish.
if (!is_explosion && !is_tracer && !monster_at(pos())
&& (flavour == BEAM_MISSILE || flavour == BEAM_MMISSILE))
{
dgn_event event(DET_WALL_HIT, pos());;
event.arg1 = beam_source;
dungeon_events.fire_vetoable_position_event(event, target);
mpr("You swing at nothing.");
{
bool do_msg = true;
// Press trigger/switch/button in wall.
if (grid_is_solid(feat))
{
dgn_event event(DET_WALL_HIT, target);
event.arg1 = NON_MONSTER;
// Listener can veto the event to prevent the "You swing at
// nothing" message.
do_msg =
dungeon_events.fire_vetoable_position_event(event,
target);
}
if (do_msg)
mpr("You swing at nothing.");