1 // BlinkenSisters - Hunt for the Lost Pixels
2 // Bringing back the fun of the 80s
3 //
4 // (C) 2005-07 Rene Schickbauer, Wolfgang Dautermann
5 //
6 // See License.txt for licensing information
7 //
8
9 #include "bl_lua_obj_timer.h"
10
11 #define NEED_REGISTER_FUNCTION
12 #include "bl_lua.h"
13 #undef NEED_REGISTER_FUNCTION
14
15 #include "triggers.h"
16
17 // Generates a new FX Sound object
luaObjTimerNew(lua_State * L)18 int luaObjTimerNew(lua_State *L) {
19 char funcname[1000];
20 double interval = 0.0;
21 Uint32 n = lua_gettop(L);
22 if(n != 2) {
23 LUADIE(L, ERROR_LUAARGCOUNT, "luaObjTimerNew");
24 }
25
26 if(!lua_isstring(L, 1)) {
27 LUADIE(L, ERROR_LUAL2BTYPE, "luaObjTimerNew (1)");
28 } else {
29 sprintf(funcname, "%s", lua_tostring(L, 1));
30 }
31
32 if(!lua_isnumber(L, 2)) {
33 LUADIE(L, ERROR_LUAL2BTYPE, "luaObjTimerNew (2)");
34 } else {
35 interval = (double)lua_tonumber(L, 2);
36 }
37
38 Uint32 idx = registerTimerTrigger(funcname, interval);
39 luaObjPushTimer(L, idx);
40 return 1;
41 }
42
luaObjPushTimer(lua_State * L,Uint32 idx)43 void luaObjPushTimer(lua_State *L, Uint32 idx) {
44 bsl_startobject();
45 bsl_addobjectfunction("active", luaObjTimerActive, idx);
46 bsl_addobjectfunction("interval", luaObjTimerActive, idx);
47 bsl_addobjectnumbervalue("internal", idx);
48 bsl_endobject();
49 }
50
51 // Sets the active property
luaObjTimerActive(lua_State * L)52 int luaObjTimerActive(lua_State *L) {
53 Uint32 objid = 0;
54 Uint32 n = lua_gettop(L);
55 if(n > 1) {
56 LUADIE(L, ERROR_LUAARGCOUNT, "luaObjTimerActive");
57 }
58
59 if(!lua_isnumber(L, lua_upvalueindex(1))) {
60 LUADIE(L, ERROR_LUAL2BTYPE, "luaObjTimerActive (id)");
61 } else {
62 objid = (Uint32)lua_tonumber(L, lua_upvalueindex(1));
63 }
64
65 bool isActive = false;
66 if(n == 1) {
67 if(!lua_isnumber(L, 1)) {
68 LUADIE(L, ERROR_LUAL2BTYPE, "luaObjTimerActive");
69 } else {
70 if(lua_tonumber(L, 1) == 0) {
71 isActive = false;
72 } else if(lua_tonumber(L, 1) == 1){
73 isActive = true;
74 } else {
75 LUADIE(L, ERROR_LUAL2BRANGE, "luaObjTimerActive");
76 }
77 }
78 setTimerTriggerActive(objid, isActive);
79 }
80
81 if(getTimerTriggerActive(objid)) {
82 lua_pushnumber(L, 1);
83 } else {
84 lua_pushnumber(L, 0);
85 }
86
87 return 1;
88 }
89
90 // sets the timer interval
luaObjTimerInterval(lua_State * L)91 int luaObjTimerInterval(lua_State *L) {
92 Uint32 objid = 0;
93 Uint32 n = lua_gettop(L);
94 if(n > 1) {
95 LUADIE(L, ERROR_LUAARGCOUNT, "luaObjTimerActive");
96 }
97
98 if(!lua_isnumber(L, lua_upvalueindex(1))) {
99 LUADIE(L, ERROR_LUAL2BTYPE, "luaObjTimerActive (id)");
100 } else {
101 objid = (Uint32)lua_tonumber(L, lua_upvalueindex(1));
102 }
103
104 double interval = 0.0;
105 if(n == 1) {
106 if(!lua_isnumber(L, 1)) {
107 LUADIE(L, ERROR_LUAL2BTYPE, "luaObjTimerActive");
108 } else {
109 interval = (double)lua_tonumber(L, 1);
110 }
111 setTimerTriggerInterval(objid, interval);
112 }
113
114 interval = getTimerTriggerInterval(objid);
115 lua_pushnumber(L, interval);
116
117 return 1;
118 }
119
120