17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-06 00:02:26 +01:00

refactor(editor): a signal head tells the next one shows stop by its chambers alone, an orange light above the red one, not by the events of its template reading the next signal, which the templates of the old sceneries lack

This commit is contained in:
maj00r
2026-10-22 18:54:54 +02:00
parent a811486b53
commit 9c124b23bb
6 changed files with 11 additions and 19 deletions

View File

@@ -1920,7 +1920,6 @@ class editor_mode : public application_mode, private editor_track::observer, pri
bool plate{false};
bool linked{false};
std::vector<int> speeds;
bool informs{false};
};
struct signal_spot
{

View File

@@ -264,7 +264,7 @@ bool editor_mode::signal_scan(bool const Wait)
if (parameter.id == 7)
item.linked = true;
}
editor_includes::signal_speeds(entry.file, item.speeds, item.informs);
editor_includes::signal_speeds(entry.file, item.speeds);
tool.templates.push_back(std::move(item));
}
std::sort(tool.templates.begin(), tool.templates.end(), [](signal_template const &A, signal_template const &B) {
@@ -912,7 +912,7 @@ bool editor_mode::signal_heads(std::vector<signal_head> &Heads, bool const Wait)
if (item.lamps.empty())
continue;
auto const kind{kind_index(item.kind)};
Heads.push_back({item.file, item.name, item.kind, item.mount, item.lamps, item.speeds, item.informs, kind >= 0 && m_signal.chosen[kind] == index});
Heads.push_back({item.file, item.name, item.kind, item.mount, item.lamps, item.speeds, kind >= 0 && m_signal.chosen[kind] == index});
}
return true;
}

View File

@@ -302,15 +302,16 @@ bool has_speed(std::vector<int> const &Speeds, int const Speed)
return std::find(Speeds.begin(), Speeds.end(), Speed) != Speeds.end();
}
// the template has the lights the need takes: a lower orange one for a lower speed, a strip for 60 and 100, Ie-1 § 7, two orange
// ones to show a lower speed with the next signal at stop
// the template has the lights the need takes, by its chambers: an orange one to tell the next signal shows stop, a lower orange one
// for a lower speed, a strip for 60 and 100 by the speeds its events set, Ie-1 § 7, two orange ones to show a lower speed with the
// next signal at stop
bool shows(signal_head const &Head, head_need const &Need)
{
auto const &lamps{Head.lamps};
auto const count = [&](char const Lamp) { return std::count(lamps.begin(), lamps.end(), Lamp); };
if (count('z') == 0 || count('c') == 0 || (Need.white && count('b') == 0))
return false;
if (Need.informs && (false == Head.informs || count('p') == 0))
if (Need.informs && count('p') == 0)
return false;
if (Need.speeds.empty())
return true;

View File

@@ -115,7 +115,6 @@ struct signal_head
std::string mount;
std::string lamps; // its chambers from the top: z green, c red, p orange, b white, n blue, x blind
std::vector<int> speeds; // of the signal itself, km/h: -1 the highest allowed, 20 the substitute signal
bool informs{false}; // it tells the next signal shows stop
bool chosen{false}; // the Signals tool places it for its kind
};
// one step of the history of the signalling: signals placed, standing ones renamed, other templates placed with them, the values