]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/brushmanip.cpp
Merge commit '146d231d90b19e2a0edcabff1c4eb9ca44e053e7' into master-merge
[xonotic/netradiant.git] / radiant / brushmanip.cpp
index dd22446afa5788035c882e8a91c14a3f728f88d0..549e6e87da1ebf6cddc0d5a0cc927d6dbcccfebe 100644 (file)
@@ -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<BrushMakeSided, &BrushMakeSided::set> SetCaller;
+
+typedef MemberCaller<BrushMakeSided, void(), &BrushMakeSided::set> SetCaller;
 };
 
 
@@ -1163,10 +1187,12 @@ public:
 BrushPrefab( EBrushPrefab type )
        : m_type( type ){
 }
+
 void set(){
        DoSides( m_type, axis_for_viewtype( GetViewAxis() ) );
 }
-typedef MemberCaller<BrushPrefab, &BrushPrefab::set> SetCaller;
+
+typedef MemberCaller<BrushPrefab, void(), &BrushPrefab::set> 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<void()> g_texture_lock_status_changed;
+ConstReferenceCaller<bool, void(const Callback<void(bool)> &), PropertyImpl<bool>::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<Texdef_ToggleMoveLock>(), 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<ClipSelected>(), Accelerator( GDK_KEY_Return ) );
-       GlobalCommands_insert( "SplitSelected", FreeCaller<SplitSelected>(), Accelerator( GDK_KEY_Return, (GdkModifierType)GDK_SHIFT_MASK ) );
-       GlobalCommands_insert( "FlipClip", FreeCaller<FlipClipper>(), 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<Select_MakeDetail>(), Accelerator( 'M', (GdkModifierType)GDK_CONTROL_MASK ) );
-       GlobalCommands_insert( "MakeStructural", FreeCaller<Select_MakeStructural>(), 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 );