[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Stratagus-CVS] stratagus/src/game trigger.c
From: |
address@hidden |
Subject: |
[Stratagus-CVS] stratagus/src/game trigger.c |
Date: |
21 Jan 2004 11:46:37 +1100 |
CVSROOT: /home/strat
Module name: stratagus
Changes by: <address@hidden> 04/01/21 11:46:37
Modified files:
src/game : trigger.c
Log message:
Load/save trigger fixes
Patches:
Index: stratagus/src/game/trigger.c
diff -u stratagus/src/game/trigger.c:1.59 stratagus/src/game/trigger.c:1.60
--- stratagus/src/game/trigger.c:1.59 Mon Jan 19 09:36:25 2004
+++ stratagus/src/game/trigger.c Wed Jan 21 11:46:37 2004
@@ -26,7 +26,7 @@
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
// 02111-1307, USA.
//
-// $Id: trigger.c,v 1.59 2004/01/18 22:36:25 nobody_ Exp $
+// $Id: trigger.c,v 1.60 2004/01/21 00:46:37 jsalmon3 Exp $
//@{
@@ -63,9 +63,9 @@
global Timer GameTimer; /// The game timer
local unsigned long WaitFrame; /// Frame to wait for
local int Trigger;
-local int WaitScript;
local int WaitTrigger;
local unsigned char Switch[MAX_SWITCH]; /// Switches
+local int* ActiveTriggers;
/*----------------------------------------------------------------------------
-- Functions
@@ -1065,9 +1065,6 @@
local int CclAddTrigger(lua_State* l)
{
int i;
- const char* str;
- int args;
- int j;
if (lua_gettop(l) != 2 || !lua_isfunction(l, 1) ||
(!lua_isfunction(l, 2) && !lua_istable(l, 2))) {
@@ -1093,62 +1090,56 @@
}
i = luaL_getn(l, -1);
- lua_pushvalue(l, 1);
- lua_rawseti(l, -2, i + 1);
- lua_newtable(l);
- if (lua_isfunction(l, 2)) {
+ if (ActiveTriggers && !ActiveTriggers[i / 2]) {
+ lua_pushnil(l);
+ lua_rawseti(l, -2, i + 1);
+ lua_pushnil(l);
+ lua_rawseti(l, -2, i + 2);
+ } else {
+ lua_pushvalue(l, 1);
+ lua_rawseti(l, -2, i + 1);
+ lua_newtable(l);
lua_pushvalue(l, 2);
lua_rawseti(l, -2, 1);
- } else {
- args = luaL_getn(l, 2);
- for (j = 0; j < args; ++j) {
- lua_rawgeti(l, 2, j + 1);
- str = LuaToString(l, -1);
- lua_pop(l, 1);
- luaL_loadbuffer(l, str, strlen(str), str);
- lua_rawseti(l, -2, j + 1);
- }
+ lua_rawseti(l, -2, i + 2);
}
- lua_rawseti(l, -2, i + 2);
lua_pop(l, 1);
return 0;
}
/**
-** Set the current trigger number
-**
-** @param number Trigger number
+** Set the trigger values
*/
-#if defined(USE_GUILE) || defined(USE_SIOD)
-local SCM CclSetTriggerNumber(SCM number)
+local int CclSetTriggers(lua_State* l)
{
- int num;
- int i;
+ if (lua_gettop(l) != 3) {
+ lua_pushstring(l, "incorrect argument");
+ lua_error(l);
+ }
+ Trigger = LuaToNumber(l, 1);
+ WaitTrigger = LuaToNumber(l, 2);
+ WaitFrame = LuaToNumber(l, 3);
- num = gh_scm2int(number);
- if (num == -1) {
- CclGcProtectedAssign(&Trigger, NULL);
- } else {
- CclGcProtectedAssign(&Trigger,
symbol_value(gh_symbol2scm("*triggers*"), NIL));
- if (gh_null_p(Trigger)) {
- DebugLevel0Fn("Invalid trigger number: %d out of -1\n"
_C_ num);
- } else {
- for (i = 0; i < num; ++i) {
- if (gh_null_p(Trigger)) {
- DebugLevel0Fn("Invalid trigger number:
%d out of %d\n" _C_
- num _C_ i - 1);
- break;
- }
- CclGcProtectedAssign(&Trigger, gh_cdr(Trigger));
- }
- }
+ return 0;
+}
+
+/**
+** Set the active triggers
+*/
+local int CclSetActiveTriggers(lua_State* l)
+{
+ int args;
+ int j;
+
+ args = lua_gettop(l);
+ ActiveTriggers = malloc(args * sizeof(*ActiveTriggers));
+ for (j = 0; j < args; ++j) {
+ ActiveTriggers[j] = LuaToBoolean(l, j + 1);
}
- return SCM_UNSPECIFIED;
+ return 0;
}
-#elif defined(USE_LUA)
-#endif
/**
** Execute a trigger action
@@ -1177,7 +1168,6 @@
}
lua_settop(Lua, 2);
if (WaitFrame > FrameCounter) {
- WaitScript = script;
lua_pop(Lua, 1);
return 0;
}
@@ -1222,7 +1212,7 @@
}
if (WaitFrame && WaitFrame <= FrameCounter) {
WaitFrame = 0;
- if (TriggerExecuteAction(WaitScript)) {
+ if (TriggerExecuteAction(WaitTrigger + 1)) {
TriggerRemoveTrigger(WaitTrigger);
}
lua_pop(Lua, 1);
@@ -1240,17 +1230,14 @@
if (!lua_isnil(Lua, -1)) {
break;
}
+ lua_pop(Lua, 1);
Trigger += 2;
}
if (Trigger < triggers) {
- int top;
-
WaitTrigger = Trigger;
Trigger += 2;
- top = lua_gettop(Lua);
LuaCall(0, 0);
// If condition is true execute action
- top = lua_gettop(Lua);
if (lua_gettop(Lua) > 1 && lua_toboolean(Lua, -1)) {
lua_settop(Lua, 1);
if (TriggerExecuteAction(WaitTrigger + 1)) {
@@ -1268,7 +1255,8 @@
global void TriggerCclRegister(void)
{
lua_register(Lua, "AddTrigger", CclAddTrigger);
-// lua_register(Lua, "SetTriggerNumber!", CclSetTriggerNumber);
+ lua_register(Lua, "SetTriggers", CclSetTriggers);
+ lua_register(Lua, "SetActiveTriggers", CclSetActiveTriggers);
// Conditions
lua_register(Lua, "IfUnit", CclIfUnit);
lua_register(Lua, "IfUnitAt", CclIfUnitAt);
@@ -1299,31 +1287,29 @@
*/
global void SaveTriggers(CLFile* file)
{
-#if defined(USE_GUILE) || defined(USE_SIOD)
- SCM list;
int i;
- int trigger;
+ int triggers;
- CLprintf(file, "\n;;; -----------------------------------------\n");
- CLprintf(file, ";;; MODULE: trigger $Id: trigger.c,v 1.59 2004/01/18
22:36:25 nobody_ Exp $\n\n");
+ lua_pushstring(Lua, "_triggers_");
+ lua_gettable(Lua, LUA_GLOBALSINDEX);
+ triggers = luaL_getn(Lua, -1);
- i = 0;
- trigger = -1;
- list = symbol_value(gh_symbol2scm("*triggers*"), NIL);
- while (!gh_null_p(list)) {
- if (gh_eq_p(Trigger, list)) {
- trigger = i;
- }
- CLprintf(file, "(add-trigger '");
- PrintTrigger(gh_car(gh_car(list)), file);
- CLprintf(file, " '");
- PrintTrigger(gh_cdr(gh_car(list)), file);
- CLprintf(file, ")\n");
- list = gh_cdr(list);
- ++i;
+ CLprintf(file, "SetActiveTriggers(");
+ for (i = 0; i < triggers; i += 2) {
+ lua_rawgeti(Lua, -1, i + 1);
+ if (i) {
+ CLprintf(file, ", ");
+ }
+ if (!lua_isnil(Lua, -1)) {
+ CLprintf(file, "true");
+ } else {
+ CLprintf(file, "false");
+ }
+ lua_pop(Lua, 1);
}
-#endif
-// CLprintf(file, "(set-trigger-number! %d)\n", trigger);
+ CLprintf(file, ")\n");
+
+ CLprintf(file, "SetTriggers(%d, %d, %d)\n", Trigger, WaitTrigger,
WaitFrame);
if (GameTimer.Init) {
CLprintf(file, "ActionSetTimer(%ld, %d)\n",
@@ -1368,6 +1354,9 @@
lua_settable(Lua, LUA_GLOBALSINDEX);
Trigger = 0;
+
+ free(ActiveTriggers);
+ ActiveTriggers = NULL;
memset(&GameTimer, 0, sizeof(GameTimer));
}