From ae694bc0da98e45c5def20ac1d92f9d8aad65fd5 Mon Sep 17 00:00:00 2001 From: Kasullian Date: Wed, 10 Sep 2025 12:08:59 -0400 Subject: 3d view mouse control --- src/editor/view3d.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/editor/view3d.cpp') diff --git a/src/editor/view3d.cpp b/src/editor/view3d.cpp index f9bd60e..61bcc3e 100644 --- a/src/editor/view3d.cpp +++ b/src/editor/view3d.cpp @@ -31,6 +31,16 @@ void gui_editor_3dview_draw_showpos( GUI_EDITOR_3DVIEW* view ) { objl->pl->rot.y, objl->pl->rot.x ); + + if( input.mouse_captured ) { + gui_draw_str( + x + 2, y + 2, + ALIGN_L, + FNT_JPN12, + ui_clr.txt, + "[capturing mouse]" + ); + } } void gui_editor_3dview_draw_fn( void* ptr ) { @@ -60,9 +70,20 @@ void gui_editor_3dview_draw_fn( void* ptr ) { } void gui_editor_3dview_input_fn( void* ptr ) { + GUI_EDITOR_3DVIEW* view = (GUI_EDITOR_3DVIEW*)ptr; + if( !objl->pl ) return; + if( input.mouse.left && !input.mouse_captured ) { + I32 view_x = gui_relx( view ); + I32 view_y = gui_rely( view ) + EDITORVIEW_TITLE_OFFSET; + if( input.mouse.pos.x >= view_x && input.mouse.pos.x < view_x + view->w && + input.mouse.pos.y >= view_y && input.mouse.pos.y < view_y + view->h ) { + input_capture_mouse( true ); + } + } + game_on_tick( editor->game ); } -- cgit v1.2.3 From e3de3ba5162f7ddd5005911124d4333e140fd984 Mon Sep 17 00:00:00 2001 From: navewindre Date: Thu, 27 Nov 2025 17:19:02 +0100 Subject: bunch o stuff --- src/editor/view3d.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/editor/view3d.cpp') diff --git a/src/editor/view3d.cpp b/src/editor/view3d.cpp index 61bcc3e..64cfe85 100644 --- a/src/editor/view3d.cpp +++ b/src/editor/view3d.cpp @@ -32,7 +32,7 @@ void gui_editor_3dview_draw_showpos( GUI_EDITOR_3DVIEW* view ) { objl->pl->rot.x ); - if( input.mouse_captured ) { + if( input.mouselock ) { gui_draw_str( x + 2, y + 2, ALIGN_L, @@ -65,7 +65,7 @@ void gui_editor_3dview_draw_fn( void* ptr ) { bsp_draw( editor->map->bsp, editor->game, wnd, winsize ); else world_draw( editor->game, objl->world, wnd, winsize ); - + gui_editor_3dview_draw_showpos( view ); } @@ -75,14 +75,17 @@ void gui_editor_3dview_input_fn( void* ptr ) { if( !objl->pl ) return; - if( input.mouse.left && !input.mouse_captured ) { + if( input.mouse.left ) { I32 view_x = gui_relx( view ); I32 view_y = gui_rely( view ) + EDITORVIEW_TITLE_OFFSET; if( input.mouse.pos.x >= view_x && input.mouse.pos.x < view_x + view->w && input.mouse.pos.y >= view_y && input.mouse.pos.y < view_y + view->h ) { - input_capture_mouse( true ); + if( !input.mouselock && !view->heldoutbounds ) + input_capture_mouse( true ); + } else { + view->heldoutbounds = 1; } - } + } else view->heldoutbounds = 0; game_on_tick( editor->game ); } -- cgit v1.2.3 From 3e094f20d4dda90e0356aba3f0abc4b7c7015844 Mon Sep 17 00:00:00 2001 From: navewindre Date: Thu, 27 Nov 2025 21:39:59 +0100 Subject: move bsp button --- src/editor/view3d.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'src/editor/view3d.cpp') diff --git a/src/editor/view3d.cpp b/src/editor/view3d.cpp index 64cfe85..f8d1def 100644 --- a/src/editor/view3d.cpp +++ b/src/editor/view3d.cpp @@ -6,6 +6,7 @@ #include "../game.h" const I32 EDITORVIEW_TITLE_OFFSET = 15; +const I32 EDITORVIEW_TOOLBAR_OFFSET = 20; void gui_editor_3dview_draw_showpos( GUI_EDITOR_3DVIEW* view ) { I32 x = gui_relx( view ); @@ -66,11 +67,22 @@ void gui_editor_3dview_draw_fn( void* ptr ) { else world_draw( editor->game, objl->world, wnd, winsize ); + gui_draw_push_clip( x, y, view->w, view->h ); + view->children.each( fn( GUI_BASE** childptr ) { + GUI_BASE* child = *childptr; + if( !child->enabled ) return; + + if( child->draw_fn ) child->draw_fn( child ); + else dlog( "gui_view_draw_fn(): child %p no draw_fn\n", child ); + } ); + gui_draw_pop_clip(); gui_editor_3dview_draw_showpos( view ); } void gui_editor_3dview_input_fn( void* ptr ) { GUI_EDITOR_3DVIEW* view = (GUI_EDITOR_3DVIEW*)ptr; + if( !input.mouselock ) + gui_base_input_fn( view ); if( !objl->pl ) return; @@ -79,7 +91,7 @@ void gui_editor_3dview_input_fn( void* ptr ) { I32 view_x = gui_relx( view ); I32 view_y = gui_rely( view ) + EDITORVIEW_TITLE_OFFSET; if( input.mouse.pos.x >= view_x && input.mouse.pos.x < view_x + view->w && - input.mouse.pos.y >= view_y && input.mouse.pos.y < view_y + view->h ) { + input.mouse.pos.y >= view_y && input.mouse.pos.y < view_y + view->h - EDITORVIEW_TOOLBAR_OFFSET ) { if( !input.mouselock && !view->heldoutbounds ) input_capture_mouse( true ); } else { @@ -90,6 +102,19 @@ void gui_editor_3dview_input_fn( void* ptr ) { game_on_tick( editor->game ); } +void gui_editor_3dview_create_toolbar( GUI_EDITOR_3DVIEW* view ) { + GAME_EDITOR* e = editor; + I32 x = 1, y = view->h - 4; + + gui_button( x, y, 90, 18, "compile bsp", pfn( void* b ) { + if( editor->map->bsp ) + bsp_free( editor->map->bsp ); + editor->map->bsp = bsp_build_map( editor->map ); + } ); x += 100; + + gui_checkbox( x, y, "draw bsp", &e->drawbsp ); +} + GUI_EDITOR_3DVIEW* gui_editor_3dview( I32 x, I32 y, I32 w, I32 h ) { GUI_EDITOR_3DVIEW* view = new GUI_EDITOR_3DVIEW; view->x = x; @@ -108,5 +133,10 @@ GUI_EDITOR_3DVIEW* gui_editor_3dview( I32 x, I32 y, I32 w, I32 h ) { parent->children.push( view ); view->parent = parent; + + gui_set_view( view ); + gui_editor_3dview_create_toolbar( view ); + gui_set_view( (GUI_VIEW*)parent ); + return view; } -- cgit v1.2.3