diff options
-rw-r--r-- | release/scripts/op/fcurve_euler_filter.py | 3 | ||||
-rw-r--r-- | release/scripts/ui/properties_game.py | 6 | ||||
-rw-r--r-- | release/scripts/ui/space_graph.py | 2 | ||||
-rw-r--r-- | release/scripts/ui/space_info.py | 3 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_view.c | 4 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_scene_types.h | 1 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_scene.c | 25 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_rna.c | 77 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 1 | ||||
-rw-r--r-- | source/blenderplayer/bad_level_call_stubs/stubs.c | 3 | ||||
-rw-r--r-- | source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp | 227 | ||||
-rw-r--r-- | source/gameengine/Converter/KX_BlenderSceneConverter.cpp | 79 | ||||
-rw-r--r-- | source/gameengine/Converter/KX_BlenderSceneConverter.h | 4 | ||||
-rw-r--r-- | source/gameengine/GamePlayer/ghost/GPG_Application.cpp | 4 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_KetsjiEngine.cpp | 14 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_KetsjiEngine.h | 4 |
16 files changed, 120 insertions, 337 deletions
diff --git a/release/scripts/op/fcurve_euler_filter.py b/release/scripts/op/fcurve_euler_filter.py index 225d2479950..47473be0121 100644 --- a/release/scripts/op/fcurve_euler_filter.py +++ b/release/scripts/op/fcurve_euler_filter.py @@ -45,7 +45,7 @@ def main(context): class DiscontFilterOp(bpy.types.Operator): """Fixes the most common causes of gimbal lock in the fcurves of the active bone""" - bl_idname = "graph.discont_filter" + bl_idname = "graph.euler_filter" bl_label = "Filter out discontinuities in the active fcurves" def poll(self, context): @@ -63,4 +63,3 @@ def unregister(): if __name__ == "__main__": register() - diff --git a/release/scripts/ui/properties_game.py b/release/scripts/ui/properties_game.py index 52821bb6a0f..57c65402af4 100644 --- a/release/scripts/ui/properties_game.py +++ b/release/scripts/ui/properties_game.py @@ -357,13 +357,13 @@ class RENDER_PT_game_performance(RenderButtonsPanel): col.prop(gs, "show_debug_properties", text="Debug Properties") col.prop(gs, "show_framerate_profile", text="Framerate and Profile") col.prop(gs, "show_physics_visualization", text="Physics Visualization") - col.prop(gs, "deprecation_warnings") + col.prop(gs, "use_deprecation_warnings") if wide_ui: col = split.column() col.label(text="Render:") - col.prop(gs, "all_frames") - col.prop(gs, "display_lists") + col.prop(gs, "use_frame_rate") + col.prop(gs, "use_display_lists") class RENDER_PT_game_sound(RenderButtonsPanel): diff --git a/release/scripts/ui/space_graph.py b/release/scripts/ui/space_graph.py index c9c79a7f16b..138b118ea69 100644 --- a/release/scripts/ui/space_graph.py +++ b/release/scripts/ui/space_graph.py @@ -148,7 +148,7 @@ class GRAPH_MT_channel(bpy.types.Menu): layout.operator("anim.channels_collapse") layout.separator() - layout.operator("graph.discont_filter", text="Discontinuity (Euler) Filter") + layout.operator("graph.euler_filter", text="Discontinuity (Euler) Filter") class GRAPH_MT_key(bpy.types.Menu): diff --git a/release/scripts/ui/space_info.py b/release/scripts/ui/space_info.py index c50893a2483..f58c8d210fc 100644 --- a/release/scripts/ui/space_info.py +++ b/release/scripts/ui/space_info.py @@ -253,7 +253,8 @@ class INFO_MT_game(bpy.types.Menu): layout.prop(gs, "show_debug_properties") layout.prop(gs, "show_framerate_profile") layout.prop(gs, "show_physics_visualization") - layout.prop(gs, "deprecation_warnings") + layout.prop(gs, "use_deprecation_warnings") + layout.prop(gs, "use_animation_record") class INFO_MT_render(bpy.types.Menu): diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 59051c7a894..09d8d79f8f5 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1690,8 +1690,8 @@ void game_set_commmandline_options(GameData *gm) test= (gm->flag & GAME_ENABLE_ALL_FRAMES); SYS_WriteCommandLineInt(syshandle, "fixedtime", test); -// a= (G.fileflags & G_FILE_GAME_TO_IPO); -// SYS_WriteCommandLineInt(syshandle, "game2ipo", a); + test= (gm->flag & GAME_ENABLE_ANIMATION_RECORD); + SYS_WriteCommandLineInt(syshandle, "animation_record", test); test= (gm->flag & GAME_IGNORE_DEPRECATION_WARNINGS); SYS_WriteCommandLineInt(syshandle, "ignore_deprecation_warnings", test); diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index 2bea683b392..928637a0047 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -487,6 +487,7 @@ typedef struct GameData { #define GAME_GLSL_NO_NODES (1 << 10) #define GAME_GLSL_NO_EXTRA_TEX (1 << 11) #define GAME_IGNORE_DEPRECATION_WARNINGS (1 << 12) +#define GAME_ENABLE_ANIMATION_RECORD (1 << 13) /* GameData.matmode */ #define GAME_MAT_TEXFACE 0 diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index c947edd7d6d..d0745e8d159 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -1501,51 +1501,46 @@ static void rna_def_scene_game_data(BlenderRNA *brna) prop= RNA_def_property(srna, "use_occlusion_culling", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mode", (1 << 5)); //XXX mode hardcoded // WO_DBVT_CULLING RNA_def_property_ui_text(prop, "DBVT culling", "Use optimized Bullet DBVT tree for view frustrum and occlusion culling"); - RNA_def_property_update(prop, NC_SCENE, NULL); // not used // deprecated !!!!!!!!!!!!! prop= RNA_def_property(srna, "activity_culling", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mode", (1 << 3)); //XXX mode hardcoded RNA_def_property_ui_text(prop, "Activity Culling", "Activity culling is enabled"); - RNA_def_property_update(prop, NC_SCENE, NULL); // not used // deprecated !!!!!!!!!!!!! prop= RNA_def_property(srna, "activity_culling_box_radius", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "activityBoxRadius"); RNA_def_property_range(prop, 0.0, 1000.0); RNA_def_property_ui_text(prop, "box radius", "Radius of the activity bubble, in Manhattan length. Objects outside the box are activity-culled"); - RNA_def_property_update(prop, NC_SCENE, NULL); /* booleans */ - prop= RNA_def_property(srna, "all_frames", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_ENABLE_ALL_FRAMES); - RNA_def_property_ui_text(prop, "All Frames", "Render as many frames as possible, rather than respecting framerate"); - RNA_def_property_update(prop, NC_SCENE, NULL); - prop= RNA_def_property(srna, "show_debug_properties", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_SHOW_DEBUG_PROPS); RNA_def_property_ui_text(prop, "Show Debug Properties", "Show properties marked for debugging while the game runs"); - RNA_def_property_update(prop, NC_SCENE, NULL); prop= RNA_def_property(srna, "show_framerate_profile", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_SHOW_FRAMERATE); RNA_def_property_ui_text(prop, "Show Framerate and Profile", "Show framerate and profiling information while the game runs"); - RNA_def_property_update(prop, NC_SCENE, NULL); prop= RNA_def_property(srna, "show_physics_visualization", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_SHOW_PHYSICS); RNA_def_property_ui_text(prop, "Show Physics Visualization", "Show a visualization of physics bounds and interactions"); - RNA_def_property_update(prop, NC_SCENE, NULL); - prop= RNA_def_property(srna, "display_lists", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "use_frame_rate", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_ENABLE_ALL_FRAMES); + RNA_def_property_ui_text(prop, "Use Frame Rate", "Respect the frame rate rather then rendering as many frames as possible"); + + prop= RNA_def_property(srna, "use_display_lists", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_DISPLAY_LISTS); RNA_def_property_ui_text(prop, "Display Lists", "Use display lists to speed up rendering by keeping geometry on the GPU"); - RNA_def_property_update(prop, NC_SCENE, NULL); - prop= RNA_def_property(srna, "deprecation_warnings", PROP_BOOLEAN, PROP_NONE); + prop= RNA_def_property(srna, "use_deprecation_warnings", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_IGNORE_DEPRECATION_WARNINGS); RNA_def_property_ui_text(prop, "Deprecation Warnings", "Print warnings when using deprecated features in the python API"); - RNA_def_property_update(prop, NC_SCENE, NULL); + + prop= RNA_def_property(srna, "use_animation_record", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_ENABLE_ANIMATION_RECORD); + RNA_def_property_ui_text(prop, "Record Animation", "Record animation to fcurves"); /* materials */ prop= RNA_def_property(srna, "material_mode", PROP_ENUM, PROP_NONE); diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 29c262d5815..e9290b69265 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -1639,47 +1639,81 @@ static PyObject *pyrna_struct_values(BPy_PropertyRNA *self) return BPy_Wrap_GetValues(self->ptr.id.data, group); } -static PyObject *pyrna_struct_keyframe_insert(BPy_StructRNA *self, PyObject *args) +/* internal use for insert and delete */ +int pyrna_struct_keyframe_parse(PointerRNA *ptr, PyObject *args, char *error_prefix, + char **path_full, int *index, float *cfra) /* return values */ { - char *path, *path_full; - int index= -1; /* default to all */ - float cfra = CTX_data_scene(BPy_GetContext())->r.cfra; + char *path; PropertyRNA *prop; - PyObject *result; - if (!PyArg_ParseTuple(args, "s|if:keyframe_insert", &path, &index, &cfra)) - return NULL; + if (!PyArg_ParseTuple(args, "s|if", &path, &index, &cfra)) { + PyErr_Format(PyExc_TypeError, "%.200s: expected a string and optionally an int and float arguments", error_prefix); + return -1; + } - if (self->ptr.data==NULL) { - PyErr_Format( PyExc_TypeError, "keyframe_insert, this struct has no data, cant be animated", path); - return NULL; + if (ptr->data==NULL) { + PyErr_Format(PyExc_TypeError, "%.200s: this struct has no data, can't be animated", error_prefix); + return -1; } - prop = RNA_struct_find_property(&self->ptr, path); + prop = RNA_struct_find_property(ptr, path); if (prop==NULL) { - PyErr_Format( PyExc_TypeError, "keyframe_insert, property \"%s\" not found", path); - return NULL; + PyErr_Format( PyExc_TypeError, "%.200s: property \"%s\" not found", error_prefix, path); + return -1; } - if (!RNA_property_animateable(&self->ptr, prop)) { - PyErr_Format( PyExc_TypeError, "keyframe_insert, property \"%s\" not animatable", path); - return NULL; + if (!RNA_property_animateable(ptr, prop)) { + PyErr_Format( PyExc_TypeError, "%.200s: property \"%s\" not animatable", error_prefix, path); + return -1; } - path_full= RNA_path_from_ID_to_property(&self->ptr, prop); + *path_full= RNA_path_from_ID_to_property(ptr, prop); - if (path_full==NULL) { - PyErr_Format( PyExc_TypeError, "keyframe_insert, could not make path to \"%s\"", path); - return NULL; + if (*path_full==NULL) { + PyErr_Format( PyExc_TypeError, "%.200s: could not make path to \"%s\"", error_prefix, path); + return -1; } - result= PyBool_FromLong( insert_keyframe((ID *)self->ptr.id.data, NULL, NULL, path_full, index, cfra, 0)); + if(*cfra==FLT_MAX) + *cfra= CTX_data_scene(BPy_GetContext())->r.cfra; + + return 0; /* success */ +} + +static PyObject *pyrna_struct_keyframe_insert(BPy_StructRNA *self, PyObject *args) +{ + PyObject *result; + /* args, pyrna_struct_keyframe_parse handles these */ + char *path_full= NULL; + int index= -1; + float cfra= FLT_MAX; + + if(pyrna_struct_keyframe_parse(&self->ptr, args, "keyframe_insert", &path_full, &index, &cfra) == -1) + return NULL; + + result= PyBool_FromLong(insert_keyframe((ID *)self->ptr.id.data, NULL, NULL, path_full, index, cfra, 0)); MEM_freeN(path_full); return result; } +static PyObject *pyrna_struct_keyframe_delete(BPy_StructRNA *self, PyObject *args) +{ + PyObject *result; + /* args, pyrna_struct_keyframe_parse handles these */ + char *path_full= NULL; + int index= -1; + float cfra= FLT_MAX; + + if(pyrna_struct_keyframe_parse(&self->ptr, args, "keyframe_delete", &path_full, &index, &cfra) == -1) + return NULL; + + result= PyBool_FromLong(delete_keyframe((ID *)self->ptr.id.data, NULL, NULL, path_full, index, cfra, 0)); + MEM_freeN(path_full); + + return result; +} static PyObject *pyrna_struct_driver_add(BPy_StructRNA *self, PyObject *args) { @@ -2659,6 +2693,7 @@ static struct PyMethodDef pyrna_struct_methods[] = { /* maybe this become and ID function */ {"keyframe_insert", (PyCFunction)pyrna_struct_keyframe_insert, METH_VARARGS, NULL}, +// {"keyframe_delete", (PyCFunction)pyrna_struct_keyframe_delete, METH_VARARGS, NULL}, // WIP {"driver_add", (PyCFunction)pyrna_struct_driver_add, METH_VARARGS, NULL}, {"is_property_set", (PyCFunction)pyrna_struct_is_property_set, METH_VARARGS, NULL}, {"is_property_hidden", (PyCFunction)pyrna_struct_is_property_hidden, METH_VARARGS, NULL}, diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 92780d1b973..b72bc02aca6 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -28,6 +28,7 @@ #include <stdlib.h> #include <string.h> +#include <math.h> #include "DNA_listBase.h" #include "DNA_screen_types.h" diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index 9c8ccfe7380..8f626ea66a5 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -266,6 +266,7 @@ void WM_operator_bl_idname(char *to, const char *from){} void WM_operator_py_idname(char *to, const char *from){} void WM_operator_ui_popup(struct bContext *C, struct wmOperator *op, int width, int height){} short insert_keyframe (struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag){return 0;} +short delete_keyframe(struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag){return 0;}; char *WM_operator_pystring(struct bContext *C, struct wmOperatorType *ot, struct PointerRNA *opptr, int all_args){return NULL;} struct wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, int type, int val, int modifier, int keymodifier, int value){return NULL;} struct wmKeyMap *WM_modalkeymap_add(struct wmKeyConfig *keyconf, char *idname, EnumPropertyItem *items){return NULL;} @@ -301,7 +302,7 @@ void smoke_get_index(void) {return;} void smoke_step(void) {return;} */ -char blender_path(){return (char) NULL;} +char blender_path[] = ""; /* CSG */ struct CSG_BooleanOperation * CSG_NewBooleanFunction( void ){return (struct CSG_BooleanOperation *) NULL;} diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index d06fc283613..c655a2538e8 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -168,7 +168,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c bool usefixed = (SYS_GetCommandLineInt(syshandle, "fixedtime", 0) != 0); bool profile = (SYS_GetCommandLineInt(syshandle, "show_profile", 0) != 0); bool frameRate = (SYS_GetCommandLineInt(syshandle, "show_framerate", 0) != 0); - bool game2ipo = (SYS_GetCommandLineInt(syshandle, "game2ipo", 0) != 0); + bool animation_record = (SYS_GetCommandLineInt(syshandle, "animation_record", 0) != 0); bool displaylists = (SYS_GetCommandLineInt(syshandle, "displaylists", 0) != 0); bool nodepwarnings = (SYS_GetCommandLineInt(syshandle, "ignore_deprecation_warnings", 0) != 0); bool novertexarrays = (SYS_GetCommandLineInt(syshandle, "novertexarrays", 0) != 0); @@ -322,7 +322,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c if (blscene) { int startFrame = blscene->r.cfra; - ketsjiengine->SetGame2IpoMode(game2ipo,startFrame); + ketsjiengine->SetAnimRecordMode(animation_record, startFrame); // Quad buffered needs a special window. if(blscene->gm.stereoflag == STEREO_ENABLED){ @@ -409,7 +409,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c // Set the animation playback rate for ipo's and actions // the framerate below should patch with FPS macro defined in blendef.h // Could be in StartEngine set the framerate, we need the scene to do this - ketsjiengine->SetAnimFrameRate( (((double) blscene->r.frs_sec) / blscene->r.frs_sec_base) ); + ketsjiengine->SetAnimFrameRate(FPS); // the mainloop printf("\nBlender Game Engine Started\n\n"); @@ -567,224 +567,3 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c #endif } - -extern "C" void StartKetsjiShellSimulation(struct wmWindow *win, - struct ARegion *ar, - char* scenename, - struct Main* maggie, - int always_use_expand_framing) -{ - int exitrequested = KX_EXIT_REQUEST_NO_REQUEST; - - Main* blenderdata = maggie; - - RAS_Rect area_rect; - area_rect.SetLeft(ar->winrct.xmin); - area_rect.SetBottom(ar->winrct.ymin); - area_rect.SetRight(ar->winrct.xmax); - area_rect.SetTop(ar->winrct.ymax); - - char* startscenename = scenename; - char pathname[FILE_MAXDIR+FILE_MAXFILE]; - STR_String exitstring = ""; - - BLI_strncpy(pathname, blenderdata->name, sizeof(pathname)); - -#ifndef DISABLE_PYTHON - // Acquire Python's GIL (global interpreter lock) - // so we can safely run Python code and API calls - PyGILState_STATE gilstate = PyGILState_Ensure(); - PyObject *pyGlobalDict = PyDict_New(); /* python utility storage, spans blend file loading */ -#endif - - bgl::InitExtensions(true); - - do - { - - // get some preferences - SYS_SystemHandle syshandle = SYS_GetSystem(); - /* - bool properties = (SYS_GetCommandLineInt(syshandle, "show_properties", 0) != 0); - bool usefixed = (SYS_GetCommandLineInt(syshandle, "fixedtime", 0) != 0); - bool profile = (SYS_GetCommandLineInt(syshandle, "show_profile", 0) != 0); - bool frameRate = (SYS_GetCommandLineInt(syshandle, "show_framerate", 0) != 0); - */ - bool game2ipo = true;//(SYS_GetCommandLineInt(syshandle, "game2ipo", 0) != 0); - bool displaylists = (SYS_GetCommandLineInt(syshandle, "displaylists", 0) != 0); - bool usemat = false; - - // create the canvas, rasterizer and rendertools - RAS_ICanvas* canvas = new KX_BlenderCanvas(win, area_rect); - //canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE); - RAS_IRenderTools* rendertools = new KX_BlenderRenderTools(); - RAS_IRasterizer* rasterizer = NULL; - - if(displaylists) { - if (GLEW_VERSION_1_1) - rasterizer = new RAS_ListRasterizer(canvas, true, true); - else - rasterizer = new RAS_ListRasterizer(canvas); - } - else if (GLEW_VERSION_1_1) - rasterizer = new RAS_VAOpenGLRasterizer(canvas, false); - else - rasterizer = new RAS_OpenGLRasterizer(canvas); - - // create the inputdevices - KX_BlenderKeyboardDevice* keyboarddevice = new KX_BlenderKeyboardDevice(); - KX_BlenderMouseDevice* mousedevice = new KX_BlenderMouseDevice(); - - // create a networkdevice - NG_NetworkDeviceInterface* networkdevice = new - NG_LoopBackNetworkDeviceInterface(); - - // create a ketsji/blendersystem (only needed for timing and stuff) - KX_BlenderSystem* kxsystem = new KX_BlenderSystem(); - - // create the ketsjiengine - KX_KetsjiEngine* ketsjiengine = new KX_KetsjiEngine(kxsystem); - - Scene *blscene = NULL; - - blscene = (Scene*) maggie->scene.first; - for (Scene *sce= (Scene*) maggie->scene.first; sce; sce= (Scene*) sce->id.next) - { - if (startscenename == (sce->id.name+2)) - { - blscene = sce; - break; - } - } - - int cframe = 1, startFrame; - if (blscene) - { - cframe=blscene->r.cfra; - startFrame = blscene->r.sfra; - blscene->r.cfra=startFrame; - // update_for_newframe(); // XXX scene_update_for_newframe wont cut it! - ketsjiengine->SetGame2IpoMode(game2ipo,startFrame); - } - - // Quad buffered needs a special window. - if(blscene->gm.stereoflag == STEREO_ENABLED){ - if (blscene->gm.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED) - rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->gm.stereomode); - } - rasterizer->SetBackColor(blscene->gm.framing.col[0], blscene->gm.framing.col[1], blscene->gm.framing.col[2], 0.0f); - - if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME) - { - // create a scene converter, create and convert the startingscene - KX_ISceneConverter* sceneconverter = new KX_BlenderSceneConverter(maggie, ketsjiengine); - ketsjiengine->SetSceneConverter(sceneconverter); - sceneconverter->addInitFromFrame=true; - - if (always_use_expand_framing) - sceneconverter->SetAlwaysUseExpandFraming(true); - - if(usemat) - sceneconverter->SetMaterials(true); - - KX_Scene* startscene = new KX_Scene(keyboarddevice, - mousedevice, - networkdevice, - startscenename, - blscene); - -#ifndef DISABLE_PYTHON - // some python things - PyObject *gameLogic, *gameLogic_keys; - setupGamePython(ketsjiengine, startscene, blenderdata, pyGlobalDict, &gameLogic, &gameLogic_keys, 0, NULL); -#endif // DISABLE_PYTHON - - if (sceneconverter) - { - // convert and add scene - sceneconverter->ConvertScene( - startscene, - rendertools, - canvas); - ketsjiengine->AddScene(startscene); - - // start the engine - ketsjiengine->StartEngine(false); - - ketsjiengine->SetUseFixedTime(true); - - ketsjiengine->SetTicRate( - (double) blscene->r.frs_sec / - (double) blscene->r.frs_sec_base); - - // the mainloop - while ((blscene->r.cfra<=blscene->r.efra)&&(!exitrequested)) - { - printf("frame %i\n",blscene->r.cfra); - // first check if we want to exit - exitrequested = ketsjiengine->GetExitCode(); - - // kick the engine - ketsjiengine->NextFrame(); - blscene->r.cfra=blscene->r.cfra+1; - // update_for_newframe(); // XXX scene_update_for_newframe wont cut it - - } - exitstring = ketsjiengine->GetExitString(); - } - if (sceneconverter) - { - delete sceneconverter; - sceneconverter = NULL; - } - } - blscene->r.cfra=cframe; - // set the cursor back to normal - canvas->SetMouseState(RAS_ICanvas::MOUSE_NORMAL); - - // clean up some stuff - if (ketsjiengine) - { - delete ketsjiengine; - ketsjiengine = NULL; - } - if (kxsystem) - { - delete kxsystem; - kxsystem = NULL; - } - if (networkdevice) - { - delete networkdevice; - networkdevice = NULL; - } - if (keyboarddevice) - { - delete keyboarddevice; - keyboarddevice = NULL; - } - if (mousedevice) - { - delete mousedevice; - mousedevice = NULL; - } - if (rasterizer) - { - delete rasterizer; - rasterizer = NULL; - } - if (rendertools) - { - delete rendertools; - rendertools = NULL; - } - - } while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME); - -#ifndef DISABLE_PYTHON - Py_DECREF(pyGlobalDict); - - // Release Python's GIL - PyGILState_Release(gilstate); -#endif -} diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index 411ddc58c92..3ee4248343c 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -82,13 +82,16 @@ extern "C" #include "MEM_guardedalloc.h" //XXX #include "BSE_editipo.h" //XXX #include "BSE_editipo_types.h" -#include "DNA_ipo_types.h" +// #include "DNA_ipo_types.h" #include "BKE_global.h" +#include "BKE_animsys.h" #include "BKE_library.h" #include "BKE_ipo.h" // eval_icu #include "BKE_material.h" // copy_material #include "BKE_mesh.h" // copy_mesh #include "DNA_space_types.h" +#include "DNA_anim_types.h" +#include "../../blender/editors/include/ED_keyframing.h" } /* Only for dynamic loading and merging */ @@ -621,57 +624,12 @@ void KX_BlenderSceneConverter::RegisterWorldInfo( m_worldinfos.push_back(pair<KX_Scene*,KX_WorldInfo*>(m_currentScene,worldinfo)); } -/* - * When deleting an IPO curve from Python, check if the IPO is being - * edited and if so clear the pointer to the old curve. - */ -void KX_BlenderSceneConverter::localDel_ipoCurve ( IpoCurve * icu ) -{ -#if 0 //XXX - if (!G.sipo) - return; - - int i; - EditIpo *ei= (EditIpo *)G.sipo->editipo; - if (!ei) return; - - for(i=0; i<G.sipo->totipo; i++, ei++) { - if ( ei->icu == icu ) { - ei->flag &= ~(IPO_SELECT | IPO_EDIT); - ei->icu= 0; - return; - } - } -#endif -} - //quick hack extern "C" { - Ipo *add_ipo( char *name, int idcode ); - //XXX char *getIpoCurveName( IpoCurve * icu ); - //XXX struct IpoCurve *verify_ipocurve(struct ID *, short, char *, char *, char *, int); - //XXX void testhandles_ipocurve(struct IpoCurve *icu); - void insert_vert_icu(struct IpoCurve *, float, float, short); - float eval_icu(struct IpoCurve *icu, float ipotime); - //void mat3_to_eul( float *eul,float tmat[][3]); void mat3_to_compatible_eul( float *eul, float *oldrot,float mat[][3]); } -IpoCurve* findIpoCurve(IpoCurve* first, const char* searchName) -{ - IpoCurve* icu1; - for( icu1 = first; icu1; icu1 = icu1->next ) - { - /*XXX char* curveName = getIpoCurveName( icu1 ); - if( !strcmp( curveName, searchName) ) - { - return icu1; - }*/ - } - return 0; -} - void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo) { @@ -695,6 +653,7 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo) Object* blenderObject = gameObj->GetBlenderObject(); if (blenderObject) { +#if 0 //erase existing ipo's Ipo* ipo = blenderObject->ipo;//findIpoForName(blenderObject->id.name+2); if (ipo) @@ -728,11 +687,7 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo) blenderObject->ipo = ipo; } - - - - - +#endif } } @@ -811,8 +766,28 @@ void KX_BlenderSceneConverter::WritePhysicsObjectToAnimationIpo(int frameNumber) //KX_IPhysicsController* physCtrl = gameObj->GetPhysicsController(); Object* blenderObject = gameObj->GetBlenderObject(); - if (blenderObject && blenderObject->ipo) + + if(blenderObject->adt==NULL) + BKE_id_add_animdata(&blenderObject->id); + + if (blenderObject && blenderObject->adt) { + const MT_Point3& position = gameObj->NodeGetWorldPosition(); + //const MT_Vector3& scale = gameObj->NodeGetWorldScaling(); + const MT_Matrix3x3& orn = gameObj->NodeGetWorldOrientation(); + + position.getValue(blenderObject->loc); + + float tmat[3][3]; + for (int r=0;r<3;r++) + for (int c=0;c<3;c++) + tmat[r][c] = orn[c][r]; + + mat3_to_compatible_eul(blenderObject->rot, blenderObject->rot, tmat); + + insert_keyframe(&blenderObject->id, NULL, NULL, "location", -1, frameNumber, INSERTKEY_FAST); + insert_keyframe(&blenderObject->id, NULL, NULL, "rotation_euler", -1, frameNumber, INSERTKEY_FAST); + #if 0 const MT_Point3& position = gameObj->NodeGetWorldPosition(); //const MT_Vector3& scale = gameObj->NodeGetWorldScaling(); diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h index e880c8b824c..3dd3afb5662 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.h +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h @@ -43,7 +43,6 @@ class RAS_MeshObject; class RAS_IPolyMaterial; class BL_InterpolatorList; class BL_Material; -struct IpoCurve; struct Main; struct Scene; @@ -74,9 +73,6 @@ class KX_BlenderSceneConverter : public KX_ISceneConverter bool m_usemat; bool m_useglslmat; - void localDel_ipoCurve ( IpoCurve * icu ); -// struct Ipo* findIpoForName(char* objName); - public: KX_BlenderSceneConverter( Main* maggie, diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp index d39b6fbda17..43b26cf9a06 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp @@ -710,8 +710,8 @@ bool GPG_Application::startEngine(void) // Set the animation playback rate for ipo's and actions // the framerate below should patch with FPS macro defined in blendef.h // Could be in StartEngine set the framerate, we need the scene to do this -// XXX m_ketsjiengine->SetAnimFrameRate( (((double) scene->r.frs_sec) / scene->r.frs_sec_base) ); - + Scene *scene= startscene->GetBlenderScene(); // needed for macro + m_ketsjiengine->SetAnimFrameRate(FPS); } if (!m_engineRunning) diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp index af30d32a0aa..18ae80c78c3 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp @@ -154,7 +154,7 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem* system) m_showBackground(false), m_show_debug_properties(false), - m_game2ipo(false), + m_animation_record(false), // Default behavior is to hide the cursor every frame. m_hideCursor(false), @@ -398,7 +398,7 @@ void KX_KetsjiEngine::StartEngine(bool clearIpo) m_maxPhysicsFrame = 5; } - if (m_game2ipo) + if (m_animation_record) { m_sceneconverter->ResetPhysicsObjectsAnimationIpo(clearIpo); m_sceneconverter->WritePhysicsObjectToAnimationIpo(m_currentFrame); @@ -657,7 +657,7 @@ else scene->UpdateParents(m_frameTime); - if (m_game2ipo) + if (m_animation_record) { m_sceneconverter->WritePhysicsObjectToAnimationIpo(++m_currentFrame); } @@ -1334,7 +1334,7 @@ void KX_KetsjiEngine::StopEngine() if (m_bInitialized) { - if (m_game2ipo) + if (m_animation_record) { // printf("TestHandlesPhysicsObjectToAnimationIpo\n"); m_sceneconverter->TestHandlesPhysicsObjectToAnimationIpo(); @@ -1734,10 +1734,10 @@ void KX_KetsjiEngine::SetUseFixedTime(bool bUseFixedTime) } -void KX_KetsjiEngine::SetGame2IpoMode(bool game2ipo,int startFrame) +void KX_KetsjiEngine::SetAnimRecordMode(bool animation_record, int startFrame) { - m_game2ipo = game2ipo; - if (game2ipo) + m_animation_record = animation_record; + if (animation_record) { //when recording physics keyframes, always run at a fixed framerate m_bFixedTime = true; diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h index 96ca092c8c1..a6ca5fb6519 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.h +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h @@ -170,7 +170,7 @@ private: bool m_show_debug_properties; /** record physics into keyframes */ - bool m_game2ipo; + bool m_animation_record; /** Hide cursor every frame? */ bool m_hideCursor; @@ -208,7 +208,7 @@ public: PyObject* GetPyNamespace(){return m_pythondictionary;}; #endif void SetSceneConverter(KX_ISceneConverter* sceneconverter); - void SetGame2IpoMode(bool game2ipo,int startFrame); + void SetAnimRecordMode(bool animation_record, int startFrame); RAS_IRasterizer* GetRasterizer(){return m_rasterizer;}; RAS_ICanvas* GetCanvas(){return m_canvas;}; |