set nd to nextnode().
set max_acc to ship:maxthrust/ship:mass.
set burn_duration to nd:deltav:mag/max_acc.
wait until node:eta <= (burn_duration/2 60). //Вычислили примерно начало маневра, взяли фору в минуту
set np to lookdirup(nd:deltav, ship:facing:topvector).
lock steering to np. //Поворачиваем
wait until abs(np:pitch - facing:pitch) < 0.15 and abs(np:yaw - facing:yaw) < 0.15.
wait until node:eta <= (burn_duration/2). //Ждем конца поворота и начало маневра
set tset to 0.
lock throttle to tset.
set done to False.
set dv0 to nd:deltav.
until done
{
set max_acc to ship:maxthrust/ship:mass. //В каждом цикле меняем значение, но не загружаем процессор локом
set tset to min(nd:deltav:mag/max_acc, 1). //Полная тяга пока не останется одна секунда
if vdot(dv0, nd:deltav) < 0 //этот цикл остановит тягу, если "нужная" дельта будет в противоположной стороне
{
print "End burn, remain dv " round(nd:deltav:mag,1) "m/s, vdot: " round(vdot(dv0, nd:deltav),1).
lock throttle to 0.
break.
}
if nd:deltav:mag < 0.1 //а этот остановит, когда направление "нужной дельты" перекосится о стартового (около конца прожига)
{
print "Finalizing burn, remain dv " round(nd:deltav:mag,1) "m/s, vdot: " round(vdot(dv0, nd:deltav),1).
wait until vdot(dv0, nd:deltav) < 0.5.
lock throttle to 0.
print "End burn, remain dv " round(nd:deltav:mag,1) "m/s, vdot: " round(vdot(dv0, nd:deltav),1).
set done to True.
}
}
unlock steering.
unlock throttle.
wait 1.
remove nd.
SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 0.
Сообщение отредактировал 26 декабря 2015 - 23:08