X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fmap.cpp;h=73fceb5d449f01bec55f10222f3429887c0ccb2a;hb=0261afc6df181092b7d57751fec84e21d3ac593c;hp=e4c6e26aa0a902b6aa629714045afe28c9723dd0;hpb=dd7f4f1689e8ede7580bdfa8e08d0b78d08f5253;p=xonotic%2Fnetradiant.git diff --git a/radiant/map.cpp b/radiant/map.cpp index e4c6e26a..73fceb5d 100644 --- a/radiant/map.cpp +++ b/radiant/map.cpp @@ -2099,7 +2099,7 @@ void SelectBrush( int entitynum, int brushnum ){ } -class BrushFindIndexWalker : public scene::Graph::Walker +class BrushFindIndexWalker : public scene::Traversable::Walker { mutable const scene::Node* m_node; std::size_t& m_count; @@ -2107,9 +2107,9 @@ public: BrushFindIndexWalker( const scene::Node& node, std::size_t& count ) : m_node( &node ), m_count( count ){ } -bool pre( const scene::Path& path, scene::Instance& instance ) const { - if ( Node_isPrimitive( path.top() ) ) { - if ( m_node == path.top().get_pointer() ) { +bool pre( scene::Node& node ) const { + if ( Node_isPrimitive( node ) ) { + if ( m_node == &node ) { m_node = 0; } if ( m_node ) { @@ -2120,7 +2120,7 @@ bool pre( const scene::Path& path, scene::Instance& instance ) const { } }; -class EntityFindIndexWalker : public scene::Graph::Walker +class EntityFindIndexWalker : public scene::Traversable::Walker { mutable const scene::Node* m_node; std::size_t& m_count; @@ -2128,9 +2128,9 @@ public: EntityFindIndexWalker( const scene::Node& node, std::size_t& count ) : m_node( &node ), m_count( count ){ } -bool pre( const scene::Path& path, scene::Instance& instance ) const { - if ( Node_isEntity( path.top() ) ) { - if ( m_node == path.top().get_pointer() ) { +bool pre( scene::Node& node ) const { + if ( Node_isEntity( node ) ) { + if ( m_node == &node ) { m_node = 0; } if ( m_node ) { @@ -2147,8 +2147,24 @@ static void GetSelectionIndex( int *ent, int *brush ){ if ( GlobalSelectionSystem().countSelected() != 0 ) { const scene::Path& path = GlobalSelectionSystem().ultimateSelected().path(); - GlobalSceneGraph().traverse( BrushFindIndexWalker( path.top(), count_brush ) ); - GlobalSceneGraph().traverse( EntityFindIndexWalker( path.parent(), count_entity ) ); + { + scene::Traversable* traversable = Node_getTraversable( path.parent() ); + if ( traversable != 0 && path.size() == 3 ) { + traversable->traverse( BrushFindIndexWalker( path.top(), count_brush ) ); + } + } + + { + scene::Traversable* traversable = Node_getTraversable( GlobalSceneGraph().root() ); + if ( traversable != 0 ) { + if( path.size() == 3 ){ + traversable->traverse( EntityFindIndexWalker( path.parent(), count_entity ) ); + } + else if ( path.size() == 2 ){ + traversable->traverse( EntityFindIndexWalker( path.top(), count_entity ) ); + } + } + } } *brush = int(count_brush); *ent = int(count_entity);