aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/init.lua
Commit message (Collapse)AuthorAge
* Point speed restriction railsorwell962019-01-24
|
* Add Automatic Routesetting UIorwell962019-01-09
| | | | Settings have no effect so far
* Shunt signals (not exactly Ks), along with fixes in other components that ↵orwell962018-12-08
| | | | those rely on
* Miscellaneous routesetting fixesorwell962018-10-29
| | | | | | | - Move handling of "route_committed" to the routesetting function - Put aspect in every TCBS on the way - Add "route_origin" to TCBS fields to prevent subroute cancelling - Cancel entire route when another train enters from the wrong TCB
* Add Interlocking Tool to inspect route locksorwell962018-10-26
|
* Add signal safety control override, restructure control systemorwell962018-10-10
|
* Add 'interlocking' privilege and add security checksorwell962018-08-12
|
* Uncommitted route handling (update_route function)orwell962018-08-03
|
* Implement routesettingorwell962018-07-21
| | | | Missing things: signal aspect updating, waiting routes handling, management /info tool
* Signal assignment and route programming procedureorwell962018-07-04
|
* get_ts_at_pos(), file for train-related stufforwell962018-06-29
|
* Add track section concept and rework TCB design, implement new linking behaviororwell962018-06-21
|
* Add Track Circuit Breaks (TCBs), Database and Track Circuit Setuporwell962018-06-20
| | | | Does not get saved yet.
* Interlocking: Create demo signals, signal API and model for TCB configurer nodeorwell962018-06-19
|
* Draft of interlocking systemorwell962018-06-14
pan>::string,ModSpec> modpack_content; ModSpec(const std::string &name_="", const std::string &path_=""): name(name_), path(path_) {} }; // Retrieves depends, optdepends, is_modpack and modpack_content void parseModContents(ModSpec &mod); std::map<std::string,ModSpec> getModsInPath(std::string path, bool part_of_modpack = false); // replaces modpack Modspecs with their content std::vector<ModSpec> flattenMods(std::map<std::string,ModSpec> mods); // a ModConfiguration is a subset of installed mods, expected to have // all dependencies fullfilled, so it can be used as a list of mods to // load when the game starts. class ModConfiguration { public: // checks if all dependencies are fullfilled. bool isConsistent() const { return m_unsatisfied_mods.empty(); } std::vector<ModSpec> getMods() { return m_sorted_mods; } const std::vector<ModSpec> &getUnsatisfiedMods() const { return m_unsatisfied_mods; } void printUnsatisfiedModsError() const; protected: ModConfiguration(const std::string &worldpath); // adds all mods in the given path. used for games, modpacks // and world-specific mods (worldmods-folders) void addModsInPath(const std::string &path); // adds all mods in the set. void addMods(const std::vector<ModSpec> &new_mods); void addModsFormConfig(const std::string &settings_path, const std::set<std::string> &mods); void checkConflictsAndDeps(); private: // move mods from m_unsatisfied_mods to m_sorted_mods // in an order that satisfies dependencies void resolveDependencies(); // mods with unmet dependencies. Before dependencies are resolved, // this is where all mods are stored. Afterwards this contains // only the ones with really unsatisfied dependencies. std::vector<ModSpec> m_unsatisfied_mods; // list of mods sorted such that they can be loaded in the // given order with all dependencies being fullfilled. I.e., // every mod in this list has only dependencies on mods which // appear earlier in the vector. std::vector<ModSpec> m_sorted_mods; // set of mod names for which an unresolved name conflict // exists. A name conflict happens when two or more mods // at the same level have the same name but different paths. // Levels (mods in higher levels override mods in lower levels): // 1. game mod in modpack; 2. game mod; // 3. world mod in modpack; 4. world mod; // 5. addon mod in modpack; 6. addon mod. std::unordered_set<std::string> m_name_conflicts; // Deleted default constructor ModConfiguration() {} }; class ServerModConfiguration: public ModConfiguration { public: ServerModConfiguration(const std::string &worldpath); }; #ifndef SERVER class ClientModConfiguration: public ModConfiguration { public: ClientModConfiguration(const std::string &path); }; #endif struct ModLicenseInfo { int id; std::string shortinfo; std::string url; }; struct ModAuthorInfo { int id; std::string username; }; class ModMetadata: public Metadata { public: ModMetadata(const std::string &mod_name); ~ModMetadata() {} virtual void clear(); bool save(const std::string &root_path); bool load(const std::string &root_path); bool isModified() const { return m_modified; } const std::string &getModName() const { return m_mod_name; } virtual bool setString(const std::string &name, const std::string &var); private: std::string m_mod_name; bool m_modified = false; };