А так ли нужны светофоры?

OpenTTD - современная игра, клон Transport Tycoon Deluxe с открытым исходным кодом, написанный на C и С++. Содержит ряд ключевых улучшений и возможность игры по сети. На данный момент это главное направление развития игры.

Модераторы: eraserkry, Mihamster, Smoky555, Группа модераторов

Сообщение vljak » Пт янв 19, 2007 12:08

ну тогда може ввести несколько типов рельсов, которые свои для каждого блока?
еще можно попробовать нечто вроде "ворот" отмечающих начало и конец блока (типа как пошлинные ворота на автодорогах)
:) кстати, тут у меня и родилась идейка о "пошлинных дорогах" проезд по которым платный, но ездить могут все (в т.ч. и компьютерные болванчики)
Вывоз из страны высококлассного программиста есть угроза ее национальной безопасности
vljak
Машинист
Машинист
 
Сообщения: 56
Зарегистрирован: Пт дек 08, 2006 05:33

Сообщение Q » Пт янв 19, 2007 13:08

Neko писал(а):...Для возможной окантовки границы управляющего блока я рассматривал варианты - одноклеточная станция, WayPoint, но они менее подходят для этих целей....

А если под это дело "испортить" пресигналы? Изначально они ведь для очень похожей цели служили.
Если красный зажигают, значит это кому-нибудь нужно
Аватара пользователя
Q
Диспетчер
Диспетчер
 
Сообщения: 174
Зарегистрирован: Вс апр 03, 2005 23:07
Откуда: Москва, Солнцево

Сообщение Neko » Пт янв 19, 2007 14:19

Q писал(а):А если под это дело "испортить" пресигналы?


Не-е-е. Пресигналы портить жалко. Они хорошо работают, и в игре есть много мест, где их можно будет использовать, даже, если появится новая управляющая структура.
То, что хорошо работает - ломать не можно.
Даже внутри новых управляющих блоков они нормально смогут работать, например, у Станции.

В принципе, чтобы наша клетка отличалась от всех остальных, достаточно одного бита. Но нам важно, чтобы это было видно на экране.
Может на нашей клетке с рельсой поиметь возможность где-нибудь в уголочке красную точку ставить, но это будет погано выглядеть, и опять кому-то рисовать это надо...
Револьвер - лучший аргумент в любом споре
Аватара пользователя
Neko
Президент
Президент
 
Сообщения: 750
Зарегистрирован: Чт окт 13, 2005 12:23
Откуда: Москва

Сообщение Quark » Пт янв 19, 2007 14:48

vljak писал(а):ну тогда може ввести несколько типов рельсов, которые свои для каждого блока?
еще можно попробовать нечто вроде "ворот" отмечающих начало и конец блока (типа как пошлинные ворота на автодорогах)
:) кстати, тут у меня и родилась идейка о "пошлинных дорогах" проезд по которым платный, но ездить могут все (в т.ч. и компьютерные болванчики)
виртуальные типы рельсов вроде уже вводят в упомянутом ранее патче, а по поводу графики для сигналов — есть же старый файл с PBS и файл из TTDP, а еще есть сделанная уже графика для speed signs — такие треугольные значки
    Изображение
        Изображение    Изображение    Изображение
        Изображение    Изображение    Изображение
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
ⓤⓐⓡⓚ ⓤⓢⓛⓞⓝ
Аватара пользователя
Quark
Президент
Президент
 
Сообщения: 628
Зарегистрирован: Пт сен 08, 2006 01:17
Откуда: Москва

Сообщение Neko » Пт янв 19, 2007 15:20

Quark писал(а): а по поводу графики для сигналов — есть же старый файл с PBS и файл из TTDP, а еще есть сделанная уже графика для speed signs — такие треугольные значки


Если использовать графику PBS сигналов, а вдруг в 0.5.0 они появятся или какая-нибудь новая МиниИН оживёт с PBS сигналами - тогда здорово очень плохо всё будет.
А про треугольнички я уже писал, что тырить чужую графику как-то не очень. И опять же конфликты начнутся, если два патча с разной обработкой этих треугольничков встретятся в одной сборке.
Револьвер - лучший аргумент в любом споре
Аватара пользователя
Neko
Президент
Президент
 
