[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Enigma-devel] Re: Arguments for trigger callback
From: |
Hubai Tamas |
Subject: |
[Enigma-devel] Re: Arguments for trigger callback |
Date: |
Sat, 07 Apr 2007 16:34:26 +0200 |
User-agent: |
Thunderbird 1.5.0.9 (X11/20060911) |
Ronald Lamprecht írta:
> Note that this approach has another useful benefit. Sometimes you have
> many triggers that can be processed by a single callback function. You
> just have to know which trigger got active. By evaluating the sender in
> the callback function you may be able to avoid writing numerous seperate
> callback functions. I attach a level that makes use of this aspect.
Thanks, this is exactly what I was looking for.
Now I can remove a hack ;).
I've modified the level to make use of this feature, an unified diff is
attached [triggers.diff]. Note that applying it is not required to
test/play the level, since it only makes the source code cleaner.
Have a nice day,
Thomas
--- ht01_1.xml 2007-04-06 16:41:30.000000000 +0200
+++ ht01_1.xml 2007-04-06 17:53:22.000000000 +0200
@@ -1205,7 +1205,7 @@
--end
end
--- add a trigger at (i,j) with visibility v that (indirectly) calls trigfn(i,j)
+-- add a trigger at (i,j) with visibility v that calls trigfn
-- since we can't pass parameters to callback functions, we'll define
-- a callback function for every cell using a simple naming scheme
function addautotrig(i,j,v)
@@ -1231,7 +1231,7 @@
end
if od==1 then
enigma.KillItem(px+i,py+j)
- set_item("it-trigger",px+i,py+j,{invisible=v,
action="callback",target="trig"..strsub("abcdefghijk",i,i)..j})
+ set_item("it-trigger",px+i,py+j,{invisible=v,
action="callback",target="trigfn"})
end
end
@@ -1354,39 +1354,12 @@
end
end
--- callback functions that call trigfn with the appropriate coordinates
--- (simulates passing arguments with a trigger callback)
-function triga1() trigfn(1,1) end function triga2() trigfn(1,2) end function
triga3() trigfn(1,3) end
-function triga4() trigfn(1,4) end function triga5() trigfn(1,5) end function
triga6() trigfn(1,6) end
-function triga7() trigfn(1,7) end function trigb1() trigfn(2,1) end function
trigb2() trigfn(2,2) end
-function trigb3() trigfn(2,3) end function trigb4() trigfn(2,4) end function
trigb5() trigfn(2,5) end
-function trigb6() trigfn(2,6) end function trigb7() trigfn(2,7) end function
trigc1() trigfn(3,1) end
-function trigc2() trigfn(3,2) end function trigc3() trigfn(3,3) end function
trigc4() trigfn(3,4) end
-function trigc5() trigfn(3,5) end function trigc6() trigfn(3,6) end function
trigc7() trigfn(3,7) end
-function trigd1() trigfn(4,1) end function trigd2() trigfn(4,2) end function
trigd3() trigfn(4,3) end
-function trigd4() trigfn(4,4) end function trigd5() trigfn(4,5) end function
trigd6() trigfn(4,6) end
-function trigd7() trigfn(4,7) end function trige1() trigfn(5,1) end function
trige2() trigfn(5,2) end
-function trige3() trigfn(5,3) end function trige4() trigfn(5,4) end function
trige5() trigfn(5,5) end
-function trige6() trigfn(5,6) end function trige7() trigfn(5,7) end function
trigf1() trigfn(6,1) end
-function trigf2() trigfn(6,2) end function trigf3() trigfn(6,3) end function
trigf4() trigfn(6,4) end
-function trigf5() trigfn(6,5) end function trigf6() trigfn(6,6) end function
trigf7() trigfn(6,7) end
-function trigg1() trigfn(7,1) end function trigg2() trigfn(7,2) end function
trigg3() trigfn(7,3) end
-function trigg4() trigfn(7,4) end function trigg5() trigfn(7,5) end function
trigg6() trigfn(7,6) end
-function trigg7() trigfn(7,7) end function trigh1() trigfn(8,1) end function
trigh2() trigfn(8,2) end
-function trigh3() trigfn(8,3) end function trigh4() trigfn(8,4) end function
trigh5() trigfn(8,5) end
-function trigh6() trigfn(8,6) end function trigh7() trigfn(8,7) end function
trigi1() trigfn(9,1) end
-function trigi2() trigfn(9,2) end function trigi3() trigfn(9,3) end function
trigi4() trigfn(9,4) end
-function trigi5() trigfn(9,5) end function trigi6() trigfn(9,6) end function
trigi7() trigfn(9,7) end
-function trigj1() trigfn(10,1) end function trigj2() trigfn(10,2) end function
trigj3() trigfn(10,3) end
-function trigj4() trigfn(10,4) end function trigj5() trigfn(10,5) end function
trigj6() trigfn(10,6) end
-function trigj7() trigfn(10,7) end function trigk1() trigfn(11,1) end function
trigk2() trigfn(11,2) end
-function trigk3() trigfn(11,3) end function trigk4() trigfn(11,4) end function
trigk5() trigfn(11,5) end
-function trigk6() trigfn(11,6) end function trigk7() trigfn(11,7) end
--- yes, it's an ugly hack, but I haven't found a workaround yet ;)
-
-- triggers start enabled
trigmode=1
-function trigfn(x,y)
+function trigfn(value,sender)
+ x,y=enigma.GetPos(sender)
+ x=x-px
+ y=y-py
if trigmode==1 then
local cs=pstones[floor][y][x]
local cf=pfloors[floor][y][x]