Improved scenery loading from SBT

When found SBT file, ignores "*_ter.scm" files
This commit is contained in:
Jano211
2023-08-11 21:26:15 +02:00
committed by Hirek
parent e5c317a7bf
commit c712c7d5a3
4 changed files with 84 additions and 18 deletions

View File

@@ -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 };

View File

@@ -248,16 +248,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);
mIncludeParser = std::make_shared<cParser>( includefile, buffer_FILE, mPath, LoadTraction, readParameters( *this ), allowRandomIncludes );
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<cParser>( 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<cParser>(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" ) {
@@ -271,17 +296,46 @@ std::string cParser::readToken( bool ToLower, const char *Break ) {
cParser includeparser( token.substr( 7 ) );
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<cParser>( includefile, buffer_FILE, mPath, LoadTraction, readParameters( includeparser ), 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<cParser>(
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<cParser>(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

View File

@@ -1158,6 +1158,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

View File

@@ -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() )