enigma-devel
[Top][All Lists]
Advanced

[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]

reply via email to

[Prev in Thread] Current Thread [Next in Thread]