объясни смысл этого предложения - я не понял.стрелка далеко,то при передачи управления скрипту, локомотив будет ехать долго
так никто не запрещает делать правила для нескольких локов, маневрирующих одновременно...писать условие, при наезде на триггер передать управление скрипту
так что мешает сделать всёс это не скриптом, а правилами? В том числе тем же driverSetup'ом и правилами Trigger rule, и SetJunction? В z7 есть команда машинисту "открыть маневровый сигнал" и "сменить приоритет" (тут 3 считается маневровым). Есть ещё команда машинисту wait которая позволяет синхронизировать события.Я понимаю, что можно сразу составить состав с локомотивом, а охото для большего реализма сделать маневровые работы на станции ну и.т.д.
TrainUtil.DoCoupleUp(train02,train01);
Vehicle[] v1=train1.GetVehicles();
Vehicle[] v2=train2.GetVehicles();
bool a=false,b=false;
int position=4;// текущая позиция контроллёра
float vel=0;// текущая скорость
train1.SetAutopilotMode(Train.CONTROL_SCRIPT);
train1.SetReverser (2);
train1.SetManualThrottle(position);
while(!(a and b))// пока не видно ни одного вагоона на расстоянии 40 м
{
Sleep(3);
a=train1.TracksideIsInFront(cast<Trackside>v2[0],40); //определяем, находится ли первый вагон 2 поезда ближе, чем 40 м
b=train1.TracksideIsInFront(cast<Trackside>v2[v2.size()-1/*последний элемент*/ ],40); //определяем, находится ли последний вагон 2 поезда ближе, чем 40 м
//автопилот
vel=Math.Fabs(train1.GetVCelocity()*3.6);
if(vel>18)// сильно быстро едем :) - превышаем 18 км\ч
{
if(position>0)
position--;
if(vel>19.5)
position=0;
train1.SetManualThrottle(position);
}
if(vel<16 and position<5)// сильно медленно - едем меньше 16 км\ч
{
position++;
train1.SetManualThrottle(position);
}
}
train1.SetManualThrottle(0);
Locomotive MyLoco=train1.GetFrontmostLocomotive();
MyLoco.SetEngineSetting("loco-auto-brake",0.9);// тормозим локомотивным тормозом перед вагоном
Sniff(train1,"Train","StoppedMoving",true);// запрос на пересылку нам сообщения о остановке
wait() // Ожидание остановки
{
on "Train","StoppedMoving":
;//после остановки продолжить
}
Sniff(train1,"Train","StoppedMoving",false);// отменяем запрос
MyLoco.SetEngineSetting("loco-auto-brake",0);
train1.SetManualThrottle(2);
if(a)// в поле видимости 1 вагон поезда 2
{
vel=Math.Fabs(train1.GetVCelocity()*3.6);
while(vel<2) // разгоняемся до 2 км/ч
{
vel=Math.Fabs(train1.GetVCelocity()*3.6);
Sleep(0.5);
}
train1.SetManualThrottle(0);
Sniff(v2[0],"Vehicle","Coupled",true);// запрос на пересылку нам сообщения о сцепке, от вагона, до которого 40 м
TrainUtil.DoCoupleUp(train1,train2);
wait() // Ожидание сцепки
{
on "Vehicle","Coupled":
;//после сцепки продолжить
}
}
Sniff(v2[0],"Vehicle","Coupled",false);
}
if(b)// в поле видимости последний вагон поезда 2
{
vel=Math.Fabs(train1.GetVCelocity()*3.6);
while(vel<2) // разгоняемся до 2 км/ч
{
vel=Math.Fabs(train1.GetVCelocity()*3.6);
Sleep(0.5);
}
train1.SetManualThrottle(0);
Sniff(v2[v2.size()-1],"Vehicle","Coupled",true);// запрос на пересылку нам сообщения о сцепке, от вагона, до которого 40 м
TrainUtil.DoCoupleUp(train1,train2);
wait() // Ожидание сцепки
{
on "Vehicle","Coupled":
{
; //после сцепки продолжить
}
}
Sniff(v2[v2.size()-1],"Vehicle","Coupled",true);
}
Sleep(0.1);
train1=v1[0].GetMyTrain();//получаем поезд, в котором 1 вагон
train1.SetTrainBrakes(4.0);
wait()
{
on "Train","StoppedMoving":
{
break;
}
Вернуться в [TZ] Маршруты и сценарии
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2