Сообщения: 750
Зарегистрирован: Чт окт 13, 2005 12:23
Откуда: Москва

Сообщение Quark » Пт янв 19, 2007 15:26

а как насчёт картинки в левом нижнем углу? можно таблички на них перекрасить в синий цвет, к примеру
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
ⓤⓐⓡⓚ ⓤⓢⓛⓞⓝ
Аватара пользователя
Quark
Президент
Президент
 
Сообщения: 628
Зарегистрирован: Пт сен 08, 2006 01:17
Откуда: Москва

Сообщение Neko » Пт янв 19, 2007 15:43

Quark писал(а):а как насчёт картинки в левом нижнем углу? можно таблички на них перекрасить в синий цвет, к примеру


А любой бы вариант подошёл - и синие таблички (только цвет не синий, а какой-любой яркий), либо из графики PBS сделать, заменив, скажем, красный и жёлтый цвета лампочек на синий и .... ну, какой лучше смотрится.
Здесь важно, чтобы с другими сигналами отличие было.

Но надо, чтобы кто-то этот grf сделал, а у нас это проблема.
Револьвер - лучший аргумент в любом споре
Аватара пользователя
Neko
Президент
Президент
 
Сообщения: 750
Зарегистрирован: Чт окт 13, 2005 12:23
Откуда: Москва

Сообщение Роман » Пт янв 19, 2007 18:10

Neko писал(а):В принципе, чтобы наша клетка отличалась от всех остальных, достаточно одного бита. Но нам важно, чтобы это было видно на экране.
Может на нашей клетке с рельсой поиметь возможность где-нибудь в уголочке красную точку ставить, но это будет погано выглядеть, и опять кому-то рисовать это надо...


А может просто какой-нить километровый столб или еще какую подобную хрень. Или нарисовать стрелочный светофор (это который таинственно подсвечивает в ночи синим глазом :) ).
Аватара пользователя
Роман
Начальник станции
Начальник станции
 
Сообщения: 97
Зарегистрирован: Сб июн 03, 2006 00:58

Сообщение Neko » Пт янв 19, 2007 19:47

У меня ещё одно предложение с просьбой высказаться.

Допустим вы сделали перекрёсток из двух двухколеек и обрамили этот перекрёсток обычными однонаправленными фонарями.
Это будет 8 штуков фонарей.
Теперь вы тыкаете мышой в ЛЮБОЙ один из этих восьми, появляется окошко с кнопкой "Настроить", вы и в неё тыкаете и всё - данный перекрёсток теперь будет работать как PBS.

Достоинства:
1) не надо нам париться с новой графикой для фонарей и проч.
2) Вид и тип фонаря не будет играть никакой рояли - это развяжет руки для множества разного использования.
3) С точки зрения программёра - это наиболее сладкий вариант - если у управляющего блока появится своё собственное окно - то такого туда можно напихать...

Недостатки:
1) Боюсь, что многим в падлу будет два лишних тыка мышой сделать, да надо ещё просто не забыть, что тыкнуть надо...
Револьвер - лучший аргумент в любом споре
Аватара пользователя
Neko
Президент
Президент
 
Сообщения: 750
Зарегистрирован: Чт окт 13, 2005 12:23
Откуда: Москва

Сообщение Роман » Сб янв 20, 2007 21:40

Вообще-то интресное предложение. А по поводу тыков - они же и так есть, просто надо еще и Ctrl удерживать - а так все одной рукой делается. Удобно.
Аватара пользователя
Роман
Начальник станции
Начальник станции
 
Сообщения: 97
Зарегистрирован: Сб июн 03, 2006 00:58

Сообщение Timas » Вт янв 23, 2007 07:29

НаписАть чтоли, что-нибудь движенческое. Вообще, я не программер, а если программер, то только под ДОС (когда-нибудь мир узнает своих героев!). Но вот мое мнение.

Про автоблокировку с подвижными границами РЦ. Штука хорошая, дает кодирование вслед идущим поездам в зависимости от скорости впереди идущих. Можно реализовать, но, скажем, только для MagLev.

