Donate with PayPal button New New

+ Ответить в теме
Страница 1 из 5 1 2 3 ... ПоследняяПоследняя
Показано с 1 по 10 из 41

Тема: Fixed-стрелки

  1. #1
    Пользователь Аватар для Nemo
    Регистрация
    10.03.2010
    Страна
    Возраст
    32
    Сообщений
    834

    По умолчанию Fixed-стрелки

    Итак, эта тема создана! Некоторые совершенно напрасно полагают, что поддержка безлеверных стрелок якобы может прекратиться в следующих версиях игры. К таким людям вопрос: если останется поддержка фикседтреков вообще, то с чего бы кому-то убирать поддержку стрелок в них? Вообще, фиксед-стрелки созданы вовсе не для того, чтобы делать крестовины и подвижные остряки, а, как и все фиксед-трэки, для того чтобы иметь длину и форму по госту. Можно вообще не делать видимую мешь для этой стрелки, оставить только точки привязки для рельсов и использовать тэг "useadjoiningtracktype 1". Можно делать стрелки с процедурными рельсами без собственной анимации. Анимация - это уже наш внешний костыль, и её поддержку, конечно же, тоже никто не сможет убрать, потому что это скрипты.

    Я провёл некоторые эксперименты, сделал опытные образцы. По моим понятиям, вполне себе реально построить на таких стрелках любую маршрутизацию, только она, само собой, должна учитывать существование этих стрелок. Я предлагаю (или даже навязываю) свою помощь в доделке нашей сигналки, но нужно знать, что именно нужно уметь делать.

    Если говорить о поддержке любого SceneryWithTrack, то в общем случае всё выглядит так:
    Цитата Сообщение от amd103 Посмотреть сообщение
    Proof of concept в студию.
    Если хотите доказать, что фиксовые стрелки работают, покажите что:
    1. Можно поймать Junction, Enter или аналог
    2. Можно поймать Junction, Toggled или аналог
    3. Можно встретить ее в GSTrackSearch и пойти по всем отклонениям
    4. Можно однозначно идентифицировать, сохранить в супе и загрузить обратно
    5. Можно пробежать по всем в одном общем списке всех таких стрелок, хоть нашем, хоть игровом
    1. Да
    2. Да
    3. В GSTrackSearch встречается SceneryWithTrack, от него получаются все привязанные стрелки. Перебираются все варианты направлений стрелок (если стрелок 4, то 2^4=16 вариантов) и GSTrackSearch каждый раз выходит из начальной точки куда глаза глядят. Так мы пройдём по всем отклонениям.
    4. Во-первых, сам SceneryWithTrack можно идентифицировать по ID, так как он - MapObject и поэтому GameObject. Во-вторых, каждая привязанная к нему JunctionBase является на самом деле JunctionBaseGameObject. Можно кастовать, можно использовать GameObject JunctioBase::GetGameObject(). Ну а сохранять всё это в супе не составляет труда.
    5. Пробежать элементарно, если есть список А сформировать его можно, стартуя GSTrackSearch от светофоров и ходя по всем отклонениям, см. пункт 3.

    ---------------------------------

    Разработка и внедрение описанного требует времени и сил. Но при некоторых условиях всё можно сделать по-бырику. Если мы договоримся о некоторой унификации и , например, поддержке только специальных SceneryWithTrack, наследуемых от нашего класса и с нужными тэгами в конфиге, или иной способ, то всё ещё проще. Я могу предложить такую концепцию:

    - Не вводится никаких специальных SceneryWithTrack, поддерживаются все.

    - Картостроитель в редакторе размещает на single-track стороне каждого соединения путей SceneryWithTrack-объекта специальный левер.

    - Этот левер является класса, пусть JunctionLinked isclass Junction. В этом классе существует объект JunctionBase LinkedJunctionBase и процедура JunctionBase GetAssotiatedJunctionBase(), которая выдаёт соответствующую стрелку из скенери. Также в этом классе есть процедуры int GetDirectionLinked(), SetDirectionLinked(int) и другие аналоги, которые вызывают соответствующие функции в ассоциированной стрелке.

    - Маршрутизация, работая с Junction (встречая Junction в GStrackSearch или перебирая все Junction в каком-либо списке), всегда проверяет Junction на isclass JunctionLinked. Если да, то вместо него работать с JunctionLinked::GetAssotiatedJunctionBase() либо с GetDirectionLinked(), SetDirectionLinked() и аналогами из класса JunctionLinked. Маршрутизация хранит этот левер в своих базах, списках, супах, как обычное Junction. World::GetJunctionList() также будет его возвращать.

    - Откуда левер возьмёт свой объект LinkedJunctionBase? Поиск делается элементарно, только один раз при первом вызове любой функции этого класса. Можно сделать поиск и в Init(), но не вижу смысла затягивать этим загрузку карт.

    - Если SceneryWithTrack анимирован и хотел бы визуально соответствовать направлению своих стрелок, то он может ловить сообщения "Junction" "Toggled" или быть специального класса, скажем, SceneryWithJunctions. Наш левер, если просечёт принадлежность скенери к SceneryWithJunctions, вызовет в нём специально объявленную процедуру StateChanged(). Чтобы вообще устранить из скенери handler-ы сообщений (если в этом имеется выигрыш для производительности), то маршрутизация должна работать со стрелкой только через наш левер класса JunctionLinked, который всегда будет вызывать StateChanged() в скенери класса SceneryWithJunctions.


    Приведённая концепция чем хороша:
    - При размещении стрелок на карте не нужно прокладывать невидимые пути, остаётся только разместить левер (который будет не лишним в TANE, ведь он сможет ещё и содержать теги для раскачки поезда при проезде стрелки, это одна из фич Тани). Из-за отсутствия невидимых путей стрелки можно без страха и упрёка двигать и поворачивать.
    - Стрелки липнут друг к другу, поэтому вообще не нужно при добавлении на карту даже поворачивать стрелку, её можно сразу соединить или строго выровнять по предыдущей. TSM стрелки у меня не обладают этим свойством, думаю потому что у них kind "buildable" вместо "fixed track".
    - Поддержка этой системы маршрутизацией делается естественным образом и очень быстро.
    - Если Scenery со стрелками наследован от SceneryWithJunctions, то можно обеспечить, чтобы наш левер считывал ещё и информацию о том, переведена стрелка на отклонение или прямо. В этом случае отпадает необходимость в маркерах отклонения. Но тогда и маршрутизация должна поддерживать этот момент.

    По описанному методу уже есть наработки - собственно, левер, и несколько стрелок, в том числе английская. TrackSearch всё находит, проблем не заметил. Дам потестить.

    ----------------------------------------

    Как я уже говорил, считаю, что маршрутизация могла бы поддерживать вообще любые SceneryWithTrack и без вспомогательных леверов. Но для этого нужно придумать и реализовать всякие алгоритмы, чем я мог бы заняться, если бы получил ТЗ от автора. А вышеописанную схему можно реализовать в короткие сроки.
    Последний раз редактировалось Nemo; 17.09.2014 в 16:31.

  2. Сказали спасибо: (7)


  3. #Trainz
    Реклама
    Регистрация
    Постоянная
    Возраст
    2010
    Сообщений
    Много

    Donate with PayPal button N3v New New

     

  4. #2
    Пользователь Аватар для Эрендир
    Регистрация
    13.01.2010
    Страна
    Адрес
    Я Бот, живу в сети :)
    Возраст
    39
    Сообщений
    6,303

    По умолчанию

    Спасибка за проделанную работу. В остальном пока не заинтересовал. В любом случае, пока не будет единого механизма получения списка всех стрелок на карте (именно JunctionBase) по типу JunctionBase[] GetJunctionList(void), я даже слышать не хочу вот это
    Цитата Сообщение от Nemo Посмотреть сообщение
    Поддержка этой системы маршрутизацией делается естественным образом и очень быстро.
    Поскольку это достаточно громкое заявление

  5. #3
    Пользователь Аватар для Nemo
    Регистрация
    10.03.2010
    Страна
    Возраст
    32
    Сообщений
    834
    Автор

    По умолчанию

    Кстати сказать, даже в общем случае работа со Scenery, в которых есть только одна стрелка, достаточно тривиальна и может идти по упрощённому алгоритму.


    Цитата Сообщение от Эрендир Посмотреть сообщение
    Поскольку это достаточно громкое заявление
    А ты не прочитал ничего небось. За спасибку спасибо.

    Цитата Сообщение от Эрендир Посмотреть сообщение
    пока не будет единого механизма получения списка всех стрелок на карте (именно JunctionBase) по типу JunctionBase[] GetJunctionList(void)
    Причём здесь это? Концепцию я описал. Для неё достаточно Junction[] GetJunctionList()
    Последний раз редактировалось Nemo; 17.09.2014 в 16:51.

  6. #4
    Пользователь Аватар для TRam_
    Регистрация
    22.09.2009
    Возраст
    33
    Сообщений
    16,432

    По умолчанию

    Основная проблема - это то, что далеко не до всех стрелок можно добраться, только
    Цитата Сообщение от Nemo Посмотреть сообщение
    стартуя GSTrackSearch от светофоров и ходя по всем отклонениям
    По поводу "привязного" левера проблема кстати та же. Он не добавляется в список стрелок.

  7. Сказали спасибо: (3)


  8. #5
    Пользователь Аватар для Эрендир
    Регистрация
    13.01.2010
    Страна
    Адрес
    Я Бот, живу в сети :)
    Возраст
    39
    Сообщений
    6,303

    По умолчанию

    Nemo, я все прочитал. Во первых, как уже заметил Tram_, левер ссылка в список так же не попадает, к тому же - это очередной ненужный костыль.

  9. #6
    Пользователь Аватар для TRam_
    Регистрация
    22.09.2009
    Возраст
    33
    Сообщений
    16,432

    По умолчанию

    Эрендир, я уже давно мечтаю заставить аурановцев сделать фиксед-стрелку, на которую отдельно добавляется левер.

  10. #7
    Пользователь Аватар для Эрендир
    Регистрация
    13.01.2010
    Страна
    Адрес
    Я Бот, живу в сети :)
    Возраст
    39
    Сообщений
    6,303

    По умолчанию

    TRam_, их бесполезно что-то заставлять. Вот если бы ты вложил на КС 8000, то тогда бы заставил, а так на халяву они ничего делать не хотят.

  11. Сказал спасибо:


  12. #8
    Пользователь Аватар для Nemo
    Регистрация
    10.03.2010
    Страна
    Возраст
    32
    Сообщений
    834
    Автор

    По умолчанию

    Цитата Сообщение от Эрендир Посмотреть сообщение
    как уже заметил Tram_, левер ссылка в список так же не попадает
    Да, проверил.


    Цитата Сообщение от Эрендир Посмотреть сообщение
    очередной ненужный костыль.
    По-моему, стрелки с невидимыми рельсами, как сейчас - куда больший костыль. И ничего, пользуемся.


    Цитата Сообщение от TRam_ Посмотреть сообщение
    далеко не до всех стрелок можно добраться, только стартуя GSTrackSearch от светофоров и ходя по всем отклонениям
    А какой интерес для маршрутизации представляют стрелки, до которых нельзя добраться от светофоров?

    ---------- Сообщение добавлено в 18:15 ---------- Предыдущее сообщение размещено в 18:12 ----------

    У аурановцев ещё будет фича Interlocking Towers, вот интересно, как они со всем этим поступят.

  13. #9
    Пользователь Аватар для Эрендир
    Регистрация
    13.01.2010
    Страна
    Адрес
    Я Бот, живу в сети :)
    Возраст
    39
    Сообщений
    6,303

    По умолчанию

    Цитата Сообщение от Nemo Посмотреть сообщение
    куда больший костыль. И ничего, пользуемся.
    Так от костылей нужно уходить, а не изобретать новые

    Цитата Сообщение от Nemo Посмотреть сообщение
    А какой интерес для маршрутизации представляют стрелки, до которых нельзя добраться от светофоров?
    Посмотри мою мультиплеерную маршрутизацию. Вот там они представляют интерес, поскольку ими диспетчер управляет через пульт.

  14. #10
    Пользователь Аватар для amd103
    Регистрация
    08.01.2010
    Страна
    Адрес
    Ульяновск
    Возраст
    32
    Сообщений
    1,022

    По умолчанию

    Не уверен, что CustomJunction isclass Junction сработает. Нужен пруф.
    Да и смысл, все равно методы ты не перегрузишь, АПИ будет новым и с классическими стрелками не взаимозаменяем. Зачем тогда вводить эту новую сущность? Проще будет работать с сразу со SceneryWithTrack.

    Цитата Сообщение от Nemo Посмотреть сообщение
    который будет не лишним в TANE, ведь он сможет ещё и содержать теги для раскачки поезда при проезде стрелки, это одна из фич Тани
    Теги для раскачки в конфиге левера?


    3. Можно встретить ее в GSTrackSearch и пойти по всем отклонениям
    НЯП, JunctionBase GSTrackSearch.GetObject() не возвращает?

    P.S. GetAssotiatedJunctionBase -> GetAssociatedJunctionBase.
    Последний раз редактировалось amd103; 17.09.2014 в 17:27.

+ Ответить в теме
Страница 1 из 5 1 2 3 ... ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения