diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-06-13 21:25:54 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-06-13 21:25:54 +0400 |
commit | 611e2f484c1d3c1c07abbe289a23623e714c700f (patch) | |
tree | 3ff7159023ff556bbfc0803c9e0c4407a67a35b8 /source/blender | |
parent | 3a9396c47dcc1083baf5bcbb93556f65b84ba5a0 (diff) |
GameEngine WIP,
* pressing P starts the BGE in the 3D view
* redraw window clipping isnt right
* BGE python api works in py3k (without __import__ override or Mathutils, BGL, Geometry)
* no events yet (so there is no way to exit)
Diffstat (limited to 'source/blender')
4 files changed, 79 insertions, 1 deletions
diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript index b771095c781..7d51d237ef0 100644 --- a/source/blender/editors/space_view3d/SConscript +++ b/source/blender/editors/space_view3d/SConscript @@ -2,10 +2,14 @@ Import ('env') sources = env.Glob('*.c') +defs = [] incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' incs += ' ../../render/extern/include #/intern/guardedalloc' incs += ' ../../gpu ../../makesrna ../../blenfont' -env.BlenderLib ( 'bf_editors_space_view3d', sources, Split(incs), [], libtype=['core'], priority=[40] ) +if env['WITH_BF_GAMEENGINE']: + defs.append('GAMEBLENDER=1') + +env.BlenderLib ( 'bf_editors_space_view3d', sources, Split(incs), defines = defs, libtype=['core'], priority=[40] ) diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index ab705cb32fb..6dbd99c67be 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -120,6 +120,8 @@ void VIEW3D_OT_select_lasso(struct wmOperatorType *ot); void VIEW3D_OT_smoothview(struct wmOperatorType *ot); void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot); void VIEW3D_OT_localview(struct wmOperatorType *ot); +void VIEW3D_OT_game_start(struct wmOperatorType *ot); + int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 0ed43bead17..6cb1051ce4a 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -85,6 +85,7 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_drawtype); WM_operatortype_append(VIEW3D_OT_editmesh_face_toolbox); WM_operatortype_append(VIEW3D_OT_localview); + WM_operatortype_append(VIEW3D_OT_game_start); WM_operatortype_append(VIEW3D_OT_layers); WM_operatortype_append(VIEW3D_OT_properties); @@ -173,6 +174,8 @@ void view3d_keymap(wmWindowManager *wm) WM_keymap_add_item(keymap, "VIEW3D_OT_localview", PADSLASHKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "VIEW3D_OT_game_start", PKEY, KM_PRESS, 0, 0); + /* layers, shift + alt are properties set in invoke() */ RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", ONEKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 1); RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", TWOKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 2); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index e1a6f32aa41..eaa23061322 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1382,6 +1382,75 @@ void VIEW3D_OT_localview(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; } + +static void SaveState(void) +{ + glPushAttrib(GL_ALL_ATTRIB_BITS); + + GPU_state_init(); + + if(G.f & G_TEXTUREPAINT) + GPU_paint_set_mipmap(1); + + //XXX waitcursor(1); +} + +static void RestoreState(void) +{ + if(G.f & G_TEXTUREPAINT) + GPU_paint_set_mipmap(0); + + //XXX curarea->win_swap = 0; + //XXX curarea->head_swap=0; + //XXX allqueue(REDRAWVIEW3D, 1); + //XXX allqueue(REDRAWBUTSALL, 0); + //XXX reset_slowparents(); + //XXX waitcursor(0); + //XXX G.qual= 0; + glPopAttrib(); +} + +/* maybe we need this defined somewhere else */ +extern void StartKetsjiShell(wmWindow *win, ScrArea *area, struct ARegion *ar, struct Scene *scene, struct Main* maggie,int always_use_expand_framing); + + +static int game_engine_exec(bContext *C, wmOperator *unused) +{ + View3D *v3d= CTX_wm_view3d(C); + ScrArea *sa= CTX_wm_area(C); // curarea + ARegion *ar= CTX_wm_region(C); + Scene *sc, *startscene = CTX_data_scene(C); + +#if GAMEBLENDER == 1 + SaveState(); + StartKetsjiShell(CTX_wm_window(C), sa, ar, startscene, CTX_data_main(C), 1); + RestoreState(); + + //XXX restore_all_scene_cfra(scene_cfra_store); + set_scene_bg(startscene); + //XXX scene_update_for_newframe(G.scene, G.scene->lay); + + ED_area_tag_redraw(CTX_wm_area(C)); +#else + printf("GameEngine Disabled\n"); +#endif + + return OPERATOR_FINISHED; +} + +void VIEW3D_OT_game_start(wmOperatorType *ot) +{ + + /* identifiers */ + ot->name= "Start Game Engine"; + ot->idname= "VIEW3D_OT_game_start"; + + /* api callbacks */ + ot->exec= game_engine_exec; + + ot->poll= ED_operator_view3d_active; +} + /* ************************************** */ void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, float vec[3]) |