Refactoring of lines handling

This commit is contained in:
2024-09-11 15:59:00 +03:00
parent 2f3465350e
commit b3b7cc0d90
8 changed files with 578 additions and 514 deletions

View File

@@ -0,0 +1,48 @@
#ifndef ROAD_LINES_DATA_H
#define ROAD_LINES_DATA_H
class RoadLinesData {
String road_lines_path;
uint32_t road_lines_hash(const Vector3 &v);
protected:
RoadLinesData();
static RoadLinesData *singleton;
public:
struct road_line {
std::vector<Transform> points;
std::vector<int> indices;
int lanes;
int pattern;
int flags;
Dictionary metadata;
};
HashMap<String, struct road_line> lines;
static RoadLinesData *get_singleton();
static void cleanup();
String get_road_lines_path();
void get_road_lines_key_list(List<String> *keys);
void save_data();
void process_lines(std::unordered_map<uint32_t, std::vector<Vector3> >
&road_lines_nodes_hash,
std::vector<Vector3> &road_lines_nodes);
private:
void index_lines(std::unordered_map<uint32_t, std::vector<Vector3> >
&road_lines_nodes_hash,
std::vector<Vector3> &road_lines_nodes);
void create_segments(const String &road, std::vector<int> &segments);
void insert_close_points(std::vector<Vector3> &road_lines_nodes);
void update_road_lines_nodes(std::vector<Vector3> &road_lines_nodes);
void dump_road_lines(const std::vector<Vector3> &road_lines_nodes);
void road_lines_curve_index(
struct RoadLinesData::road_line &rline,
std::unordered_map<uint32_t, std::vector<Vector3> >
&road_lines_nodes_hash,
std::vector<Vector3> &road_lines_nodes);
};
#endif