#pragma once #include "deferred_image.h" namespace ui { enum class vehicle_type { none = -1, electric_loco, diesel_loco, steam_loco, railcar, emu, utility, draisine, tram, carriage, truck, bus, car, man, animal, unknown }; struct vehicle_desc; struct skin_meta { std::string name; std::string short_id; std::string location; std::string rev_date; int rev_year = -1; std::string rev_company; std::string texture_author; std::string photo_author; std::string search_lowered; }; struct skin_set { std::weak_ptr vehicle; std::shared_ptr meta; std::string skin; //std::vector skins; deferred_image mini; std::string group; }; struct texture_rule { std::shared_ptr previous_vehicle; std::vector> replace_rules; }; struct coupling_rule { std::shared_ptr coupled_vehicle; int coupling_flag; }; struct vehicle_desc { vehicle_type type; std::filesystem::path path; std::vector> matching_skinsets; std::vector coupling_rules; std::vector texture_rules; bool controllable; }; class vehicles_bank { public: std::unordered_map category_icons; std::map group_icons; std::map> vehicles; std::map>> group_map; void scan_textures(); private: void parse_entry(const std::string &line); void parse_category_entry(const std::string ¶m); void parse_controllable_entry(const std::string &target, const std::string ¶m); void parse_coupling_rule(const std::string &target, const std::string ¶m); void parse_texture_rule(const std::string &target, const std::string ¶m); void parse_texture_info(const std::string &target, const std::string ¶m, std::shared_ptr meta); std::shared_ptr parse_meta(const std::string &str); std::shared_ptr get_vehicle(const std::string &name); vehicle_type ctx_type = vehicle_type::unknown; std::filesystem::path ctx_path; std::string ctx_model; }; }