скрипт+сигналка

Обсуждение общих вопросов по игре

Re: скрипт+сигналка

Сообщение Combine » 14.05.2008, 16:14

к стати класс вагона (Vehicle) прямой потомок (в третьем поколении) класса Mesh, так что Vehicle является мешем
Из чего я делаю вывод, что как бы далеко ни была ед-ца ПС, она обрабатывается "по полной"?

метод Sleep есть практически во всех классах, но работает он действительно только в thread-методах
Т.е. не в поточных функциях он вообще принципиально не работает?
Аватара пользователя
Combine
 
Сообщения: 537
Зарегистрирован: 23.10.2006, 09:47
Откуда: Московская область
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Александр

Re: скрипт+сигналка

Сообщение TRam_ » 14.05.2008, 20:37

Combine писал(а):
к стати класс вагона (Vehicle) прямой потомок (в третьем поколении) класса Mesh, так что Vehicle является мешем
Из чего я делаю вывод, что как бы далеко ни была ед-ца ПС, она обрабатывается "по полной"?


по видимому, да

метод Sleep есть практически во всех классах, но работает он действительно только в thread-методах
Т.е. не в поточных функциях он вообще принципиально не работает?


надо проверить. Например, вписать его в "Init", или "Update". Просто мне кажется, что "Sleep" и "Wait on" предназначены для "останова" своей процедуры, прописаной tread (это слово переводится как походка, поступь, шагание), причём 1 - просто "остановка", а 2 - "остановка с возобновлением по внешнему условию", которое [условие] называется "message", для правильной обработки должно быть послано "извне"

Ну а насчёт процедуры попробуй так:

public tread void lock_path(ExtPermit blocking_permit)
{
int i;
...
for(i=0;i<vNumJunctions;i++)
vJunctions[i].get_junction().SetDirection(vDirs[i]); // existence is checked above

Sleep(1);
check_path();
}
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: скрипт+сигналка

Сообщение oleg68 » 14.05.2008, 20:52

agmike писал(а): oleg68 Не забудь, sleep должен вызыватся только в отдельном потоке
Важно! sleep - это метод в GameObject, то есть класс Path должен GameObject наследовать

Нет, этот класс - не наследует GameObject. Он соответствует одному маршруту, описанному в PathRule. Что будет, если его сделать наследником GameObject, я не берусь предсказать.
Аватара пользователя
oleg68
 
Сообщения: 193
Зарегистрирован: 06.07.2007, 12:36
Откуда: Санкт-Петербург
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: скрипт+сигналка

Сообщение Combine » 14.05.2008, 21:18

tread
Thread=нить. Какое шагание еще?
Аватара пользователя
Combine
 
Сообщения: 537
Зарегистрирован: 23.10.2006, 09:47
Откуда: Московская область
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Александр

Re: скрипт+сигналка

Сообщение oleg68 » 14.05.2008, 22:39

TRam_ писал(а):Ну а насчёт процедуры попробуй так:

public tread void lock_path(ExtPermit blocking_permit)
{
int i;
...
for(i=0;i<vNumJunctions;i++)
vJunctions[i].get_junction().SetDirection(vDirs[i]); // existence is checked above

Sleep(1);
check_path();
}

Поставил Sleep(1); Падает. Если комментирую Sleep, то работает.
Аватара пользователя
oleg68
 
Сообщения: 193
Зарегистрирован: 06.07.2007, 12:36
Откуда: Санкт-Петербург
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: скрипт+сигналка

Сообщение TRam_ » 14.05.2008, 22:44

Важно! sleep - это метод в GameObject, то есть класс Path должен GameObject наследоваться
- можно описание PatchRule? Ведь все остальные Правила относятся к ScenarioBehavior (просто выложи его "isclass"). Кстати, tread ставил?



Combine, действительно ошибся. Извините :blush:
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: скрипт+сигналка

Сообщение oleg68 » 15.05.2008, 00:04

TRam_ писал(а):
Важно! sleep - это метод в GameObject, то есть класс Path должен GameObject наследоваться
- можно описание PatchRule? Ведь все остальные Правила относятся к ScenarioBehavior (просто выложи его "isclass"). Кстати, tread ставил?



Combine, действительно ошибся. Извините :blush:

