[Top][All Lists]
[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
}