Wowan писал(а):А так получается 9 ливрей с разными годами доступности (естественно, если ливрея уже недоступна, то и локи в такой ливрее строиться не должны, поэтому переоборудование в устаревшие ливреи надо запрещать).
Всё ещё непонятно, как программировать.
Во-первых, как понять, какая ливрея устарела и недоступна?
Во вторых, существует подвох. Ливрея задаётся числом (cargo_subtype) от 0 до N. Представим, что у нас 2 диапазона лет: первый и за ним второй. На первом есть 3 ливреи, мы используем число от 0 до 2. На втором - 2 ливреи. И тут у нас выбор. Мы можем добавить эти 2 ливреи к списку и получим число от 0 до 4. Мы можем заменить 3 ливреи на 2, но при этом число == 2 будет указывать в никуда. Т.е. для замены требуется такое же кол-во ливрей.
Вариант с 2ТЭ10, когда в начале у него 3 ливреи, а с 1972 года - одна принудительная реализован исключением cargo_subtype из анализа, но переменная, содержащая 0 или 1 или 2 остаётся.
В случае, когда 3 ливреи меняются на 2, исключать cargo_subtype уже нельзя. И возникает вопрос, что будет соответствовать числу 2 старого диапазона в новом.
Само собой, в коде
перещёлкнуть cargo_subtype нельзя, это делается только из интерфейса переоборудования.
Wowan писал(а):Перекрывающиеся диапазоны, по-моему, ничем не мешают? В 1965-м могут быть еще и ранние ливреи, и поздние, чем плохо?
Для перекрывающихся диапазонов нельзя сделать замену, заменять можно только непересекаемые диапазоны.
Я вот думаю, что надо бы завести некий документ, где бы фигурировали модели ПС, их наборы видов с указанием лет, названий и правилами использования. Чтобы было видно, где добавление ливрей, где замена, где принудительная замена. Условия наступления.