diff --git a/radiant/mainframe.cpp b/radiant/mainframe.cpp index 87bcd5e2..a79a56cb 100644 --- a/radiant/mainframe.cpp +++ b/radiant/mainframe.cpp @@ -1207,19 +1207,17 @@ void SelectFaceMode(){ class CloneSelected : public scene::Graph::Walker { -bool doMakeUnique; -NodeSmartReference worldspawn; +const bool m_makeUnique; +const scene::Node* m_world; public: -CloneSelected( bool d ) : doMakeUnique( d ), worldspawn( Map_FindOrInsertWorldspawn( g_map ) ){ +CloneSelected( bool makeUnique ) : m_makeUnique( makeUnique ), m_world( Map_FindWorldspawn( g_map ) ){ } bool pre( const scene::Path& path, scene::Instance& instance ) const { if ( path.size() == 1 ) { return true; } - // ignore worldspawn, but keep checking children - NodeSmartReference me( path.top().get() ); - if ( me == worldspawn ) { + if ( path.top().get_pointer() == m_world ) { // ignore worldspawn, but keep checking children return true; } @@ -1229,7 +1227,7 @@ bool pre( const scene::Path& path, scene::Instance& instance ) const { && selectable->isSelected() ) { return false; } - if( doMakeUnique && instance.childSelected() ){ + if( m_makeUnique && instance.childSelected() ){ NodeSmartReference clone( Node_Clone_Selected( path.top() ) ); Map_gatherNamespaced( clone ); Node_getTraversable( path.parent().get() )->insert( clone ); @@ -1244,9 +1242,7 @@ void post( const scene::Path& path, scene::Instance& instance ) const { return; } - // ignore worldspawn, but keep checking children - NodeSmartReference me( path.top().get() ); - if ( me == worldspawn ) { + if ( path.top().get_pointer() == m_world ) { // ignore worldspawn return; } @@ -1255,7 +1251,7 @@ void post( const scene::Path& path, scene::Instance& instance ) const { if ( selectable != 0 && selectable->isSelected() ) { NodeSmartReference clone( Node_Clone( path.top() ) ); - if ( doMakeUnique ) { + if ( m_makeUnique ) { Map_gatherNamespaced( clone ); } Node_getTraversable( path.parent().get() )->insert( clone ); @@ -1264,8 +1260,8 @@ void post( const scene::Path& path, scene::Instance& instance ) const { } }; -void Scene_Clone_Selected( scene::Graph& graph, bool doMakeUnique ){ - graph.traverse( CloneSelected( doMakeUnique ) ); +void Scene_Clone_Selected( scene::Graph& graph, bool makeUnique ){ + graph.traverse( CloneSelected( makeUnique ) ); Map_mergeClonedNames(); } diff --git a/radiant/select.cpp b/radiant/select.cpp index 49cb816a..f6dcb2c4 100644 --- a/radiant/select.cpp +++ b/radiant/select.cpp @@ -333,19 +333,20 @@ void Select_Invert(){ Scene_Invert_Selection( GlobalSceneGraph() ); } +#if 0 //interesting printings class ExpandSelectionToEntitiesWalker_dbg : public scene::Graph::Walker { mutable std::size_t m_depth; -NodeSmartReference worldspawn; +const scene::Node* m_world; public: -ExpandSelectionToEntitiesWalker_dbg() : m_depth( 0 ), worldspawn( Map_FindOrInsertWorldspawn( g_map ) ){ +ExpandSelectionToEntitiesWalker_dbg() : m_depth( 0 ), m_world( Map_FindWorldspawn( g_map ) ){ } bool pre( const scene::Path& path, scene::Instance& instance ) const { ++m_depth; globalOutputStream() << "pre depth_" << m_depth; globalOutputStream() << " path.size()_" << path.size(); - if ( path.top().get() == worldspawn ) + if ( path.top().get_pointer() == m_world ) globalOutputStream() << " worldspawn"; if( path.top().get().isRoot() ) globalOutputStream() << " path.top().get().isRoot()"; @@ -367,7 +368,7 @@ bool pre( const scene::Path& path, scene::Instance& instance ) const { void post( const scene::Path& path, scene::Instance& instance ) const { globalOutputStream() << "post depth_" << m_depth; globalOutputStream() << " path.size()_" << path.size(); - if ( path.top().get() == worldspawn ) + if ( path.top().get_pointer() == m_world ) globalOutputStream() << " worldspawn"; if( path.top().get().isRoot() ) globalOutputStream() << " path.top().get().isRoot()"; @@ -383,13 +384,14 @@ void post( const scene::Path& path, scene::Instance& instance ) const { --m_depth; } }; +#endif class ExpandSelectionToPrimitivesWalker : public scene::Graph::Walker { mutable std::size_t m_depth; -NodeSmartReference worldspawn; +const scene::Node* m_world; public: -ExpandSelectionToPrimitivesWalker() : m_depth( 0 ), worldspawn( Map_FindOrInsertWorldspawn( g_map ) ){ +ExpandSelectionToPrimitivesWalker() : m_depth( 0 ), m_world( Map_FindWorldspawn( g_map ) ){ } bool pre( const scene::Path& path, scene::Instance& instance ) const { ++m_depth; @@ -397,11 +399,8 @@ bool pre( const scene::Path& path, scene::Instance& instance ) const { if( !path.top().get().visible() ) return false; - // ignore worldspawn -// NodeSmartReference me( path.top().get() ); -// if ( me == worldspawn ) { +// if ( path.top().get_pointer() == m_world ) // ignore worldspawn // return false; -// } if ( m_depth == 2 ) { // entity depth // traverse and select children if any one is selected @@ -431,9 +430,9 @@ void Scene_ExpandSelectionToPrimitives(){ class ExpandSelectionToEntitiesWalker : public scene::Graph::Walker { mutable std::size_t m_depth; -NodeSmartReference worldspawn; +const scene::Node* m_world; public: -ExpandSelectionToEntitiesWalker() : m_depth( 0 ), worldspawn( Map_FindOrInsertWorldspawn( g_map ) ){ +ExpandSelectionToEntitiesWalker() : m_depth( 0 ), m_world( Map_FindWorldspawn( g_map ) ){ } bool pre( const scene::Path& path, scene::Instance& instance ) const { ++m_depth; @@ -441,18 +440,15 @@ bool pre( const scene::Path& path, scene::Instance& instance ) const { if( !path.top().get().visible() ) return false; - // ignore worldspawn -// NodeSmartReference me( path.top().get() ); -// if ( me == worldspawn ) { +// if ( path.top().get_pointer() == m_world ) // ignore worldspawn // return false; -// } if ( m_depth == 2 ) { // entity depth // traverse and select children if any one is selected bool beselected = false; if ( instance.childSelected() || instance.isSelected() ) { beselected = true; - if( path.top().get() != worldspawn ){ + if( path.top().get_pointer() != m_world ){ //avoid selecting world node Instance_setSelected( instance, true ); } } @@ -743,17 +739,17 @@ class EntityFindByPropertyValueWalker : public scene::Graph::Walker { const PropertyValues& m_propertyvalues; const char *m_prop; -const NodeSmartReference worldspawn; +const scene::Node* m_world; public: EntityFindByPropertyValueWalker( const char *prop, const PropertyValues& propertyvalues ) - : m_propertyvalues( propertyvalues ), m_prop( prop ), worldspawn( Map_FindOrInsertWorldspawn( g_map ) ){ + : m_propertyvalues( propertyvalues ), m_prop( prop ), m_world( Map_FindWorldspawn( g_map ) ){ } bool pre( const scene::Path& path, scene::Instance& instance ) const { if( !path.top().get().visible() ){ return false; } // ignore worldspawn - if ( path.top().get() == worldspawn ) { + if ( path.top().get_pointer() == m_world ) { return false; } @@ -782,15 +778,15 @@ class EntityGetSelectedPropertyValuesWalker : public scene::Graph::Walker { PropertyValues& m_propertyvalues; const char *m_prop; -const NodeSmartReference worldspawn; +const scene::Node* m_world; public: EntityGetSelectedPropertyValuesWalker( const char *prop, PropertyValues& propertyvalues ) - : m_propertyvalues( propertyvalues ), m_prop( prop ), worldspawn( Map_FindOrInsertWorldspawn( g_map ) ){ + : m_propertyvalues( propertyvalues ), m_prop( prop ), m_world( Map_FindWorldspawn( g_map ) ){ } bool pre( const scene::Path& path, scene::Instance& instance ) const { Entity* entity = Node_getEntity( path.top() ); if ( entity != 0 ){ - if( path.top().get() != worldspawn ){ + if( path.top().get_pointer() != m_world ){ Selectable* selectable = Instance_getSelectable( instance ); if ( ( selectable != 0 && selectable->isSelected() ) || instance.childSelected() ) { if ( !propertyvalues_contain( m_propertyvalues, entity->getKeyValue( m_prop ) ) ) { @@ -809,10 +805,10 @@ class EntityGetSelectedPropertyValuesWalker : public scene::Graph::Walker PropertyValues& m_propertyvalues; const char *m_prop; mutable bool m_selected_children; -const NodeSmartReference worldspawn; +const scene::Node* m_world; public: EntityGetSelectedPropertyValuesWalker( const char *prop, PropertyValues& propertyvalues ) - : m_propertyvalues( propertyvalues ), m_prop( prop ), m_selected_children( false ), worldspawn( Map_FindOrInsertWorldspawn( g_map ) ){ + : m_propertyvalues( propertyvalues ), m_prop( prop ), m_selected_children( false ), m_world( Map_FindWorldspawn( g_map ) ){ } bool pre( const scene::Path& path, scene::Instance& instance ) const { Selectable* selectable = Instance_getSelectable( instance ); @@ -835,7 +831,7 @@ void post( const scene::Path& path, scene::Instance& instance ) const { Entity* entity = Node_getEntity( path.top() ); if( entity != 0 && m_selected_children ){ m_selected_children = false; - if( path.top().get() == worldspawn ) + if( path.top().get_pointer() == m_world ) return; if ( !propertyvalues_contain( m_propertyvalues, entity->getKeyValue( m_prop ) ) ) { m_propertyvalues.push_back( entity->getKeyValue( m_prop ) ); @@ -1486,15 +1482,15 @@ class EntityGetSelectedPropertyValuesWalker_nonEmpty : public scene::Graph::Walk { PropertyValues& m_propertyvalues; const char *m_prop; -const NodeSmartReference worldspawn; +const scene::Node* m_world; public: EntityGetSelectedPropertyValuesWalker_nonEmpty( const char *prop, PropertyValues& propertyvalues ) - : m_propertyvalues( propertyvalues ), m_prop( prop ), worldspawn( Map_FindOrInsertWorldspawn( g_map ) ){ + : m_propertyvalues( propertyvalues ), m_prop( prop ), m_world( Map_FindWorldspawn( g_map ) ){ } bool pre( const scene::Path& path, scene::Instance& instance ) const { Entity* entity = Node_getEntity( path.top() ); if ( entity != 0 ){ - if( path.top().get() != worldspawn ){ + if( path.top().get_pointer() != m_world ){ Selectable* selectable = Instance_getSelectable( instance ); if ( ( selectable != 0 && selectable->isSelected() ) || instance.childSelected() ) { const char* keyvalue = entity->getKeyValue( m_prop );