diff options
author | Erwin Coumans <blender@erwincoumans.com> | 2006-05-23 01:03:43 +0400 |
---|---|---|
committer | Erwin Coumans <blender@erwincoumans.com> | 2006-05-23 01:03:43 +0400 |
commit | ab71e2a9b55e0982d1134792d10af55464c7ac9e (patch) | |
tree | 4a53791a67d3234360107a33c5365d4de4844bb7 /source/gameengine/BlenderRoutines | |
parent | 677cf7f1333c634a52227a15d6dcb3351b39febc (diff) |
-added basic support for GameActuator 'load game', relative paths were broken, just load file into memory and load blend from memory.
-near sensor support
- python binding for PhysicsConstraints.setNumTimeSubSteps (dividing the physics timestep to tradeoff quality for performance)
Diffstat (limited to 'source/gameengine/BlenderRoutines')
-rw-r--r-- | source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index 9fcbabba546..a270b73c80d 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -85,8 +85,24 @@ static BlendFileData *load_game_data(char *filename) { BlendReadError error; - BlendFileData *bfd= BLO_read_from_file(filename, &error); - + //this doesn't work anymore for relative paths, so use BLO_read_from_memory instead + //BlendFileData *bfd= BLO_read_from_file(filename, &error); + FILE* file = fopen(filename,"rb"); + BlendFileData *bfd = 0; + if (file) + { + fseek(file, 0L, SEEK_END); + int len= ftell(file); + fseek(file, 0L, SEEK_SET); + char* filebuffer= new char[len];//MEM_mallocN(len, "text_buffer"); + int sizeread = fread(filebuffer,len,1,file); + if (sizeread==1) + { + bfd = BLO_read_from_memory(filebuffer, len, &error); + } + fclose(file); + } + if (!bfd) { printf("Loading %s failed: %s\n", filename, BLO_bre_as_string(error)); } @@ -96,17 +112,17 @@ static BlendFileData *load_game_data(char *filename) { extern "C" void StartKetsjiShell(struct ScrArea *area, char* scenename, - struct Main* maggie, + struct Main* maggie1, struct SpaceIpo *sipo, int always_use_expand_framing) { int exitrequested = KX_EXIT_REQUEST_NO_REQUEST; - Main* blenderdata = maggie; + Main* blenderdata = maggie1; char* startscenename = scenename; char pathname[160]; - strcpy (pathname, maggie->name); + strcpy (pathname, blenderdata->name); STR_String exitstring = ""; BlendFileData *bfd= NULL; @@ -257,8 +273,8 @@ extern "C" void StartKetsjiShell(struct ScrArea *area, Scene *blscene = NULL; if (!bfd) { - blscene = (Scene*) maggie->scene.first; - for (Scene *sce= (Scene*) maggie->scene.first; sce; sce= (Scene*) sce->id.next) + blscene = (Scene*) blenderdata->scene.first; + for (Scene *sce= (Scene*) blenderdata->scene.first; sce; sce= (Scene*) sce->id.next) { if (startscenename == (sce->id.name+2)) { @@ -292,7 +308,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area, } // create a scene converter, create and convert the startingscene - KX_ISceneConverter* sceneconverter = new KX_BlenderSceneConverter(maggie,sipo, ketsjiengine); + KX_ISceneConverter* sceneconverter = new KX_BlenderSceneConverter(blenderdata,sipo, ketsjiengine); ketsjiengine->SetSceneConverter(sceneconverter); if (always_use_expand_framing) |