Теперь про Михалычей, пути, светофоры. Я не знаком со структурами данных для игры, поэтому все выкладки - это лишь теория, а вам, программеры, творить.

1. Все светофоы делятся на светофоры автодействия и сваетофоры "полуавтоматического действия" (аки в метро). К первым относятся светофоры на перегонах и выходные с развязок, ко вторым - все остальные. Тип светофора определяется при его установке/укладке пути: если за светофором встречается хотя бы одно разветвление, то он - полуавтомат, нормальное положение его - закрытое. Это будет соответствовать положению ПТЭ о нормальном положении сигналов на станциях и перегонах и добавит видимого реализна. Минус - один, при строительстве пути придется перебирать все сигналы: А не стал ли какой-то полуавтоматом? Аналогично при разборке.

2. Многозначность автоблокировки определяется флагами, плюс добавляется одно поле. Если светофор - автомат, то NextSignal у него всего один, он его всегда видит и знает о его показании, в зависимости от этого делает свое на один бльше (пока не max).

3. Полуавтоматы открываются только тогда, когда к ним подходит поезд. Не к ним, разумеется, а на такое расстояние (по числу сигналов), когда открытие какого-то сигнала на максимально разрешающее показание требует открытия этого полуавтомата. При длине БУ в 4-5 клеток и длине поездов в 16 вагонов (вполне достаточно, я больше не использую) - нормально, сигнал откроется за десять клеток. Можно, опять же, как в метро, перед станцией сигналы ставить чаще.

4. Перед открытием сигнала-полуавтомата "автоматика", как и в реале, готовит маршрут (только "замыкает" не стрелки, а конкретные клетки). Концом маршрута является следующий попутный сигнал или тупик (в т.ч. и депо, но я депо для маневров не использую). Как в реале.

5. Выбор маршрута на развязке реализуется любым способом, главное - попасть, куда надо, не в этом суть.

6. Выбор пути приема на станции реализуется по принципу приоритета путей. Пути необходимо делить на главные и приемоотправочные. По главным - только выгрузка, по приемоотправочным - погрузка и/или сдвоенные операции. Приоритет путей или задается вручную (постройками определенного вида), или выбирается по принципу "смворачиваем или прямо?" (прямо - главный, сворачиваем - на п/о путь). Главные пути поездами под погрузку занимаются в последнюю очередь.

6.1. При этом можно реализовать такую штуку: если поезду надо после операций на станции ехать в обратном направлении, то он выбирает маршрут с пересечением встречного главного пути на боковой п/о путь с другой стороны. Тогда, выезжая со станции, он потом создаст меньше помех другим поездам, особо встречным. Но это не главное.

6.2. Выходные светофоры со станционных путей - однонаправленные. Но ставятся они в пределах станционных путей. Такие светофоры не учитываются в поиске маршрута, как враждебные. Хвост поезда может торчать и за этим светофором, на рассчет работы блокировки он не повлияет. Станционные ветофоры расставляются автоматически одновременно со строительством станции на последней (в сторону горловины) клетке, направлением в сторону этой самой горловины.

Теперь о событиях, ибо управляться это все должно событиями. Поскольку основной управляющий объект у нас - сигнал (TSignal), то все завязано на нем.

- Перекрытие любого сигнала - по проследованию первой ПЕ поезда за сигнал.
- Открытие сигнала-автомата - по проследованию его TSignal.Next последней ПЕ поезда (управляется через TSignal.Prev проследуемого сигнала).
- Открытие сигнала-полуавтомата - при запросе на его открытие от его TSignal.Prev, переданного "по цепочке" (длина цепочки зависит от значности АБ).
- Разделка маршрута по стрелкам - по занятию пути первой ПЕ поезда.

Враждебные маршруты, без них - никак. При невозможности удовлетворить запрос на маршрут он (маршрут) "загоняется в стек". Т.е., если уже известен конец маршрута (тот самый Next), тогда сигнал просто банально ждет условий, при которых этот маршрут можно будет установить. Или Next неизвестен (на станции много занятых путей), тогда поиск возможного маршрута производится при каждой итерации. Это немного отожрет времени, но немного. Да, забыл: при накоплении враждебных маршрутов первыми реализуются маршруты "на выход" - в сторону сигналов-автоматов.

