BGE Python API - GameLogic.getBlendFileList(path='//') to return a list of blend's in the current directory. Needed for creating a level selector that lists all files in the level directory.

CMakeFile include path to compile with recent changes.
This commit is contained in:
Campbell Barton
2008-08-22 06:02:01 +00:00
parent 4655426ec7
commit 9b29810912
3 changed files with 77 additions and 68 deletions

View File

@@ -31,6 +31,7 @@
#include "GL/glew.h"
#include <stdlib.h>
#include <dirent.h> // directory header for py function getBlendFileList
#ifdef WIN32
#pragma warning (disable : 4786)
@@ -112,9 +113,7 @@ static PyObject* gPyGetRandomFloat(PyObject*)
return PyFloat_FromDouble(MT_random());
}
static PyObject* gPySetGravity(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetGravity(PyObject*, PyObject* args)
{
MT_Vector3 vec = MT_Vector3(0., 0., 0.);
if (PyVecArgTo(args, vec))
@@ -138,9 +137,7 @@ file to make a full path name (doesn't change during the game, even if you load\
other .blend).\n\
The function also converts the directory separator to the local file system format.";
static PyObject* gPyExpandPath(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPyExpandPath(PyObject*, PyObject* args)
{
char expanded[FILE_MAXDIR + FILE_MAXFILE];
char* filename;
@@ -185,9 +182,7 @@ static PyObject* gPyGetSpectrum(PyObject*)
static PyObject* gPyStartDSP(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPyStartDSP(PyObject*, PyObject* args)
{
SND_IAudioDevice* audiodevice = SND_DeviceManager::Instance();
@@ -205,9 +200,7 @@ static PyObject* gPyStartDSP(PyObject*,
static PyObject* gPyStopDSP(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPyStopDSP(PyObject*, PyObject* args)
{
SND_IAudioDevice* audiodevice = SND_DeviceManager::Instance();
@@ -223,9 +216,7 @@ static PyObject* gPyStopDSP(PyObject*,
return NULL;
}
static PyObject* gPySetLogicTicRate(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetLogicTicRate(PyObject*, PyObject* args)
{
float ticrate;
if (PyArg_ParseTuple(args, "f", &ticrate))
@@ -242,9 +233,7 @@ static PyObject* gPyGetLogicTicRate(PyObject*)
return PyFloat_FromDouble(KX_KetsjiEngine::GetTicRate());
}
static PyObject* gPySetPhysicsTicRate(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetPhysicsTicRate(PyObject*, PyObject* args)
{
float ticrate;
if (PyArg_ParseTuple(args, "f", &ticrate))
@@ -257,9 +246,7 @@ static PyObject* gPySetPhysicsTicRate(PyObject*,
return NULL;
}
static PyObject* gPySetPhysicsDebug(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetPhysicsDebug(PyObject*, PyObject* args)
{
int debugMode;
if (PyArg_ParseTuple(args, "i", &debugMode))
@@ -278,6 +265,44 @@ static PyObject* gPyGetPhysicsTicRate(PyObject*)
return PyFloat_FromDouble(PHY_GetActiveEnvironment()->getFixedTimeStep());
}
static PyObject* gPyGetBlendFileList(PyObject*, PyObject* args)
{
char cpath[sizeof(G.sce)];
char *searchpath = NULL;
PyObject* list;
DIR *dp;
struct dirent *dirp;
if (!PyArg_ParseTuple(args, "|s", &searchpath))
return NULL;
list = PyList_New(0);
if (searchpath) {
BLI_strncpy(cpath, searchpath, FILE_MAXDIR + FILE_MAXFILE);
BLI_convertstringcode(cpath, G.sce);
} else {
/* Get the dir only */
BLI_split_dirfile_basic(G.sce, cpath, NULL);
}
if((dp = opendir(cpath)) == NULL) {
/* todo, show the errno, this shouldnt happen anyway if the blendfile is readable */
fprintf(stderr, "Could not read directoty () failed, code %d (%s)\n", cpath, errno, strerror(errno));
return list;
}
while ((dirp = readdir(dp)) != NULL) {
if (BLI_testextensie(dirp->d_name, ".blend")) {
PyList_Append(list, PyString_FromString(dirp->d_name));
}
}
closedir(dp);
return list;
}
static STR_String gPyGetCurrentScene_doc =
"getCurrentScene()\n"
"Gets a reference to the current scene.\n";
@@ -377,14 +402,13 @@ static struct PyMethodDef game_methods[] = {
{"setLogicTicRate", (PyCFunction) gPySetLogicTicRate, METH_VARARGS, "Sets the logic tic rate"},
{"getPhysicsTicRate", (PyCFunction) gPyGetPhysicsTicRate, METH_NOARGS, "Gets the physics tic rate"},
{"setPhysicsTicRate", (PyCFunction) gPySetPhysicsTicRate, METH_VARARGS, "Sets the physics tic rate"},
{"getBlendFileList", (PyCFunction)gPyGetBlendFileList, METH_VARARGS, "Gets a list of blend files in the same directory as the current blend file"},
{"PrintGLInfo", (PyCFunction)pyPrintExt, METH_NOARGS, "Prints GL Extension Info"},
{NULL, (PyCFunction) NULL, 0, NULL }
};
static PyObject* gPyGetWindowHeight(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPyGetWindowHeight(PyObject*, PyObject* args)
{
int height = (gp_Canvas ? gp_Canvas->GetHeight() : 0);
@@ -394,9 +418,7 @@ static PyObject* gPyGetWindowHeight(PyObject*,
static PyObject* gPyGetWindowWidth(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPyGetWindowWidth(PyObject*, PyObject* args)
{
@@ -411,9 +433,7 @@ static PyObject* gPyGetWindowWidth(PyObject*,
// temporarility visibility thing, will be moved to rasterizer/renderer later
bool gUseVisibilityTemp = false;
static PyObject* gPyEnableVisibility(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPyEnableVisibility(PyObject*, PyObject* args)
{
int visible;
if (PyArg_ParseTuple(args,"i",&visible))
@@ -429,9 +449,7 @@ static PyObject* gPyEnableVisibility(PyObject*,
static PyObject* gPyShowMouse(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPyShowMouse(PyObject*, PyObject* args)
{
int visible;
if (PyArg_ParseTuple(args,"i",&visible))
@@ -455,9 +473,7 @@ static PyObject* gPyShowMouse(PyObject*,
static PyObject* gPySetMousePosition(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetMousePosition(PyObject*, PyObject* args)
{
int x,y;
if (PyArg_ParseTuple(args,"ii",&x,&y))
@@ -472,9 +488,7 @@ static PyObject* gPySetMousePosition(PyObject*,
Py_Return;
}
static PyObject* gPySetEyeSeparation(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetEyeSeparation(PyObject*, PyObject* args)
{
float sep;
if (PyArg_ParseTuple(args, "f", &sep))
@@ -496,9 +510,7 @@ static PyObject* gPyGetEyeSeparation(PyObject*, PyObject*, PyObject*)
return NULL;
}
static PyObject* gPySetFocalLength(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetFocalLength(PyObject*, PyObject* args)
{
float focus;
if (PyArg_ParseTuple(args, "f", &focus))
@@ -518,9 +530,7 @@ static PyObject* gPyGetFocalLength(PyObject*, PyObject*, PyObject*)
return NULL;
}
static PyObject* gPySetBackgroundColor(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetBackgroundColor(PyObject*, PyObject* args)
{
MT_Vector4 vec = MT_Vector4(0., 0., 0.3, 0.);
@@ -538,9 +548,7 @@ static PyObject* gPySetBackgroundColor(PyObject*,
static PyObject* gPySetMistColor(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetMistColor(PyObject*, PyObject* args)
{
MT_Vector3 vec = MT_Vector3(0., 0., 0.);
@@ -558,9 +566,7 @@ static PyObject* gPySetMistColor(PyObject*,
static PyObject* gPySetMistStart(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetMistStart(PyObject*, PyObject* args)
{
float miststart;
@@ -579,9 +585,7 @@ static PyObject* gPySetMistStart(PyObject*,
static PyObject* gPySetMistEnd(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetMistEnd(PyObject*, PyObject* args)
{
float mistend;
@@ -599,9 +603,7 @@ static PyObject* gPySetMistEnd(PyObject*,
}
static PyObject* gPySetAmbientColor(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPySetAmbientColor(PyObject*, PyObject* args)
{
MT_Vector3 vec = MT_Vector3(0., 0., 0.);
@@ -620,9 +622,7 @@ static PyObject* gPySetAmbientColor(PyObject*,
static PyObject* gPyMakeScreenshot(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPyMakeScreenshot(PyObject*, PyObject* args)
{
char* filename;
if (PyArg_ParseTuple(args,"s",&filename))
@@ -638,9 +638,7 @@ static PyObject* gPyMakeScreenshot(PyObject*,
Py_Return;
}
static PyObject* gPyEnableMotionBlur(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPyEnableMotionBlur(PyObject*, PyObject* args)
{
float motionblurvalue;
if (PyArg_ParseTuple(args,"f",&motionblurvalue))
@@ -656,9 +654,7 @@ static PyObject* gPyEnableMotionBlur(PyObject*,
Py_Return;
}
static PyObject* gPyDisableMotionBlur(PyObject*,
PyObject* args,
PyObject*)
static PyObject* gPyDisableMotionBlur(PyObject*, PyObject* args)
{
if(gp_Rasterizer)
{