stratagus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Stratagus-CVS] stratagus/src/missile ccl_missile.c


From: address@hidden
Subject: [Stratagus-CVS] stratagus/src/missile ccl_missile.c
Date: 2 Jan 2004 14:14:35 +1100

CVSROOT:        /home/strat
Module name:    stratagus
Changes by:      <address@hidden>       04/01/02 14:14:35

Modified files:
        src/missile    : ccl_missile.c 

Log message:
        Added CclMissile

Patches:
Index: stratagus/src/missile/ccl_missile.c
diff -u stratagus/src/missile/ccl_missile.c:1.52 
stratagus/src/missile/ccl_missile.c:1.53
--- stratagus/src/missile/ccl_missile.c:1.52    Fri Jan  2 08:24:10 2004
+++ stratagus/src/missile/ccl_missile.c Fri Jan  2 14:14:34 2004
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//      $Id: ccl_missile.c,v 1.52 2004/01/01 21:24:10 jsalmon3 Exp $
+//      $Id: ccl_missile.c,v 1.53 2004/01/02 03:14:34 jsalmon3 Exp $
 
 //@{
 
@@ -216,11 +216,9 @@
 **
 **  @param list  List of all names.
 */
-#if defined(USE_GUILE) || defined(USE_SIOD)
-local SCM CclMissile(SCM list)
+local int CclMissile(lua_State* l)
 {
-       SCM value;
-       char* str;
+       const char* value;
        MissileType* type;
        int x;
        int y;
@@ -229,6 +227,8 @@
        int sx;
        int sy;
        Missile* missile;
+       int args;
+       int j;
 
        DebugLevel0Fn("FIXME: not finished\n");
 
@@ -236,38 +236,47 @@
        type = NULL;
        x = dx = y = dy = sx = sy = -1;
 
-       while (!gh_null_p(list)) {
-               value = gh_car(list);
-               list = gh_cdr(list);
-
-               if (gh_eq_p(value, gh_symbol2scm("type"))) {
-                       value = gh_car(list);
-                       list = gh_cdr(list);
-                       str = gh_scm2newstr(value, NULL);
-                       type = MissileTypeByIdent(str);
-                       free(str);
-               } else if (gh_eq_p(value, gh_symbol2scm("pos"))) {
-                       SCM sublist;
-
-                       sublist = gh_car(list);
-                       list = gh_cdr(list);
-                       x = gh_scm2int(gh_car(sublist));
-                       y = gh_scm2int(gh_cadr(sublist));
-               } else if (gh_eq_p(value, gh_symbol2scm("origin-pos"))) {
-                       SCM sublist;
-
-                       sublist = gh_car(list);
-                       list = gh_cdr(list);
-                       sx = gh_scm2int(gh_car(sublist));
-                       sy = gh_scm2int(gh_cadr(sublist));
-               } else if (gh_eq_p(value, gh_symbol2scm("goal"))) {
-                       SCM sublist;
-
-                       sublist = gh_car(list);
-                       list = gh_cdr(list);
-                       dx = gh_scm2int(gh_car(sublist));
-                       dy = gh_scm2int(gh_cadr(sublist));
-               } else if (gh_eq_p(value, gh_symbol2scm("local"))) {
+       args = lua_gettop(l);
+       for (j = 0; j < args; ++j) {
+               value = LuaToString(l, j + 1);
+               ++j;
+
+               if (!strcmp(value, "type")) {
+                       type = MissileTypeByIdent(LuaToString(l, j + 1));
+               } else if (!strcmp(value, "pos")) {
+                       if (!lua_istable(l, j + 1) || luaL_getn(l, j + 1) != 2) 
{
+                               lua_pushstring(l, "incorrect argument");
+                               lua_error(l);
+                       }
+                       lua_rawgeti(l, j + 1, 1);
+                       x = LuaToNumber(l, -1);
+                       lua_pop(l, 1);
+                       lua_rawgeti(l, j + 1, 2);
+                       y = LuaToNumber(l, -1);
+                       lua_pop(l, 1);
+               } else if (!strcmp(value, "origin-pos")) {
+                       if (!lua_istable(l, j + 1) || luaL_getn(l, j + 1) != 2) 
{
+                               lua_pushstring(l, "incorrect argument");
+                               lua_error(l);
+                       }
+                       lua_rawgeti(l, j + 1, 1);
+                       sx = LuaToNumber(l, -1);
+                       lua_pop(l, 1);
+                       lua_rawgeti(l, j + 1, 2);
+                       sy = LuaToNumber(l, -1);
+                       lua_pop(l, 1);
+               } else if (!strcmp(value, "goal")) {
+                       if (!lua_istable(l, j + 1) || luaL_getn(l, j + 1) != 2) 
{
+                               lua_pushstring(l, "incorrect argument");
+                               lua_error(l);
+                       }
+                       lua_rawgeti(l, j + 1, 1);
+                       dx = LuaToNumber(l, -1);
+                       lua_pop(l, 1);
+                       lua_rawgeti(l, j + 1, 2);
+                       dy = LuaToNumber(l, -1);
+                       lua_pop(l, 1);
+               } else if (!strcmp(value, "local")) {
                        DebugCheck(!type);
                        missile = MakeLocalMissile(type, x, y, dx, dy);
                        // we need to reinitialize position parameters - that's 
because of
@@ -281,7 +290,8 @@
                        missile->DX = dx;
                        missile->DY = dy;
                        missile->Local = 1;
-               } else if (gh_eq_p(value, gh_symbol2scm("global"))) {
+                       --j;
+               } else if (!strcmp(value, "global")) {
                        DebugCheck(!type);
                        missile = MakeMissile(type, x, y, dx, dy);
                        missile->X = x;
@@ -291,72 +301,58 @@
                        missile->DX = dx;
                        missile->DY = dy;
                        missile->Local = 0;
-               } else if (gh_eq_p(value, gh_symbol2scm("frame"))) {
+                       --j;
+               } else if (!strcmp(value, "frame")) {
+                       DebugCheck(!missile);
+                       missile->SpriteFrame = LuaToNumber(l, j + 1);
+               } else if (!strcmp(value, "state")) {
+                       DebugCheck(!missile);
+                       missile->State = LuaToNumber(l, j + 1);
+               } else if (!strcmp(value, "anim-wait")) {
+                       DebugCheck(!missile);
+                       missile->AnimWait = LuaToNumber(l, j + 1);
+               } else if (!strcmp(value, "wait")) {
+                       DebugCheck(!missile);
+                       missile->Wait = LuaToNumber(l, j + 1);
+               } else if (!strcmp(value, "delay")) {
                        DebugCheck(!missile);
-                       missile->SpriteFrame = gh_scm2int(gh_car(list));
-                       list = gh_cdr(list);
-               } else if (gh_eq_p(value, gh_symbol2scm("state"))) {
-                       DebugCheck(!missile);
-                       missile->State = gh_scm2int(gh_car(list));
-                       list = gh_cdr(list);
-               } else if (gh_eq_p(value, gh_symbol2scm("anim-wait"))) {
-                       DebugCheck(!missile);
-                       missile->AnimWait = gh_scm2int(gh_car(list));
-                       list = gh_cdr(list);
-               } else if (gh_eq_p(value, gh_symbol2scm("wait"))) {
-                       DebugCheck(!missile);
-                       missile->Wait = gh_scm2int(gh_car(list));
-                       list = gh_cdr(list);
-               } else if (gh_eq_p(value, gh_symbol2scm("delay"))) {
-                       DebugCheck(!missile);
-                       missile->Delay = gh_scm2int(gh_car(list));
-                       list = gh_cdr(list);
-               } else if (gh_eq_p(value, gh_symbol2scm("source"))) {
-                       DebugCheck(!missile);
-                       value = gh_car(list);
-                       list = gh_cdr(list);
-                       str = gh_scm2newstr(value, NULL);
-                       missile->SourceUnit = UnitSlots[strtol(str + 1, 0, 16)];
-                       free(str);
-                       ++missile->SourceUnit->Refs;
-               } else if (gh_eq_p(value, gh_symbol2scm("target"))) {
-                       DebugCheck(!missile);
-                       value = gh_car(list);
-                       list = gh_cdr(list);
-                       str = gh_scm2newstr(value, NULL);
-                       missile->TargetUnit = UnitSlots[strtol(str + 1, 0, 16)];
-                       free(str);
+                       missile->Delay = LuaToNumber(l, j + 1);
+               } else if (!strcmp(value, "source")) {
+                       DebugCheck(!missile);
+                       value = LuaToString(l, j + 1);
+                       missile->SourceUnit = UnitSlots[strtol(value + 1, 0, 
16)];
+                       missile->SourceUnit->Refs++;
+               } else if (!strcmp(value, "target")) {
+                       DebugCheck(!missile);
+                       value = LuaToString(l, j + 1);
+                       missile->TargetUnit = UnitSlots[strtol(value + 1, 0, 
16)];
                        missile->TargetUnit->Refs++;
-               } else if (gh_eq_p(value, gh_symbol2scm("damage"))) {
+               } else if (!strcmp(value, "damage")) {
                        DebugCheck(!missile);
-                       missile->Damage = gh_scm2int(gh_car(list));
-                       list = gh_cdr(list);
-               } else if (gh_eq_p(value, gh_symbol2scm("ttl"))) {
-                       DebugCheck(!missile);
-                       missile->TTL = gh_scm2int(gh_car(list));
-                       list = gh_cdr(list);
-               } else if (gh_eq_p(value, gh_symbol2scm("hidden"))) {
+                       missile->Damage = LuaToNumber(l, j + 1);
+               } else if (!strcmp(value, "ttl")) {
+                       DebugCheck(!missile);
+                       missile->TTL = LuaToNumber(l, j + 1);
+               } else if (!strcmp(value, "hidden")) {
                        DebugCheck(!missile);
                        missile->Hidden = 1;
-                       list = gh_cdr(list);
-               } else if (gh_eq_p(value, gh_symbol2scm("step"))) {
-                       SCM sublist;
-
+                       --j;
+               } else if (!strcmp(value, "step")) {
                        DebugCheck(!missile);
-                       sublist = gh_car(list);
-                       list = gh_cdr(list);
-                       missile->CurrentStep = gh_scm2int(gh_car(sublist));
-                       missile->TotalStep = gh_scm2int(gh_cadr(sublist));
+                       if (!lua_istable(l, j + 1) || luaL_getn(l, j + 1) != 2) 
{
+                               lua_pushstring(l, "incorrect argument");
+                               lua_error(l);
+                       }
+                       lua_rawgeti(l, j + 1, 1);
+                       missile->CurrentStep = LuaToNumber(l, -1);
+                       lua_pop(l, 1);
+                       lua_rawgeti(l, j + 1, 2);
+                       missile->TotalStep = LuaToNumber(l, -1);
+                       lua_pop(l, 1);
                }
        }
-       return SCM_UNSPECIFIED;
-}
-#elif defined(USE_LUA)
-local int CclMissile(lua_State* l)
-{
        return 0;
 }
-#endif
 
 /**
 **  Define burning building missiles.




reply via email to

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