diff --git a/server/src/traintastic/traintastic.cpp b/server/src/traintastic/traintastic.cpp index dee358bd..0e6f3fa3 100644 --- a/server/src/traintastic/traintastic.cpp +++ b/server/src/traintastic/traintastic.cpp @@ -287,6 +287,24 @@ void Traintastic::loadWorldPath(const std::filesystem::path& path) #endif settings->lastWorld = world->uuid.value(); Log::log(*this, LogMessage::N1027_LOADED_WORLD_X, world->name.value()); + + if(world->onlineWhenLoaded) + { + world->online(); + } + + if(world->powerOnWhenLoaded) + { + if(world->runWhenLoaded) + { + world->run(); + } + else + { + world->powerOn(); + } + } + } catch(const LogMessageException& e) { diff --git a/server/src/world/world.cpp b/server/src/world/world.cpp index c518ae3d..9541b719 100644 --- a/server/src/world/world.cpp +++ b/server/src/world/world.cpp @@ -127,6 +127,23 @@ World::World(Private /*unused*/) : name{this, "name", "", PropertyFlags::ReadWrite | PropertyFlags::Store | PropertyFlags::ScriptReadOnly}, scale{this, "scale", WorldScale::H0, PropertyFlags::ReadWrite | PropertyFlags::Store | PropertyFlags::ScriptReadOnly, [this](WorldScale /*value*/){ updateScaleRatio(); }}, scaleRatio{this, "scale_ratio", 87, PropertyFlags::ReadWrite | PropertyFlags::Store | PropertyFlags::ScriptReadOnly}, + onlineWhenLoaded{this, "online_when_loaded", false, PropertyFlags::ReadWrite | PropertyFlags::Store | PropertyFlags::NoScript}, + powerOnWhenLoaded{this, "power_on_when_loaded", false, PropertyFlags::ReadWrite | PropertyFlags::Store | PropertyFlags::NoScript, + [this](bool value) + { + if(!value) + { + runWhenLoaded = false; // can't run without power + } + }}, + runWhenLoaded{this, "run_when_loaded", false, PropertyFlags::ReadWrite | PropertyFlags::Store | PropertyFlags::NoScript, + [this](bool value) + { + if(value) + { + powerOnWhenLoaded = true; // can't run without power + } + }}, decoderControllers{this, "input_controllers", nullptr, PropertyFlags::ReadOnly | PropertyFlags::SubObject | PropertyFlags::NoStore}, inputControllers{this, "input_controllers", nullptr, PropertyFlags::ReadOnly | PropertyFlags::SubObject | PropertyFlags::NoStore}, outputControllers{this, "output_controllers", nullptr, PropertyFlags::ReadOnly | PropertyFlags::SubObject | PropertyFlags::NoStore}, @@ -287,6 +304,10 @@ World::World(Private /*unused*/) : Attributes::addVisible(scaleRatio, false); m_interfaceItems.add(scaleRatio); + m_interfaceItems.add(onlineWhenLoaded); + m_interfaceItems.add(powerOnWhenLoaded); + m_interfaceItems.add(runWhenLoaded); + Attributes::addObjectEditor(decoderControllers, false); m_interfaceItems.add(decoderControllers); Attributes::addObjectEditor(inputControllers, false); diff --git a/server/src/world/world.hpp b/server/src/world/world.hpp index d03d6ef8..d3ed3525 100644 --- a/server/src/world/world.hpp +++ b/server/src/world/world.hpp @@ -99,6 +99,9 @@ class World : public Object Property name; Property scale; Property scaleRatio; + Property onlineWhenLoaded; + Property powerOnWhenLoaded; + Property runWhenLoaded; ObjectProperty> decoderControllers; ObjectProperty> inputControllers; diff --git a/shared/translations/en-us.json b/shared/translations/en-us.json index 7cd11776..fdac4c26 100644 --- a/shared/translations/en-us.json +++ b/shared/translations/en-us.json @@ -4394,6 +4394,17 @@ { "term": "qtapp.about:traintastic_server", "definition": "About Traintastic server" + }, + { + "term": "world:online_when_loaded", + "definition": "Go online when loaded" + }, + { + "term": "world:power_on_when_loaded", + "definition": "Power on when loaded" + }, + { + "term": "world:run_when_loaded", + "definition": "Run when loaded" } - ] \ No newline at end of file