Adding rotation support for offsets

This commit is contained in:
2024-09-24 18:18:53 +03:00
parent 1d620a3326
commit 12822d2f65
2 changed files with 13 additions and 3 deletions

View File

@@ -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);
}
}
}

View File

@@ -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,