Информация: Уважаемые посетители! В течение нескольких месяцев на форуме существовала проблема с регистрацией новых пользователей, о которой администрации стало известно недавно. Если вы ранее пытались зарегистрироваться на форуме, но не получили на ваш e-mail письмо с ссылкой для подтверждения регистрации, просим вас зарегистрироваться повторно. Приносим извинения за доставленные неудобства. Если вы все еще испытываете проблемы с регистрацией на форуме, обратитесь за помощью на e-mail: mr.angelo@railroadsim.net

Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль
Блог: Просмотр блога (4)
Архивы
- Май 2012
+ Февраль 2012
+ Январь 2011
+ Октябрь 2010
Поиск в блогах

TargetTrigger

Постоянная ссылка kemal 16.01.2011, 18:45

Как известно, в Trainz'е триггеры реагируют на поезд целиком. Однако, не всегда это удобно. Иногда требуется более точное позиционирование. Например, если мы имеем дело с датчиком, висящем на контактной сети и реагирующим на пантограф. Именно эта ситуация и вдохновила меня на создание такого триггера. Я назвал его TargetTrigger. Принцип его действия основан на GSTrackSearch: триггер спрашивает у вагона расположение точек и следит за положением вагона. При пересечении точкой триггера вызывается событие ttOnEvent. Если же на триггер наедет поезд, в котором ни один вагон не поддерживает эту технологию, то вызывается событие ttOnDefaultEvent.

Демонстрациооный триггер и файлы для своих разработок можно скачать здесь: http://trainz.kemal.tu2.ru/file.php?id=5

Рассмотрим подробнее его использование.
  • TargetTriggerDemo.cdp - триггер, который просто сообщает, что на него наехали. Можно использовать как пример.
  • TargetTrigger.gs - собственно, класс, реализующий технологию. Для создания своего триггера этот файл надо положить в папку дополнения и наследовать свой скрипт от него:
    Код: Выделить всё
    include "TargetTrigger.gs"

    class MyTrigger isclass TargetTrigger{

       public void Init(void){
          inherited();
          ttSetType("type");
       }
    };
    Для начала работы нужно вызвать метод void ttSetType(string s), который устанавливает тип точек, на которые будет реагировать триггер.
  • ttVehicle.gse - класс, осуществляющий поддержку со стороны вагонов (так же нужно класть и к тригграм для возможности кастования). Зашифрован специально от шаловливых ручек, т.к. малейшие изменения могут помешать работе. Вот объявление этого класса:
    Код: Выделить всё
    class ttVehicle{
       public float[] ttGetPoints(string type);
       void ttAddPoints(string type, float[] value);
       void ttRemovePoints(string type);
       string[] ttGetTypes();
       public void Init(void);
    };

    Для инициализации нужно назначить точки, например так:
    Код: Выделить всё
    include "Vehicle.gs"
    include "ttVehicle.gs"

    class MyVehicle isclass Vehicle, ttVehicle{
       public void Init(void){
          inherited();
          float[] f=new float[0];
          f[0]=3.675;
          ttAddPoints("pant", f);
       }
    };

upd: обновил интерфейс. Теперь обработчику сообщается ещё и направление вагона относительно триггера.
Скоро опубликую дополнение, в котором это используется.
Последний раз редактировалось kemal 25.01.2011, 17:53, всего редактировалось 1 раз.

<kuid:216981:******>
куид.ру не нужен
2 комментариев 184778 просмотров
Комментарии

Re: TargetTrigger

Постоянная ссылка Эрендир 22.11.2011, 10:14

Не самая лучшая реализация решения. Лучше отказаться от множественого наследования. Да реализовать это можно вообще без скрипта со стороны Vehicle. Лучше пользоваться расширением конфига. И проще, и лучше.
Аватара пользователя
Эрендир
 
Сообщения: 121
Зарегистрирован: 04.05.2005, 16:15
Откуда: От туда...
Играю в: Auran Trainz
Имя: Алексей
Блог: Просмотр блога (0)

Re: TargetTrigger

Постоянная ссылка kemal 02.02.2012, 02:11

За идею с конфигом большое спасибо! Может быть, когда-нибудь вернусь к этим триггерам...
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль
Блог: Просмотр блога (4)

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

Зарегистрированные пользователи: Bing [Bot], Google [Bot], Mail.Ru [Bot], Majestic-12 [Bot], Yandex [Bot]