Форум создан в 2008 году
[ Главная ] [ Крым 2.2, с сигналкой SU - Страница 3 - FORUM ] [ Регистрация ] [ Вход ]
· Суббота, 21.12.2024, 20:18 · Вы вошли как Гость Новые сообщения · Участники · Правила форума · Поиск ·
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Крым 2.2, с сигналкой SU
TRam_Дата: Среда, 20.03.2019, 18:51 | Сообщение # 31
Группа: проверенные
Сообщений: 22
Статус: Offline
Либо можно сделать 1 массив светофоров, и тогда для переключения в противоположном от светофора направлении давать команду


Код
PostMessage(Router.GetGameObject("signal_1"), "Browser-URL", "live://spanTrackFromMe", 0.0);


а для направления в сторону светофора, как выше

Код
PostMessage(Router.GetGameObject("signal_1"), "Browser-URL", "live://spanTrackFromOther", 0.0);


при этом естественно на перегоне поездов не должно быть.
 
ДобрыйДата: Четверг, 21.03.2019, 12:55 | Сообщение # 32
Чеширский кот
Группа: администраторы
Сообщений: 3531
Статус: Offline
Цитата TRam_ ()
Если боты в том скрипте сами ищут светофоры

Да, так и есть - в скрипте для Южного Крыма: имён светофоров в скрипт не забито, тупо отправляется сообщение всем найденным светофорам впереди на заданной дистанции. В такой ситуации не будет ли глупым одновременно всем посылать команду на переключение перегона?
А для основной карты - да, там имена светофоров как переменная для роутера. Такой вариант подойдёт.
 
TRam_Дата: Пятница, 22.03.2019, 19:13 | Сообщение # 33
Группа: проверенные
Сообщений: 22
Статус: Offline

Цитата
В такой ситуации не будет ли глупым одновременно всем посылать команду на переключение перегона?


В такой ситуации надо посылать команду входному, который сонаправлен поиску.

А что всем светофорам-то посылается? Можно проверить тип светофора, чтобы маневровым и проходным ничего не посылать

MapObject next_obj = SearchNext();
Signal next_signal = cast<Signal>next_obj;
if(next_signal and (next_signal.GetProperties().GetNamedTagAsInt("GetSignalType()", 0) & (2+4+8)) )        // для входного - (.... & 2)
{
/// тут собственно посылка или не посылка сообщения входному/выходному/маршрутному
}


Сообщение отредактировал TRam_ - Пятница, 22.03.2019, 19:15
 
ДобрыйДата: Суббота, 23.03.2019, 07:55 | Сообщение # 34
Чеширский кот
Группа: администраторы
Сообщений: 3531
Статус: Offline
Да, так понятно, попробую smile
 
ДобрыйДата: Вторник, 16.04.2019, 11:53 | Сообщение # 35
Чеширский кот
Группа: администраторы
Сообщений: 3531
Статус: Offline
Долго экспериментировал. Входной определяется правильно, но мессейдж ему перегон не переключает, только если открыть его браузер.
  void SetSpan(Train train){                                                   // Функция переключения направления перегона

         Vehicle v=train.GetVehicles()[0];

         GSTrackSearch GSTS = v.BeginTrackSearch(true);

         MapObject obj = GSTS.SearchNext();

         while(obj) {

                if (GSTS.GetFacingRelativeToSearchDirection() and obj.isclass(Signal) and obj.GetProperties().GetNamedTagAsInt("GetSignalType()", 0)&2) {

                         sig=cast<Signal>obj; Interface.Print ("vhodnoi="+sig.GetName());

                         PostMessage(sig, "Browser-URL", "live://spanTrackFromOther", 0.0); break;

                                                                                                                                                           }

                obj = GSTS.SearchNext();

                      }

                                                                }
 
TRam_Дата: Понедельник, 22.04.2019, 00:46 | Сообщение # 36
Группа: проверенные
Сообщений: 22
Статус: Offline
Эх, забыл что эта функция работает только когда браузер включен, и его же обновляет...

Предлагаю попробовать вот так:

Код

  void SetSpan(Train train){                    // Функция переключения направления перегона

         Vehicle v=train.GetVehicles()[0];

         GSTrackSearch GSTS = v.BeginTrackSearch(true);

         MapObject obj = GSTS.SearchNext();

         while(obj) {

                if (GSTS.GetFacingRelativeToSearchDirection() and obj.isclass(Signal))  {
                          Soup signal_soup = obj.GetProperties();

                         if(signal_soup.GetNamedTagAsInt("GetSignalType()", 0)&2) {
                    String sig_name = soup.GetNamedTag("privateName") + "@" + soup.GetNamedTag("stationName");
                    Interface.Print ("vhodnoi ="+sig.GetName()+" name " + sig_name);

                    PostMessage(obj, "SetSpanDirection", sig_name, 0.0); break;
                         }
                }
                obj = GSTS.SearchNext();
         }
  }
 
ДобрыйДата: Вторник, 23.04.2019, 15:28 | Сообщение # 37
Чеширский кот
Группа: администраторы
Сообщений: 3531
Статус: Offline
Я правильно понял, что PostMessage(obj, "SetSpanDirection", sig_name, 0.0);
переключает перегон на противоположное от текущего направления?
А как быть, если перегон уже в правильном направлении выставлен?
 
TRam_Дата: Пятница, 26.04.2019, 03:27 | Сообщение # 38
Группа: проверенные
Сообщений: 22
Статус: Offline
Код
if (!GSTS.GetFacingRelativeToSearchDirection() and obj.isclass(Signal))


искать светофор противоположного направления...
 
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:

Copyright Dobryi © 2024