Класс Path находится в Path Library (стандартный компонент в TRS2006, kuid2:71155:60008:1, можно нажать Ctrl+E в Content Manager'е и посмотреть исходники в Editing). Path Rule и Path command используют его. Возможно, сами rule и command и наследуют GameObject, но класс Path - нет:

...
class Path {
...
Аватара пользователя
oleg68
 
Сообщения: 193
Зарегистрирован: 06.07.2007, 12:36
Откуда: Санкт-Петербург
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: скрипт+сигналка

Сообщение agmike » 15.05.2008, 14:04

А если сделать
...
class Path isclass GameObject
{
...
То что тогда произойдет?
The Cake is a Lie.
agmike
 
Сообщения: 1025
Зарегистрирован: 26.08.2006, 12:43
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Играю в: Пульт ДНЦ

Re: скрипт+сигналка

Сообщение TRam_ » 15.05.2008, 18:11

а пред этим не забудь "include gs.gs", если такого там нет
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: скрипт+сигналка

Сообщение oleg68 » 15.05.2008, 22:56

agmike писал(а): А если сделать
...
class Path isclass GameObject
{
...
То что тогда произойдет?

Происходит

Thread Exception ER NativeCallError

на вызове Sleep
Аватара пользователя
oleg68
 
Сообщения: 193
Зарегистрирован: 06.07.2007, 12:36
Откуда: Санкт-Петербург
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: скрипт+сигналка

Сообщение TRam_ » 16.05.2008, 00:05

а прописал" public tread void "?
в z7 всё можно, а что нельзя - можно в sU
Аватара пользователя
TRam_
 
Сообщения: 1925
Зарегистрирован: 30.11.2007, 20:14
Благодарил (а): 2 раз.
Поблагодарили: 66 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Владимир

Re: скрипт+сигналка

Сообщение agmike » 16.05.2008, 14:06

Вопервых sleep(float) с маленькой буквы, далее как TRam_ сказал перед методом должен стоять thread
The Cake is a Lie.
agmike
 
Сообщения: 1025
Зарегистрирован: 26.08.2006, 12:43
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Играю в: Пульт ДНЦ

Re: скрипт+сигналка

Сообщение varz » 16.05.2008, 18:55

Sleep() всеже с большой буквы.
аленький секрет: thread методы возможны только в asset-классах, т.е. тех на которые ссылается config в поле class. в других случаях thread бессмысленен, даже если наследован от GameObject.
Также невозможно запустить thread-метод в виртуально созданом классе, который имеет asset.

блин, что-то путано.

так, заново.
что такое класс - всем ясно, и чем он отличается от объекта. класс - это класс, а объект - это инициированный класс, т.е. оживленый.
вот.
в ТРС есть 2,5+0,5 способа инициировать класс:
1. инициирование через config - реальный объект, имеет asset
2. нициирование через new - виртуальный объект, asset не имеет, даже если это тотже класс, что и в п.1. и находится в томже файле/скрипте
2.5 инициирование через Constructors - виртуальный объект связанный с внешним миром: браузеры, супы, меню и еще немного.
+0.5 статические классы, которые при загрузке ТРС становяться объектами. static class могут быт только встренные классы ТРС: HTMLWindow, Router, Str ...

так вот, только в реальном объекте может запуститься thread-метод. во всех остальных случаях - ERNativeCallError
***
в z7 можно все, в ТРС не все можно.
Аватара пользователя
varz
 
Сообщения: 907
Зарегистрирован: 03.02.2006, 22:23
Откуда: Липецк
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: скрипт+сигналка

Сообщение Combine » 16.05.2008, 23:47

static class могут быт только встренные классы ТРС: HTMLWindow, Router, Str ...
Разве? Я вроде статики делал свои...
Аватара пользователя
Combine
 
Сообщения: 537
Зарегистрирован: 23.10.2006, 09:47
Откуда: Московская область
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Играю в: Auran Trainz
Роль: Разработчик
Имя: Александр

Re: скрипт+сигналка

Сообщение oleg68 » 18.05.2008, 23:24

Спасибо всем за идеи и желание помочь.

Я решил свою проблему, но не через Sleep (т. к. протянуть к этому месту кода GameObject - проблематично).

Моей ошибкой было привязываться к сообщению Timer, которое присылается раз в десять секунд. Вместо этого я сделал отправку другого сообщения самому себе с задержкой в секунду:

// set junctions
for(i=0;i<vNumJunctions;i++)
vJunctions[i].get_junction().SetDirection(vDirs[i]); // existence is checked above

JunctionsSet_action action=new JunctionsSet_action();
action.init(me);
add_action(action);
Global.post_message("Object", "check_path", 1);
// обработчик сообщения JunctionsSet_action вызывает check_path()

/*
Sleep(1);
check_path();
*/

Итак, победа: теперь команда Path работает так:

1. Проверяет, все ли стрелки свободны. Если нет, повторяет через 10 секунд
2. Переводит и блокирует стрелки
3. Через 1 секунду проверяет сигнал. Если красный, то возвращает стрелки назад и через 9 секунд повторяет с п. 1.

Проверил: работает и с сигналкой KDA, и с сигналкой z6.

Теперь принимаются советы, как правильно сделать клоны стандартных Path-компонент, чтобы
1. Настроеные Path Rule в сессии не надо было бы переделывть под клон
2. Как задать kuid'ы, чтобы можно было выложить в internet, если я не зарегистрирован на Auran'е (мой ключ от Акеллы не подходит).
Аватара пользователя
oleg68
 
Сообщения: 193
Зарегистрирован: 06.07.2007, 12:36
Откуда: Санкт-Петербург
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Пред.След.

Вернуться в [TZ] Об игре

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

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