mutable Stack<bool> m_stack;
TokenWriter& m_writer;
bool m_ignorePatches;
+bool m_writeComments;
public:
-WriteTokensWalker( TokenWriter& writer, bool ignorePatches )
- : m_writer( writer ), m_ignorePatches( ignorePatches ){
+WriteTokensWalker( TokenWriter& writer, bool ignorePatches, bool writeComments )
+ : m_writer( writer ), m_ignorePatches( ignorePatches ), m_writeComments( writeComments ){
}
-bool pre( scene::Node& node ) const {
+
+bool pre( scene::Node &node ) const {
m_stack.push( false );
Entity* entity = Node_getEntity( node );
if ( entity != 0 ) {
- m_writer.writeToken( "//" );
- m_writer.writeToken( "entity" );
- m_writer.writeUnsigned( g_count_entities++ );
- m_writer.nextLine();
+ if( entity->isContainer() && Node_getTraversable( node )->empty() && !string_equal( entity->getKeyValue( "classname" ), "worldspawn" ) ){
+ globalErrorStream() << "discarding empty group entity: # = " << g_count_entities << "; classname = " << entity->getKeyValue( "classname" ) << "\n";
+ return false;
+ }
+ if ( m_writeComments ) {
+ m_writer.writeToken( "//" );
+ m_writer.writeToken( "entity" );
+ m_writer.writeUnsigned( g_count_entities++ );
+ m_writer.nextLine();
+ }
m_writer.writeToken( "{" );
m_writer.nextLine();
{
MapExporter* exporter = Node_getMapExporter( node );
if ( exporter != 0
- && !( m_ignorePatches && Node_isPatch( node ) ) ) {
- m_writer.writeToken( "//" );
- m_writer.writeToken( "brush" );
- m_writer.writeUnsigned( g_count_brushes++ );
- m_writer.nextLine();
+ && !( m_ignorePatches && Node_isPatch( node ) ) ) {
+ if ( m_writeComments ) {
+ m_writer.writeToken( "//" );
+ m_writer.writeToken( "brush" );
+ m_writer.writeUnsigned( g_count_brushes++ );
+ m_writer.nextLine();
+ }
exporter->exportTokens( m_writer );
}
return true;
}
+
void post( scene::Node& node ) const {
if ( m_stack.top() ) {
m_writer.writeToken( "}" );
}
};
-void Map_Write( scene::Node& root, GraphTraversalFunc traverse, TokenWriter& writer, bool ignorePatches ){
+void Map_Write( scene::Node& root, GraphTraversalFunc traverse, TokenWriter& writer, bool ignorePatches, bool writeComments ){
g_count_entities = 0;
- traverse( root, WriteTokensWalker( writer, ignorePatches ) );
+ traverse( root, WriteTokensWalker( writer, ignorePatches, writeComments ) );
}