diff --git a/src/modules/stream/road_lines_data.cpp b/src/modules/stream/road_lines_data.cpp index 39b9ab8..c6dc4c5 100644 --- a/src/modules/stream/road_lines_data.cpp +++ b/src/modules/stream/road_lines_data.cpp @@ -503,7 +503,8 @@ void RoadLinesData::update_line_segments(const String &line) } void RoadLinesData::line_add_building(const String &line, const String &key, - float curve_offset, float normal_offset) + float curve_offset, float normal_offset, + float y_rotation) { int index = BuildingsData::get_singleton()->get_building_by_key(key); if (index < 0) @@ -513,6 +514,7 @@ void RoadLinesData::line_add_building(const String &line, const String &key, lb.building_key_hash = key.hash64(); lb.line_offset = curve_offset; lb.normal_offset = normal_offset; + lb.y_rotation = y_rotation; lines[line].buildings.push_back(lb); // TODO: save/load BuildingsData::get_singleton()->buildings[index].line_name = line; @@ -606,8 +608,14 @@ void RoadLinesData::assign_close_buildings(const String &line) print_line("adding: key: " + building_key + " dst: " + String::num(dst)); assert(result_offset >= 0); + Vector3 reference(0, 0, -1); + Vector3 rotated = + data.xform.basis.xform(reference).normalized(); + float angle = reference.signed_angle_to( + rotated, Vector3(0, 1, 0)); + line_add_building(line, building_key, result_offset, - side); + side, angle); } } } diff --git a/src/modules/stream/road_lines_data.h b/src/modules/stream/road_lines_data.h index fff6fac..7a38a07 100644 --- a/src/modules/stream/road_lines_data.h +++ b/src/modules/stream/road_lines_data.h @@ -19,6 +19,7 @@ public: uint64_t building_key_hash; float line_offset; float normal_offset; + float y_rotation; }; struct line_segment { Vector3 p1; @@ -55,7 +56,8 @@ public: int get_debug_flags() const; void update_line_segments(const String &line); void line_add_building(const String &line, const String &key, - float curve_offset, float normal_offset); + float curve_offset, float normal_offset, + float y_rotation); void assign_close_buildings(const String &line); bool line_has_building(const String &line, const String &building_key); Vector3 get_point_by_offsets(const String &line, float dir_offset,