[Top][All Lists]
[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: |
15 Dec 2003 15:16:50 +1100 |
CVSROOT: /home/strat
Module name: stratagus
Changes by: <address@hidden> 03/12/15 15:16:50
Modified files:
src/missile : ccl_missile.c
Log message:
Changed DefineMissile to use a table
Patches:
Index: stratagus/src/missile/ccl_missile.c
diff -u stratagus/src/missile/ccl_missile.c:1.48
stratagus/src/missile/ccl_missile.c:1.49
--- stratagus/src/missile/ccl_missile.c:1.48 Mon Dec 15 14:44:47 2003
+++ stratagus/src/missile/ccl_missile.c Mon Dec 15 15:16:49 2003
@@ -8,7 +8,7 @@
// T H E W A R B E G I N S
// Stratagus - A free fantasy real time strategy game engine
//
-/address@hidden ccl_missile.c - The missile-type ccl functions. */
+/address@hidden ccl_missile.c - The missile-type ccl functions. */
//
// (c) Copyright 2002-2003 by Lutz Sammer
//
@@ -26,7 +26,7 @@
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
// 02111-1307, USA.
//
-// $Id: ccl_missile.c,v 1.48 2003/12/15 03:44:47 jsalmon3 Exp $
+// $Id: ccl_missile.c,v 1.49 2003/12/15 04:16:49 jsalmon3 Exp $
//@{
@@ -172,16 +172,15 @@
char* str;
MissileType* mtype;
unsigned i;
- int args;
- int j;
- args = lua_gettop(l);
- j = 0;
+ if (lua_gettop(l) != 2 || !lua_istable(l, 2)) {
+ lua_pushstring(l, "incorrect argument");
+ lua_error(l);
+ }
// Slot identifier
- str = strdup(LuaToString(l, j + 1));
- ++j;
+ str = strdup(LuaToString(l, 1));
#ifdef DEBUG
i = NoWarningMissileType;
NoWarningMissileType = 1;
@@ -200,38 +199,39 @@
mtype->NumDirections = 1;
// Ensure we don't divide by zero.
mtype->SplashFactor = 100;
+
//
- // Parse the arguments, already the new tagged format.
+ // Parse the arguments
//
- for (; j < args; ++j) {
- value = LuaToString(l, j + 1);
- ++j;
- if (!strcmp(value, "file")) {
+ lua_pushnil(l);
+ while (lua_next(l, 2)) {
+ value = LuaToString(l, -2);
+ 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)) {
+ mtype->File = strdup(LuaToString(l, -1));
+ } else if (!strcmp(value, "Size")) {
+ if (!lua_istable(l, -1) || luaL_getn(l, -1) != 2) {
lua_pushstring(l, "incorrect argument");
lua_error(l);
}
- lua_rawgeti(l, j + 1, 1);
+ lua_rawgeti(l, -1, 1);
mtype->Width = LuaToNumber(l, -1);
lua_pop(l, 1);
- lua_rawgeti(l, j + 1, 2);
+ lua_rawgeti(l, -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")) {
+ } else if (!strcmp(value, "Frames")) {
+ mtype->SpriteFrames = LuaToNumber(l, -1);
+ } else if (!strcmp(value, "NumDirections")) {
+ mtype->NumDirections = LuaToNumber(l, -1);
+ } else if (!strcmp(value, "FiredSound")) {
free(mtype->FiredSound.Name);
- mtype->FiredSound.Name = strdup(LuaToString(l, j + 1));
- } else if (!strcmp(value, "impact-sound")) {
+ mtype->FiredSound.Name = strdup(LuaToString(l, -1));
+ } else if (!strcmp(value, "ImpactSound")) {
free(mtype->ImpactSound.Name);
- mtype->ImpactSound.Name = strdup(LuaToString(l, j + 1));
- } else if (!strcmp(value, "class")) {
- value = LuaToString(l, j + 1);
+ mtype->ImpactSound.Name = strdup(LuaToString(l, -1));
+ } else if (!strcmp(value, "Class")) {
+ value = LuaToString(l, -1);
for (i = 0; MissileClassNames[i]; ++i) {
if (!strcmp(value, MissileClassNames[i])) {
mtype->Class = i;
@@ -239,39 +239,38 @@
}
}
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")) {
+ } else if (!strcmp(value, "NumBounces")) {
+ mtype->NumBounces = LuaToNumber(l, -1);
+ } else if (!strcmp(value, "Delay")) {
+ mtype->StartDelay = LuaToNumber(l, -1);
+ } else if (!strcmp(value, "Sleep")) {
+ mtype->Sleep = LuaToNumber(l, -1);
+ } else if (!strcmp(value, "Speed")) {
+ mtype->Speed = LuaToNumber(l, -1);
+ } else if (!strcmp(value, "DrawLevel")) {
+ mtype->DrawLevel = LuaToNumber(l, -1);
+ } else if (!strcmp(value, "Range")) {
+ mtype->Range = LuaToNumber(l, -1);
+ } else if (!strcmp(value, "ImpactMissile")) {
free(mtype->ImpactName);
- mtype->ImpactName = strdup(LuaToString(l, j + 1));
- } else if (!strcmp(value, "smoke-missile")) {
+ mtype->ImpactName = strdup(LuaToString(l, -1));
+ } else if (!strcmp(value, "SmokeMissile")) {
free(mtype->ImpactName);
- mtype->SmokeName = strdup(LuaToString(l, j + 1));
- } else if (!strcmp(value, "can-hit-owner")) {
- mtype->CanHitOwner = 1;
- } else if (!strcmp(value, "friendly-fire")) {
- mtype->FriendlyFire = 1;
- } else if (!strcmp(value, "splash-factor")) {
- mtype->SplashFactor = LuaToNumber(l, j + 1);
+ mtype->SmokeName = strdup(LuaToString(l, -1));
+ } else if (!strcmp(value, "CanHitOwner")) {
+ mtype->CanHitOwner = LuaToBoolean(l, -1);
+ } else if (!strcmp(value, "FriendlyFire")) {
+ mtype->FriendlyFire = LuaToBoolean(l, -1);
+ } else if (!strcmp(value, "SplashFactor")) {
+ mtype->SplashFactor = LuaToNumber(l, -1);
} else {
- // FIXME: this leaves a half initialized missile-type
lua_pushfstring(l, "Unsupported tag: %s", value);
lua_error(l);
}
+ lua_pop(l, 1);
}
return 0;