mirror of
https://github.com/UberGames/RPG-X2.git
synced 2024-11-28 07:02:30 +00:00
Some cgame lua things
This commit is contained in:
parent
b45d86b603
commit
268f6dcc74
6 changed files with 137 additions and 20 deletions
|
@ -59,6 +59,8 @@ OBJ = \
|
|||
cg_lua.o \
|
||||
lua_vector.o \
|
||||
lua_qmath.o \
|
||||
lua_cfx.o \
|
||||
lua_cent.o \
|
||||
|
||||
# depency objects from game
|
||||
OBJDEP = \
|
||||
|
@ -151,6 +153,8 @@ fx_tetrion.o : fx_tetrion.c; $(DO_CC)
|
|||
fx_transporter.o : fx_transporter.c; $(DO_CC)
|
||||
lua_qmath.o: ../game/lua_qmath.c; $(DO_CC)
|
||||
lua_vector.o: ../game/lua_vector.c; $(DO_CC)
|
||||
lua_cfx.o: lua_cfx.c; $(DO_CC)
|
||||
lua_cent.o: lua_cent.c; $(DO_CC)
|
||||
|
||||
# dependencies from game
|
||||
q_shared.o: ../game/q_shared.c; $(DO_CC)
|
||||
|
|
|
@ -2,13 +2,7 @@
|
|||
|
||||
#include "cg_lua.h"
|
||||
|
||||
#ifdef G_LUA
|
||||
|
||||
#if defined(__linux__) || defined(__WIN32__) || defined(__APPLE__) || 1 /* linux, mingw32, OS X - the 1 is temporary*/
|
||||
#include <dirent.h> /* Note the MSVC project assumes mingw is installed at C:\MinGW\include */
|
||||
#else // MSVC
|
||||
// TODO: I don't care much about MSVC as I user mingw on Windows to compile :P
|
||||
#endif
|
||||
#ifdef CG_LUA
|
||||
|
||||
lvm_t *lVM[NUM_VMS];
|
||||
fileHandle_t lualog;
|
||||
|
@ -105,24 +99,17 @@ qboolean LoadLuaFile(char *path, int num_vm)
|
|||
|
||||
qboolean CG_LuaInit()
|
||||
{
|
||||
#if defined(__linux__) || defined(__WIN32__) || defined(__APPLE__) || 1 /* linux, mingw32, OS X - the 1 is temporary*/
|
||||
DIR *pdir = NULL;
|
||||
struct dirent *pent = NULL;
|
||||
#else // MSVC
|
||||
|
||||
#endif
|
||||
char fxfilename[MAX_QPATH];
|
||||
fileHandle_t fxfile;
|
||||
|
||||
CG_Printf("------- CG_LuaInit -------\n");
|
||||
|
||||
#if defined(__linux__) || defined(__WIN32__) || defined(__APPLE__) || 1 /* linux, mingw32, OS X - the 1 is temporary*/
|
||||
// read map fx file
|
||||
|
||||
#else // MSVC
|
||||
|
||||
#endif
|
||||
|
||||
// not much to do for now
|
||||
// open log file
|
||||
if(cg_logLua.integer) {
|
||||
trap_FS_FOpenFile("./cg_lua.log", &lualog, FS_APPEND);
|
||||
trap_FS_FOpenFile("cg_lua.log", &lualog, FS_APPEND);
|
||||
}
|
||||
|
||||
CG_Printf("------- CG_LuaInit Finish -------\n");
|
||||
|
|
|
@ -66,4 +66,36 @@ void Lua_PushVector(lua_State *L, vec3_t v);
|
|||
vec_t *Lua_GetVector(lua_State *L, int argNum);
|
||||
int Lua_IsVector(lua_State *L, int index);
|
||||
vec3_t *Lua_GetVectorMisc(lua_State *L, int *index);
|
||||
|
||||
// lua_cfx.c
|
||||
typedef struct {
|
||||
char luaFunc[MAX_QPATH];
|
||||
} cfx_t;
|
||||
|
||||
#ifdef QVM
|
||||
#define MAX_CFX_CNT 32
|
||||
|
||||
typedef struct {
|
||||
cfx_t *cfx[MAX_CFX_CNT];
|
||||
int cnt;
|
||||
} cfxList_t;
|
||||
#else
|
||||
typedef struct {
|
||||
cfx_t **cfx;
|
||||
int cnt;
|
||||
} cfxList_t;
|
||||
#endif
|
||||
|
||||
void Lua_CFX_LoadMapFxFile(void);
|
||||
|
||||
// lua_cent.c
|
||||
typedef struct {
|
||||
centity_t *e;
|
||||
} cent_t;
|
||||
|
||||
int Luaopen_Cent(lua_State *L);
|
||||
void Lua_PushCent(lua_State *L, centity_t *ent);
|
||||
cent_t *Lua_GetCent(lua_State *L, int argNum);
|
||||
// lua_refent.c
|
||||
|
||||
#endif
|
||||
|
|
75
cgame/lua_cent.c
Normal file
75
cgame/lua_cent.c
Normal file
|
@ -0,0 +1,75 @@
|
|||
#include "cg_lua.h"
|
||||
|
||||
#ifdef CG_LUA
|
||||
static int Cent_GC(lua_State * L)
|
||||
{
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int Cent_ToString(lua_State * L)
|
||||
{
|
||||
cent_t *cent;
|
||||
centity_t *ent;
|
||||
char buf[MAX_STRING_CHARS];
|
||||
|
||||
cent = Lua_GetCent(L, 1);
|
||||
ent = cent->e;
|
||||
Com_sprintf(buf, sizeof(buf), "centity: id=%d pointer=%p\n", ent - cg_entities, ent);
|
||||
lua_pushstring(L, buf);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static const luaL_Reg Centity_ctor[] = {
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
static const luaL_Reg Centity_meta[] = {
|
||||
{"__gc", Cent_GC},
|
||||
{"__tostring", Cent_ToString},
|
||||
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
/*void dummy(gentity_t *ent) {
|
||||
ent->timestamp;
|
||||
}*/
|
||||
|
||||
int Luaopen_Cent(lua_State * L)
|
||||
{
|
||||
luaL_newmetatable(L, "cgame.centity");
|
||||
|
||||
lua_pushstring(L, "__index");
|
||||
lua_pushvalue(L, -2);
|
||||
lua_settable(L, -3);
|
||||
|
||||
luaL_register(L, NULL, Centity_meta);
|
||||
luaL_register(L, "centity", Centity_ctor);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void Lua_PushCent(lua_State * L, centity_t * ent)
|
||||
{
|
||||
cent_t *cent;
|
||||
|
||||
if(!ent)
|
||||
lua_pushnil(L);
|
||||
else {
|
||||
cent = (cent_t *)lua_newuserdata(L, sizeof(cent_t));
|
||||
luaL_getmetatable(L, "cgame.centity");
|
||||
lua_setmetatable(L, -2);
|
||||
cent->e = ent;
|
||||
}
|
||||
}
|
||||
|
||||
cent_t *Lua_GetCent(lua_State * L, int argNum)
|
||||
{
|
||||
void *ud;
|
||||
|
||||
ud = luaL_checkudata(L, argNum, "cgame.centity");
|
||||
luaL_argcheck(L, ud != NULL, argNum, "\'centity\' expected");
|
||||
return (cent_t *) ud;
|
||||
}
|
||||
#endif
|
19
cgame/lua_cfx.c
Normal file
19
cgame/lua_cfx.c
Normal file
|
@ -0,0 +1,19 @@
|
|||
#include "cg_lua.h"
|
||||
|
||||
#ifdef CG_LUA
|
||||
|
||||
void Lua_CFX_ParseMapFxFile(fileHandle_t *f) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
void Lua_CFX_LoadMapFxFile(void) {
|
||||
char filename[MAX_QPATH];
|
||||
fileHandle_t file;
|
||||
|
||||
sprintf(filename, "maps/%s.fx", cgs.mapname);
|
||||
trap_FS_FOpenFile(filename, &file, FS_READ);
|
||||
if(!file) return;
|
||||
|
||||
Lua_CFX_ParseMapFxFile(&file);
|
||||
}
|
||||
#endif
|
BIN
stefgame.suo
BIN
stefgame.suo
Binary file not shown.
Loading…
Reference in a new issue