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: Jimmy Salmon
Subject: [Stratagus-CVS] stratagus/src/missile ccl_missile.c
Date: Sat, 29 Nov 2003 18:09:10 -0500

CVSROOT:        /cvsroot/stratagus
Module name:    stratagus
Branch:         
Changes by:     Jimmy Salmon <address@hidden>   03/11/29 18:09:10

Modified files:
        src/missile    : ccl_missile.c 

Log message:
        Added DefineMissileType for lua

Patches:
Index: stratagus/src/missile/ccl_missile.c
diff -u stratagus/src/missile/ccl_missile.c:1.40 
stratagus/src/missile/ccl_missile.c:1.41
--- stratagus/src/missile/ccl_missile.c:1.40    Thu Nov 20 15:04:54 2003
+++ stratagus/src/missile/ccl_missile.c Sat Nov 29 18:09:10 2003
@@ -26,7 +26,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//     $Id: ccl_missile.c,v 1.40 2003/11/20 20:04:54 jsalmon3 Exp $
+//     $Id: ccl_missile.c,v 1.41 2003/11/29 23:09:10 jsalmon3 Exp $
 
 //@{
 
@@ -117,8 +117,8 @@
        } else if (gh_eq_p(value, gh_symbol2scm("class"))) {
            value = gh_car(list);
            for (i = 0; MissileClassNames[i]; ++i) {
-               if (gh_eq_p(value, gh_symbol2scm((char*)MissileClassNames[i]))) 
{
-                   mtype->Class=i;
+               if (gh_eq_p(value, gh_symbol2scm(MissileClassNames[i]))) {
+                   mtype->Class = i;
                    break;
                }
            }
@@ -130,13 +130,13 @@
            mtype->NumBounces = gh_scm2int(gh_car(list));
        } else if (gh_eq_p(value, gh_symbol2scm("delay"))) {
            mtype->StartDelay = gh_scm2int(gh_car(list));
-       } else if (gh_eq_p(value, gh_symbol2scm("sleep")) ) {
+       } else if (gh_eq_p(value, gh_symbol2scm("sleep"))) {
            mtype->Sleep = gh_scm2int(gh_car(list));
-       } else if (gh_eq_p(value, gh_symbol2scm("speed")) ) {
+       } else if (gh_eq_p(value, gh_symbol2scm("speed"))) {
            mtype->Speed = gh_scm2int(gh_car(list));
-       } else if (gh_eq_p(value, gh_symbol2scm("draw-level")) ) {
+       } else if (gh_eq_p(value, gh_symbol2scm("draw-level"))) {
            mtype->DrawLevel = gh_scm2int(gh_car(list));
-       } else if (gh_eq_p(value, gh_symbol2scm("range")) ) {
+       } else if (gh_eq_p(value, gh_symbol2scm("range"))) {
            mtype->Range = gh_scm2int(gh_car(list));
        } else if (gh_eq_p(value, gh_symbol2scm("impact-missile"))) {
            free(mtype->ImpactName);
@@ -158,6 +158,112 @@
     return SCM_UNSPECIFIED;
 }
 #elif defined(USE_LUA)
+local int CclDefineMissileType(lua_State* l)
+{
+    const char* value;
+    char* str;
+    MissileType* mtype;
+    unsigned i;
+    int args;
+    int j;
+
+    args = lua_gettop(l);
+    j = 0;
+
+    // Slot identifier
+
+    str = strdup(LuaToString(l, j + 1));
+    ++j;
+#ifdef DEBUG
+    i = NoWarningMissileType;
+    NoWarningMissileType = 1;
+#endif
+    mtype = MissileTypeByIdent(str);
+#ifdef DEBUG
+    NoWarningMissileType = i;
+#endif
+    if (mtype) {
+       DebugLevel0Fn("Redefining missile-type `%s'\n" _C_ str);
+       free(str);
+    } else {
+       mtype = NewMissileTypeSlot(str);        // str consumed!
+    }
+
+    mtype->NumDirections = 1;
+    //
+    // Parse the arguments, already the new tagged format.
+    //
+    for (; j < args; ++j) {
+       value = LuaToString(l, j + 1);
+       ++j;
+       if (!strcmp(value, "file")) {
+           free(mtype->File);
+           mtype->File = strdup(LuaToString(l, j + 1));
+       } else if (!strcmp(value, "size")) {
+           if (!lua_istable(l, j + 1)) {
+               lua_pushstring(l, "incorrect argument");
+               lua_error(l);
+           }
+           lua_rawgeti(l, j + 1, 1);
+           mtype->Width = LuaToNumber(l, -1);
+           lua_pop(l, 1);
+           lua_rawgeti(l, j + 1, 2);
+           mtype->Height = LuaToNumber(l, -1);
+           lua_pop(l, 1);
+       } else if (!strcmp(value,"frames")) {
+           mtype->SpriteFrames = LuaToNumber(l, j + 1);
+       } else if (!strcmp(value, "num-directions")) {
+           mtype->NumDirections = LuaToNumber(l, j + 1);
+       } else if (!strcmp(value, "fired-sound")) {
+           free(mtype->FiredSound.Name);
+           mtype->FiredSound.Name = strdup(LuaToString(l, j + 1));
+       } else if (!strcmp(value, "impact-sound")) {
+           free(mtype->ImpactSound.Name);
+           mtype->ImpactSound.Name = strdup(LuaToString(l, j + 1));
+       } else if (!strcmp(value, "class")) {
+           value = LuaToString(l, j + 1);
+           for (i = 0; MissileClassNames[i]; ++i) {
+               if (!strcmp(value, MissileClassNames[i])) {
+                   mtype->Class = i;
+                   break;
+               }
+           }
+           if (!MissileClassNames[i]) {
+               // FIXME: this leaves a half initialized missile-type
+               lua_pushfstring(l, "Unsupported class: %s", value);
+               lua_error(l);
+           }
+       } else if (!strcmp(value, "num-bounces")) {
+           mtype->NumBounces = LuaToNumber(l, j + 1);
+       } else if (!strcmp(value, "delay")) {
+           mtype->StartDelay = LuaToNumber(l, j + 1);
+       } else if (!strcmp(value, "sleep")) {
+           mtype->Sleep = LuaToNumber(l, j + 1);
+       } else if (!strcmp(value, "speed")) {
+           mtype->Speed = LuaToNumber(l, j + 1);
+       } else if (!strcmp(value, "draw-level")) {
+           mtype->DrawLevel = LuaToNumber(l, j + 1);
+       } else if (!strcmp(value, "range")) {
+           mtype->Range = LuaToNumber(l, j + 1);
+       } else if (!strcmp(value, "impact-missile")) {
+           free(mtype->ImpactName);
+           mtype->ImpactName = strdup(LuaToString(l, j + 1));
+       } else if (!strcmp(value, "smoke-missile")) {
+           free(mtype->ImpactName);
+           mtype->SmokeName = strdup(LuaToString(l, j + 1));
+       } else if (!strcmp(value, "can-hit-owner")) {
+           mtype->CanHitOwner = LuaToBoolean(l, j + 1);
+       } else if (!strcmp(value, "friendly-fire")) {
+           mtype->FriendlyFire = LuaToBoolean(l, j + 1);
+       } else {
+           // FIXME: this leaves a half initialized missile-type
+           lua_pushfstring(l, "Unsupported tag: %s", value);
+           lua_error(l);
+       }
+    }
+
+    return 0;
+}
 #endif
 
 /**
@@ -365,6 +471,10 @@
     return SCM_UNSPECIFIED;
 }
 #elif defined(USE_LUA)
+local int CclMissile(lua_State* l)
+{
+    return 0;
+}
 #endif
 
 /**
@@ -418,6 +528,10 @@
     return SCM_UNSPECIFIED;
 }
 #elif defined(USE_LUA)
+local int CclDefineBurningBuilding(lua_State* l)
+{
+    return 0;
+}
 #endif
 
 /**
@@ -434,9 +548,9 @@
 #elif defined(USE_LUA)
     lua_register(Lua, "DefineMissileTypeWcNames",
        CclDefineMissileTypeWcNames);
-//    lua_register("DefineMissileType", CclDefineMissileType);
-//    lua_register("Missile", CclMissile);
-//    lua_register("DefineBurningBuilding", CclDefineBurningBuilding);
+    lua_register(Lua, "DefineMissileType", CclDefineMissileType);
+    lua_register(Lua, "Missile", CclMissile);
+    lua_register(Lua, "DefineBurningBuilding", CclDefineBurningBuilding);
 #endif
 }
 




reply via email to

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