Это все при грамотной организации, даст не только одновременныц прием и отправлении по параллельным маршрутам, но и поиск вариантного маршрута по горловине/развязке. Плюс грамотный оборот/реверсирование по станциям (однонапрвленные станции уже особо и не нужны будут).
Аватара пользователя
Timas
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 12
Зарегистрирован: Вс дек 31, 2006 14:46

Сообщение Oleg » Вт янв 23, 2007 10:14

Звучит очень привлекательно. Боюсь, правда, что до такого реализма игра пока не доросла - и не только OpenTTD, но и другие тоже.
С уважением,
Администратор сайта Transport Tycoon навсегда!
Аватара пользователя
Oleg
Администратор
Администратор
 
Сообщения: 2336
Зарегистрирован: Чт сен 02, 2004 11:49
Откуда: Москва

Сообщение Neko » Вт янв 23, 2007 10:23

2Timas

Данные предложения могли бы быть рассмотрены как вариант реализации в случае, если бы мы начинали разработку Опена с нуля.

При сушествующем же положении, когда у нас уже есть как минимум две системы сигналов - обычная и пресигналы, а третья система PBS, весьма насущная, но до конца не доделанная, сооружать поверх этого новую систему, которая ничем не соприкасается с уже существующими, на мой взгляд, было бы весьма опрометчивым.
Для реализации подобных идей следует полностью выкорчевать существующие системы сигналов из основного кода и кода YAPF, и только потом приступить к реализации этих идей.
Если это делать силами xUSSR, то мы вынуждены будем полностью отказаться от последующих разработок основных забугорных создателей игры, ибо наши разработки невозможно будет слить в единое.
Если же мы хотим выдеть эти идеи в основном коде игры, то, в первую очередь, надо выступить с этими идеями на буржуйском форуме, а самое главное, заинтересовать главных разработчиков настолько, чтобы они бросили все свои дела, полностью раздраконили уже существующую игру, внесли туда эту систему светофоров, фактически полностью переписав основной костяк игры.
Насколько это реально - будет видно уже по первым откликам на буржуйском форуме.
Давайте подождём этого момента.
Револьвер - лучший аргумент в любом споре
Аватара пользователя
Neko
Президент
Президент
 
Сообщения: 750
Зарегистрирован: Чт окт 13, 2005 12:23
Откуда: Москва

Сообщение Quark » Ср янв 24, 2007 01:41

Хочу заметить, что одним из основных мотивов разработки YAPF было решение проблем быстродействия, а описанный выше алгоритм потребует огромного количества вычислительных ресурсов и памяти. Система событий и стек для каждого светофора это не те вещи, которыми можно разбрасываться.
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
ⓤⓐⓡⓚ ⓤⓢⓛⓞⓝ
Аватара пользователя
Quark
Президент
Президент
 
Сообщения: 628
Зарегистрирован: Пт сен 08, 2006 01:17
Откуда: Москва

Сообщение Timas » Ср янв 24, 2007 22:36

Это были лишь мои соображения. На буржуйские формуиы я не хожу, ибо их импортного языка не знаю. Просто я высказал свои соображения, как бы я стал решать эту проблему.

В наст.вр. я занимаюсь разработкой и консультирую ряд проектов, связанных с работой ж.д. автоматики (диспетчерские тренажеры etc.), поэтому исходил из работы реальных систем. Т.б., что программную имитацию их работы мне делать приходилось, пусть и под ДОС.

Что касается стека для маршрутов - его можно заменить флагом, что поезд ожидает открытия этого сигнала. Главное - добавить поля, связывающие этот сигнал с соседними вперед и назал.

А вообще - вам решать, не мне. Дерзайте!
Аватара пользователя
Timas
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 12
Зарегистрирован: Вс дек 31, 2006 14:46

Пред.

Вернуться в Общие вопросы по OpenTTD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

cron