16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 03:29:19 +02:00

EU7 scenery format and models streaming

This commit is contained in:
maj00r
2026-06-13 15:43:44 +02:00
parent f07c8fdcd2
commit 876a4c7c18
171 changed files with 27924 additions and 281 deletions

View File

@@ -638,6 +638,24 @@ bool global_settings::ConfigParseSimulation(cParser& Parser, const std::string&
return true;
}
if (token == "eu7.pack.stream.workers.percent")
{
ParseOneClamped(Parser, eu7_pack_stream_workers_percent, 1, 100);
return true;
}
if (token == "eu7.auto.bake")
{
ParseOne(Parser, eu7_auto_bake, 1, false);
return true;
}
if (token == "eu7.bake.threads")
{
ParseOneClamped(Parser, eu7_bake_threads, 0, 64);
return true;
}
if (token == "inactivepause")
{
ParseOne(Parser, bInactivePause);
@@ -1588,6 +1606,9 @@ global_settings::export_as_text( std::ostream &Output ) const {
export_as_text( Output, "latitude", fLatitudeDeg );
export_as_text( Output, "convertmodels", iConvertModels );
export_as_text( Output, "file.binary.terrain", file_binary_terrain );
export_as_text( Output, "eu7.pack.stream.workers.percent", eu7_pack_stream_workers_percent );
export_as_text( Output, "eu7.auto.bake", eu7_auto_bake );
export_as_text( Output, "eu7.bake.threads", eu7_bake_threads );
export_as_text( Output, "inactivepause", bInactivePause );
export_as_text( Output, "slowmotion", iSlowMotionMask );
export_as_text( Output, "hideconsole", bHideConsole );

View File

@@ -82,6 +82,9 @@ struct global_settings {
int iConvertIndexRange{ 1000 }; // range of duplicate vertex scan
bool file_binary_terrain{ true }; // enable binary terrain (de)serialization
bool file_binary_terrain_state{true};
int eu7_pack_stream_workers_percent{ 40 }; // EU7 PACK async loader thread pool size (% of CPU threads)
bool eu7_auto_bake{ true }; // przy ladowaniu mapy: bake SCM→EU7 gdy brak lub nieaktualny .eu7
int eu7_bake_threads{ 0 }; // watki bake (0 = auto = hardware_concurrency)
// logs
bool priorityLoadText3D{false}; // ladowanie T3D priorytetowo
int iWriteLogEnabled{ 3 }; // maska bitowa: 1-zapis do pliku, 2-okienko, 4-nazwy torów

View File

@@ -12,6 +12,18 @@ http://mozilla.org/MPL/2.0/.
#include "utilities/Logs.h"
#include "scene/scenenodegroups.h"
#include "scene/eu7/eu7_loader.h"
#include "utilities/Globals.h"
#include "utilities/utilities.h"
namespace scene {
class basic_region;
}
namespace simulation {
class state_manager;
extern scene::basic_region *Region;
extern state_manager State;
}
/*
MaSzyna EU07 locomotive simulator parser
@@ -326,9 +338,39 @@ void cParser::startIncludeFromParser(cParser& srcParser, bool ToLower, std::stri
return;
}
const bool isTerrain = contains(includefile, "_ter.scm");
const bool isTerrain =
contains( includefile, "_ter.scm" ) || contains( includefile, "_ter.eu7" ) ||
includefile.ends_with( ".eu7" );
auto const eu7path {
scene::eu7::include_eu7_path( mPath, mFile, includefile ) };
auto const resolved_include {
scene::eu7::resolve_parser_include_path( mPath, mFile, includefile ) };
if ( scene::eu7::is_module_loaded( eu7path ) ) {
readParameters( srcParser );
return;
}
if ( scene::eu7::should_use_binary_module( resolved_include ) && simulation::Region != nullptr ) {
if ( isTerrain && true == Global.file_binary_terrain ) {
if ( scene::eu7::probe_terrain_file( eu7path ) ) {
if ( scene::eu7::load_terrain( *simulation::Region, eu7path ) ) {
Global.file_binary_terrain_state = true;
WriteLog( "EU7 terrain loaded, ignoring: " + includefile );
readParameters( srcParser );
return;
}
}
}
else if ( simulation::State.load_eu7_module( eu7path ) ) {
WriteLog( "EU7 module loaded, ignoring: " + includefile );
readParameters( srcParser );
return;
}
}
else if ( scene::eu7::probe_file( eu7path ) ) {
WriteLog( "EU7: przestarzaly .eu7, fallback SCM: " + includefile );
}
if (isTerrain && true == Global.file_binary_terrain_state) {
WriteLog("SBT found, ignoring: " + includefile);
WriteLog("Binary terrain present, ignoring: " + includefile);
readParameters(srcParser); // preserve original side-effect: still consume parameters
return;
}