X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fbrushmanip.cpp;h=549e6e87da1ebf6cddc0d5a0cc927d6dbcccfebe;hb=0908af4bcf48cb2ee8da1dbb4480bcea821c3f60;hp=dd22446afa5788035c882e8a91c14a3f728f88d0;hpb=074614f03092ddf3ddaae4d945f4570a4435130d;p=xonotic%2Fnetradiant.git diff --git a/radiant/brushmanip.cpp b/radiant/brushmanip.cpp index dd22446a..549e6e87 100644 --- a/radiant/brushmanip.cpp +++ b/radiant/brushmanip.cpp @@ -570,6 +570,7 @@ void Scene_BrushFitTexture_Component_Selected( scene::Graph& graph, float s_repe } TextureProjection g_defaultTextureProjection; + const TextureProjection& TextureTransform_getDefault(){ TexDef_Construct_Default( g_defaultTextureProjection ); return g_defaultTextureProjection; @@ -617,6 +618,7 @@ public: BrushSelectByShaderWalker( const char* name ) : m_name( name ){ } + bool pre( const scene::Path& path, scene::Instance& instance ) const { if ( path.top().get().visible() ) { Brush* brush = Node_getBrush( path.top() ); @@ -624,6 +626,9 @@ bool pre( const scene::Path& path, scene::Instance& instance ) const { Instance_getSelectable( instance )->setSelected( true ); } } + else{ + return false; + } return true; } }; @@ -636,8 +641,8 @@ void Scene_BrushSelectByShader_Component( scene::Graph& graph, const char* name Scene_ForEachSelectedBrush_ForEachFaceInstance(graph, [&](FaceInstance &face) { printf("checking %s = %s\n", face.getFace().GetShader(), name); if (shader_equal(face.getFace().GetShader(), name)) { - face.setSelected(SelectionSystem::eFace, true); - } + face.setSelected( SelectionSystem::eFace, true ); + } }); } @@ -647,7 +652,7 @@ void Scene_BrushGetTexdef_Selected( scene::Graph& graph, TextureProjection& proj if (!done) { done = true; face.GetTexdef(projection); - } +} }); } @@ -741,6 +746,7 @@ const char* m_shader; public: filter_face_shader( const char* shader ) : m_shader( shader ){ } + bool filter( const Face& face ) const { return shader_equal( face.GetShader(), m_shader ); } @@ -752,6 +758,7 @@ const char* m_prefix; public: filter_face_shader_prefix( const char* prefix ) : m_prefix( prefix ){ } + bool filter( const Face& face ) const { return shader_equal_n( face.GetShader(), m_prefix, strlen( m_prefix ) ); } @@ -763,6 +770,7 @@ int m_flags; public: filter_face_flags( int flags ) : m_flags( flags ){ } + bool filter( const Face& face ) const { return ( face.getShader().shaderFlags() & m_flags ) != 0; } @@ -774,6 +782,7 @@ int m_contents; public: filter_face_contents( int contents ) : m_contents( contents ){ } + bool filter( const Face& face ) const { return ( face.getShader().m_flags.m_contentFlags & m_contents ) != 0; } @@ -787,6 +796,7 @@ FaceFilter* m_filter; public: filter_brush_any_face( FaceFilter* filter ) : m_filter( filter ){ } + bool filter( const Brush& brush ) const { bool filtered = false; Brush_forEachFace(brush, [&](Face &face) { @@ -840,20 +850,29 @@ filter_brush_all_faces g_filter_brush_caulk( &g_filter_face_caulk ); filter_face_shader_prefix g_filter_face_caulk_ja( "textures/system/caulk" ); filter_brush_all_faces g_filter_brush_caulk_ja( &g_filter_face_caulk_ja ); -filter_face_shader_prefix g_filter_face_liquids( "textures/liquids/" ); +filter_face_flags g_filter_face_liquids( QER_LIQUID ); filter_brush_any_face g_filter_brush_liquids( &g_filter_face_liquids ); +filter_face_shader_prefix g_filter_face_liquidsdir( "textures/liquids/" ); +filter_brush_any_face g_filter_brush_liquidsdir( &g_filter_face_liquidsdir ); + filter_face_shader g_filter_face_hint( "textures/common/hint" ); filter_brush_any_face g_filter_brush_hint( &g_filter_face_hint ); +filter_face_shader g_filter_face_hintlocal( "textures/common/hintlocal" ); +filter_brush_any_face g_filter_brush_hintlocal( &g_filter_face_hintlocal ); + filter_face_shader g_filter_face_hint_q2( "textures/hint" ); filter_brush_any_face g_filter_brush_hint_q2( &g_filter_face_hint_q2 ); filter_face_shader g_filter_face_hint_ja( "textures/system/hint" ); filter_brush_any_face g_filter_brush_hint_ja( &g_filter_face_hint_ja ); +filter_face_shader g_filter_face_subtlehint( "textures/common/subtlehint" ); +filter_brush_any_face g_filter_brush_subtlehint( &g_filter_face_subtlehint ); + filter_face_shader g_filter_face_areaportal( "textures/common/areaportal" ); -filter_brush_all_faces g_filter_brush_areaportal( &g_filter_face_areaportal ); +filter_brush_any_face g_filter_brush_areaportal( &g_filter_face_areaportal ); filter_face_shader g_filter_face_visportal( "textures/editor/visportal" ); filter_brush_any_face g_filter_brush_visportal( &g_filter_face_visportal ); @@ -864,8 +883,8 @@ filter_brush_all_faces g_filter_brush_clusterportal( &g_filter_face_clusterporta filter_face_shader g_filter_face_lightgrid( "textures/common/lightgrid" ); filter_brush_all_faces g_filter_brush_lightgrid( &g_filter_face_lightgrid ); -filter_face_flags g_filter_face_translucent( QER_TRANS ); -filter_brush_all_faces g_filter_brush_translucent( &g_filter_face_translucent ); +filter_face_flags g_filter_face_translucent( QER_TRANS | QER_ALPHATEST ); +filter_brush_any_face g_filter_brush_translucent( &g_filter_face_translucent ); filter_face_contents g_filter_face_detail( BRUSH_DETAIL_MASK ); filter_brush_all_faces g_filter_brush_detail( &g_filter_face_detail ); @@ -886,9 +905,12 @@ void BrushFilters_construct(){ add_face_filter( g_filter_face_caulk, EXCLUDE_CAULK ); add_face_filter( g_filter_face_caulk_ja, EXCLUDE_CAULK ); add_brush_filter( g_filter_brush_liquids, EXCLUDE_LIQUIDS ); + add_brush_filter( g_filter_brush_liquidsdir, EXCLUDE_LIQUIDS ); add_brush_filter( g_filter_brush_hint, EXCLUDE_HINTSSKIPS ); + add_brush_filter( g_filter_brush_hintlocal, EXCLUDE_HINTSSKIPS ); add_brush_filter( g_filter_brush_hint_q2, EXCLUDE_HINTSSKIPS ); add_brush_filter( g_filter_brush_hint_ja, EXCLUDE_HINTSSKIPS ); + add_brush_filter( g_filter_brush_subtlehint, EXCLUDE_HINTSSKIPS ); add_brush_filter( g_filter_brush_clusterportal, EXCLUDE_CLUSTERPORTALS ); add_brush_filter( g_filter_brush_visportal, EXCLUDE_VISPORTALS ); add_brush_filter( g_filter_brush_areaportal, EXCLUDE_AREAPORTALS ); @@ -1128,10 +1150,12 @@ public: BrushMakeSided( std::size_t count ) : m_count( count ){ } + void set(){ Scene_BrushConstructPrefab( GlobalSceneGraph(), eBrushPrism, m_count, TextureBrowser_GetSelectedShader( GlobalTextureBrowser() ) ); } -typedef MemberCaller SetCaller; + +typedef MemberCaller SetCaller; }; @@ -1163,10 +1187,12 @@ public: BrushPrefab( EBrushPrefab type ) : m_type( type ){ } + void set(){ DoSides( m_type, axis_for_viewtype( GetViewAxis() ) ); } -typedef MemberCaller SetCaller; + +typedef MemberCaller SetCaller; }; BrushPrefab g_brushprism( eBrushPrism ); @@ -1176,9 +1202,13 @@ BrushPrefab g_brushrock( eBrushRock ); void FlipClip(); + void SplitClip(); + void Clip(); + void OnClipMode( bool enable ); + bool ClipMode(); @@ -1201,8 +1231,8 @@ void FlipClipper(){ } -Callback g_texture_lock_status_changed; -BoolExportCaller g_texdef_movelock_caller( g_brush_texturelock_enabled ); +Callback g_texture_lock_status_changed; +ConstReferenceCaller &), PropertyImpl::Export> g_texdef_movelock_caller( g_brush_texturelock_enabled ); ToggleItem g_texdef_movelock_item( g_texdef_movelock_caller ); void Texdef_ToggleMoveLock(){ @@ -1212,11 +1242,8 @@ void Texdef_ToggleMoveLock(){ } - - - void Brush_registerCommands(){ - GlobalToggles_insert( "TogTexLock", FreeCaller(), ToggleItem::AddCallbackCaller( g_texdef_movelock_item ), Accelerator( 'T', (GdkModifierType)GDK_SHIFT_MASK ) ); + GlobalToggles_insert( "TogTexLock", makeCallbackF(Texdef_ToggleMoveLock), ToggleItem::AddCallbackCaller( g_texdef_movelock_item ), Accelerator( 'T', (GdkModifierType)GDK_SHIFT_MASK ) ); GlobalCommands_insert( "BrushPrism", BrushPrefab::SetCaller( g_brushprism ) ); GlobalCommands_insert( "BrushCone", BrushPrefab::SetCaller( g_brushcone ) ); @@ -1231,12 +1258,12 @@ void Brush_registerCommands(){ GlobalCommands_insert( "Brush8Sided", BrushMakeSided::SetCaller( g_brushmakesided8 ), Accelerator( '8', (GdkModifierType)GDK_CONTROL_MASK ) ); GlobalCommands_insert( "Brush9Sided", BrushMakeSided::SetCaller( g_brushmakesided9 ), Accelerator( '9', (GdkModifierType)GDK_CONTROL_MASK ) ); - GlobalCommands_insert( "ClipSelected", FreeCaller(), Accelerator( GDK_KEY_Return ) ); - GlobalCommands_insert( "SplitSelected", FreeCaller(), Accelerator( GDK_KEY_Return, (GdkModifierType)GDK_SHIFT_MASK ) ); - GlobalCommands_insert( "FlipClip", FreeCaller(), Accelerator( GDK_KEY_Return, (GdkModifierType)GDK_CONTROL_MASK ) ); + GlobalCommands_insert( "ClipSelected", makeCallbackF(ClipSelected), Accelerator( GDK_KEY_Return ) ); + GlobalCommands_insert( "SplitSelected", makeCallbackF(SplitSelected), Accelerator( GDK_KEY_Return, (GdkModifierType)GDK_SHIFT_MASK ) ); + GlobalCommands_insert( "FlipClip", makeCallbackF(FlipClipper), Accelerator( GDK_KEY_Return, (GdkModifierType)GDK_CONTROL_MASK ) ); - GlobalCommands_insert( "MakeDetail", FreeCaller(), Accelerator( 'M', (GdkModifierType)GDK_CONTROL_MASK ) ); - GlobalCommands_insert( "MakeStructural", FreeCaller(), Accelerator( 'S', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) ); + GlobalCommands_insert( "MakeDetail", makeCallbackF(Select_MakeDetail), Accelerator( 'M', (GdkModifierType)GDK_CONTROL_MASK ) ); + GlobalCommands_insert( "MakeStructural", makeCallbackF(Select_MakeStructural), Accelerator( 'S', (GdkModifierType)( GDK_SHIFT_MASK | GDK_CONTROL_MASK ) ) ); } void Brush_constructMenu( ui::Menu menu ){ @@ -1250,9 +1277,10 @@ void Brush_constructMenu( ui::Menu menu ){ if ( g_Layout_enableDetachableMenus.m_value ) { menu_tearoff( menu_in_menu ); } - create_menu_item_with_mnemonic( menu_in_menu, "Make _Hollow", "CSGHollow" ); create_menu_item_with_mnemonic( menu_in_menu, "CSG _Subtract", "CSGSubtract" ); create_menu_item_with_mnemonic( menu_in_menu, "CSG _Merge", "CSGMerge" ); + create_menu_item_with_mnemonic( menu_in_menu, "Make _Room", "CSGRoom" ); + create_menu_item_with_mnemonic( menu_in_menu, "CSG _Tool", "CSGTool" ); } menu_separator( menu ); { @@ -1268,7 +1296,7 @@ void Brush_constructMenu( ui::Menu menu ){ menu_separator( menu ); create_menu_item_with_mnemonic( menu, "Make detail", "MakeDetail" ); create_menu_item_with_mnemonic( menu, "Make structural", "MakeStructural" ); - create_menu_item_with_mnemonic( menu, "Snap selection to _grid", "SnapToGrid" ); +// create_menu_item_with_mnemonic( menu, "Snap selection to _grid", "SnapToGrid" ); create_check_menu_item_with_mnemonic( menu, "Texture Lock", "TogTexLock" ); menu_separator( menu );