Made accessor for lines

This commit is contained in:
2024-10-02 20:49:41 +03:00
parent 521ae37202
commit 794857209d
10 changed files with 417 additions and 308 deletions

View File

@@ -314,11 +314,11 @@ protected:
editor->get_as_node<ItemList>("%line_buildings_list");
items->clear();
for (i = 0; i < (int)RoadLinesData::get_singleton()
->lines[current_line]
->lines(current_line)
.buildings.size();
i++) {
const String &key = RoadLinesData::get_singleton()
->lines[current_line]
->lines(current_line)
.buildings[i]
.building_key;
items->add_item(key);
@@ -615,7 +615,7 @@ Node *RoadLinesEditor::scene()
void RoadLinesEditor::update_line_geometry()
{
RoadLinesData *rld = RoadLinesData::get_singleton();
if (!rld->lines.has(current_line)) {
if (!rld->has_line(current_line)) {
if (line_im)
line_im->clear();
return;
@@ -629,16 +629,16 @@ void RoadLinesEditor::update_line_geometry()
line_im->set_color(Color(1.0f, 0.0f, 0.0f, 1.0f));
line_im->add_vertex(Vector3(0.0f, 100.0f, 0.0f));
line_im->end();
if (rld->lines[current_line].points.size() > 1) {
if (rld->lines(current_line).points.size() > 1) {
line_im->begin(Mesh::PRIMITIVE_LINES);
for (i = 0;
i <
(int)rld->lines[current_line].points.size() - 1;
(int)rld->lines(current_line).points.size() - 1;
i++) {
Vector3 pt1 = rld->lines[current_line]
Vector3 pt1 = rld->lines(current_line)
.points[i]
.origin;
Vector3 pt2 = rld->lines[current_line]
Vector3 pt2 = rld->lines(current_line)
.points[i + 1]
.origin;
line_im->set_color(
@@ -659,14 +659,14 @@ void RoadLinesEditor::update_line_geometry()
}
// FIXME: update line segments on load and when line is changed
rld->update_line_segments(current_line);
if (rld->lines[current_line].buildings.size() > 1) {
if (rld->lines(current_line).buildings.size() > 1) {
line_im->begin(Mesh::PRIMITIVE_LINES);
for (i = 0;
i < (int)rld->lines[current_line].buildings.size();
i < (int)rld->lines(current_line).buildings.size();
i++) {
print_line("idx: " + itos(i));
const RoadLinesData::line_building_data &b =
rld->lines[current_line].buildings[i];
rld->lines(current_line).buildings[i];
Vector3 pt = rld->get_point_by_offsets(
current_line, b.line_offset,
b.normal_offset);
@@ -686,14 +686,14 @@ void RoadLinesEditor::update_line_index_ui()
{
RoadLinesData *rld = RoadLinesData::get_singleton();
SpinBox *sp_line_index = get_as_node<SpinBox>("%line_index");
sp_line_index->set_max(rld->lines[current_line].points.size() - 1);
sp_line_index->set_max(rld->lines(current_line).points.size() - 1);
sp_line_index->set_min(0);
}
void RoadLinesEditor::select_line(const String &line_name)
{
print_line("selected line: " + line_name);
RoadLinesData *rld = RoadLinesData::get_singleton();
assert(rld->lines.has(line_name));
assert(rld->has_line(line_name));
if (current_line != line_name) {
current_line = line_name;
update_line_index_ui();
@@ -713,7 +713,7 @@ void RoadLinesEditor::select_line(const String &line_name)
bool RoadLinesEditor::line_exists(const String &line_name)
{
RoadLinesData *rld = RoadLinesData::get_singleton();
return rld->lines.has(line_name);
return rld->has_line(line_name);
}
void RoadLinesEditor::line_create_point()
@@ -724,8 +724,10 @@ void RoadLinesEditor::line_create_point()
Vector3 position = get_cursor_position();
Transform xform(Basis(), position);
int index = get_line_index();
rld->lines[current_line].points.insert(
rld->lines[current_line].points.begin() + index + 1, xform);
rld->lines(current_line)
.points.insert(rld->lines(current_line).points.begin() + index +
1,
xform);
Array args;
args.push_back(current_line);
EditorEvent::get_singleton()->event.emit("lines_changed_line", args);
@@ -742,10 +744,10 @@ void RoadLinesEditor::line_delete_point()
print_line("line_delete_point");
int index = get_line_index();
RoadLinesData *rld = RoadLinesData::get_singleton();
if (rld->lines[current_line].points.size() < 2)
if (rld->lines(current_line).points.size() < 2)
return;
rld->lines[current_line].points.erase(
rld->lines[current_line].points.begin() + index);
rld->lines(current_line)
.points.erase(rld->lines(current_line).points.begin() + index);
Array args;
args.push_back(current_line);
EditorEvent::get_singleton()->event.emit("lines_changed_line", args);
@@ -766,12 +768,12 @@ void RoadLinesEditor::set_point_to_cursor()
Spatial *cursor = get_as_node<Spatial>(cursor_name);
Transform xform = cursor->get_global_transform();
int index = get_line_index();
rld->lines[current_line].points[index].origin = xform.origin;
rld->lines(current_line).points[index].origin = xform.origin;
Array args;
args.push_back(current_line);
EditorEvent::get_singleton()->event.emit("lines_changed_line", args);
update_line_geometry();
set_ui_point_position(rld->lines[current_line].points[index].origin);
set_ui_point_position(rld->lines(current_line).points[index].origin);
}
int RoadLinesEditor::get_line_index()
@@ -787,7 +789,7 @@ void RoadLinesEditor::move_cursor_to_point()
print_line("move_cursor_to_point");
RoadLinesData *rld = RoadLinesData::get_singleton();
int index = get_line_index();
Transform xform(Basis(), rld->lines[current_line].points[index].origin);
Transform xform(Basis(), rld->lines(current_line).points[index].origin);
set_cursor_position(xform.origin);
set_ui_cursor_position(xform.origin);
}
@@ -899,7 +901,7 @@ void RoadLinesEditor::update_ui()
get_as_node<Control>("%road_lines_buildings")->hide();
ItemList *lines_list = get_as_node<ItemList>("%lines_list");
List<String> line_keys;
rld->lines.get_key_list(&line_keys);
rld->get_lines_key_list(&line_keys);
List<String>::Element *e = line_keys.front();
lines_list->clear();
if (!re.is_valid())
@@ -942,7 +944,7 @@ void RoadLinesEditor::create_new_line_at_cursor(const String &line_name)
rline.pattern = 0;
Transform cursor_position(Basis(), get_cursor_position());
rline.points.push_back(cursor_position);
rld->lines[line_name] = rline;
rld->lines(line_name) = rline;
update_line_index_ui();
update_ui();
}
@@ -951,9 +953,8 @@ void RoadLinesEditor::delete_current_line()
{
RoadLinesData *rld = RoadLinesData::get_singleton();
String delete_line = current_line;
const String *k = rld->lines.next(&delete_line);
current_line = *k;
rld->lines.erase(delete_line);
current_line = rld->get_next_line(delete_line);
rld->erase_line(delete_line);
update_line_index_ui();
update_ui();
}
@@ -976,7 +977,7 @@ void RoadLinesEditor::set_point_position(const Vector3 &position)
{
RoadLinesData *rld = RoadLinesData::get_singleton();
int index = get_line_index();
rld->lines[current_line].points[index].origin = position;
rld->lines(current_line).points[index].origin = position;
Array args;
args.push_back(current_line);
EditorEvent::get_singleton()->event.emit("lines_changed_line", args);
@@ -1004,9 +1005,9 @@ void RoadLinesEditor::set_ui_point_position(const Vector3 &point_position)
void RoadLinesEditor::set_line_index(int index)
{
RoadLinesData *rld = RoadLinesData::get_singleton();
assert(rld->lines.has(current_line));
assert(index < (int)rld->lines[current_line].points.size());
Vector3 point_position = rld->lines[current_line].points[index].origin;
assert(rld->has_line(current_line));
assert(index < (int)rld->lines(current_line).points.size());
Vector3 point_position = rld->lines(current_line).points[index].origin;
Vector3 cursor_position = point_position;
set_cursor_position(cursor_position);
set_ui_cursor_position(cursor_position);
@@ -1227,7 +1228,7 @@ void RoadLinesEditor::save_data()
void RoadLinesEditor::update_current_line_metadata(const String &text)
{
RoadLinesData *rld = RoadLinesData::get_singleton();
assert(rld->lines.has(current_line));
assert(rld->has_line(current_line));
if (!text.begins_with("{"))
return;
String err_s;
@@ -1243,13 +1244,13 @@ void RoadLinesEditor::update_current_line_metadata(const String &text)
print_line("Invalid metadata type, should be Dictionary");
return;
}
rld->lines[current_line].metadata = v;
rld->lines(current_line).metadata = v;
}
String RoadLinesEditor::get_current_line_metadata() const
{
RoadLinesData *rld = RoadLinesData::get_singleton();
assert(rld->lines.has(current_line));
return JSON::print(rld->lines[current_line].metadata, "\t", true);
assert(rld->has_line(current_line));
return JSON::print(rld->lines(current_line).metadata, "\t", true);
}
void RoadLinesEditor::remove_generated_stuff()
{