diff --git a/Globals.h b/Globals.h index 718aa8f5..82a1b3f9 100644 --- a/Globals.h +++ b/Globals.h @@ -72,11 +72,12 @@ struct global_settings { int iConvertModels{ 0 }; // tworzenie plików binarnych int iConvertIndexRange{ 1000 }; // range of duplicate vertex scan bool file_binary_terrain{ true }; // enable binary terrain (de)serialization + bool file_binary_terrain_state{true}; // logs int iWriteLogEnabled{ 3 }; // maska bitowa: 1-zapis do pliku, 2-okienko, 4-nazwy torów bool MultipleLogs{ false }; unsigned int DisabledLogTypes{ 0 }; - bool ParserLogIncludes{ false }; + bool ParserLogIncludes{ true }; // simulation bool RealisticControlMode{ false }; // controls ability to steer the vehicle from outside views bool bEnableTraction{ true }; diff --git a/parser.cpp b/parser.cpp index f854b8e2..6b1bb67a 100644 --- a/parser.cpp +++ b/parser.cpp @@ -247,17 +247,41 @@ std::string cParser::readToken( bool ToLower, const char *Break ) { if( expandIncludes && token == "include" ) { std::string includefile = allowRandomIncludes ? deserialize_random_set(*this) : readToken(ToLower); // nazwa pliku replace_slashes(includefile); - if( ( true == LoadTraction ) - || ( ( false == contains( includefile, "tr/" ) ) - && ( false == contains( includefile, "tra/" ) ) ) ) { - if (Global.ParserLogIncludes) - WriteLog("including: " + includefile); + if ((true == LoadTraction) || + ((false == contains(includefile, "tr/")) && (false == contains(includefile, "tra/")))) + { + if (false == contains(includefile, "_ter.scm")) + { + if (Global.ParserLogIncludes) + WriteLog("including: " + includefile); mIncludeParser = std::make_shared( includefile, buffer_FILE, mPath, LoadTraction, readParameters( *this ) ); mIncludeParser->allowRandomIncludes = allowRandomIncludes; mIncludeParser->autoclear( m_autoclear ); if( mIncludeParser->mSize <= 0 ) { ErrorLog( "Bad include: can't open file \"" + includefile + "\"" ); } + } + else + { + if(true == Global.file_binary_terrain_state) + { + WriteLog("SBT found, ignoring: " + includefile); + readParameters(*this); + } + else + { + if (Global.ParserLogIncludes) + WriteLog("including terrain: " + includefile); + mIncludeParser = std::make_shared(includefile, buffer_FILE, mPath, + LoadTraction, readParameters(*this)); + mIncludeParser->allowRandomIncludes = allowRandomIncludes; + mIncludeParser->autoclear(m_autoclear); + if (mIncludeParser->mSize <= 0) + { + ErrorLog("Bad include: can't open file \"" + includefile + "\""); + } + } + } } else { while( token != "end" ) { @@ -272,18 +296,46 @@ std::string cParser::readToken( bool ToLower, const char *Break ) { includeparser.allowRandomIncludes = allowRandomIncludes; std::string includefile = allowRandomIncludes ? deserialize_random_set( includeparser ) : includeparser.readToken( ToLower ); // nazwa pliku replace_slashes(includefile); - if( ( true == LoadTraction ) - || ( ( false == contains( includefile, "tr/" ) ) - && ( false == contains( includefile, "tra/" ) ) ) ) { - if (Global.ParserLogIncludes) - WriteLog("including: " + includefile); - mIncludeParser = std::make_shared( includefile, buffer_FILE, mPath, LoadTraction, readParameters( includeparser ) ); - mIncludeParser->allowRandomIncludes = allowRandomIncludes; - mIncludeParser->autoclear( m_autoclear ); - if( mIncludeParser->mSize <= 0 ) { - ErrorLog( "Bad include: can't open file \"" + includefile + "\"" ); - } - } + if ((true == LoadTraction) || + ((false == contains(includefile, "tr/")) && (false == contains(includefile, "tra/")))) + { + if (false == contains(includefile, "_ter.scm")) + { + if (Global.ParserLogIncludes) + WriteLog("including: " + includefile); + mIncludeParser = std::make_shared( + includefile, buffer_FILE, mPath, LoadTraction, readParameters(includeparser)); + mIncludeParser->allowRandomIncludes = allowRandomIncludes; + mIncludeParser->autoclear(m_autoclear); + if (mIncludeParser->mSize <= 0) + { + ErrorLog("Bad include: can't open file \"" + includefile + "\""); + } + } + else + { + if (true == Global.file_binary_terrain_state) + { + WriteLog("SBT found, ignoring: " + includefile); + readParameters(includeparser); + } + else + { + if (Global.ParserLogIncludes) + WriteLog("including terrain: " + includefile); + mIncludeParser = + std::make_shared(includefile, buffer_FILE, mPath, LoadTraction, + readParameters(includeparser)); + mIncludeParser->allowRandomIncludes = allowRandomIncludes; + mIncludeParser->autoclear(m_autoclear); + if (mIncludeParser->mSize <= 0) + { + ErrorLog("Bad include: can't open file \"" + includefile + "\""); + } + + } + } + } token = readToken( ToLower, Break ); } // all done diff --git a/scene.cpp b/scene.cpp index 6933ed86..8daa6117 100644 --- a/scene.cpp +++ b/scene.cpp @@ -1159,6 +1159,7 @@ basic_region::deserialize( std::string const &Scenariofile ) { filename += EU07_FILEEXTENSION_REGION; if( false == FileExists( filename ) ) { + Global.file_binary_terrain_state = false; return false; } // region file version 1 diff --git a/simulationstateserializer.cpp b/simulationstateserializer.cpp index 2327bc71..7b9dde5e 100644 --- a/simulationstateserializer.cpp +++ b/simulationstateserializer.cpp @@ -55,6 +55,16 @@ state_serializer::deserialize_begin( std::string const &Scenariofile ) { state->scratchpad.binary.terrain = Region->is_scene( Scenariofile ) ; } + if (false != state->scratchpad.binary.terrain) + { + Global.file_binary_terrain_state = true; + WriteLog("SBT present"); + } + else + { + Global.file_binary_terrain_state = false; + WriteLog("SBT absent"); + } scene::Groups.create(); if( false == state->input.ok() )