Global.fenestro_kosmo.get_node("ship").target_rot=Quat(Global.fenestro_kosmo.get_node("ship").transform.looking_at(transform.origin,Vector3.UP).basis)#запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
(Global.fenestro_itinero.itineroj.front()['kategorio']==Global.kategorio_movado):#Если цель существует, двигаемся
transform.basis=Basis(Quat(transform.basis).slerp(target_rot,speed_rotation))#потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
target_rot=Quat(transform.looking_at(Global.fenestro_itinero.itineroj.front()['transform'].origin,Vector3.UP).basis)#запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
transform.basis=transform.basis.slerp(target_rot,speed_rotation*delta)#потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
ifdocking_rotation!=null:
else:
transform.basis=Basis(Quat(transform.basis).slerp(docking_rotation,speed_rotation*1.5))#поворачиваем в дефолтное состояние, чтобы сесть
ifdistance>max_speed*delta/acceleration:#Тут сомнительная формула от фонаря, вычисляющая примерно откуда надо начинать тормозить корабль.
varc=a.slerp(target_rot,speed_rotation*delta)#потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
transform.basis=Basis(c)
# transform.basis = transform.basis.slerp(target_rot,speed_rotation*delta) #потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
else:#Если это последняя точка, то мы тормозим, и задаём минимальное расстояние, чтобы точнее выставить корабль
transform.basis=transform.basis.slerp(Quat(Global.fenestro_itinero.itineroj.front()['transform'].basis),speed_rotation*delta*1.5)#поворачиваем в дефолтное состояние, чтобы сесть
target_rot=Quat(transform.looking_at(way_point,Vector3.UP).basis)#запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
target_rot=Quat(transform.looking_at(front.origin,Vector3.UP).basis)#запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
# if event is InputEventMouseButton and event.doubleclick:
emit_signal("new_way_point",cam.project_position(get_viewport().get_mouse_position(),z_away),null)#Если кнопка нажата, то бросаем лучь из камеры на глубину z_away и получаем точку, тут же устанавливаем новый вейпойнт с координатами
# emit_signal("new_way_point",cam.project_position(get_viewport().get_mouse_position(),z_away),null) #Если кнопка нажата, то бросаем лучь из камеры на глубину z_away и получаем точку, тут же устанавливаем новый вейпойнт с координатами
transform.basis=transform.basis.slerp(target_rot,speed_rotation*delta)#потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
else:
ifdistance>max_speed*delta/acceleration:#Тут сомнительная формула от фонаря, вычисляющая примерно откуда надо начинать тормозить корабль.
transform.basis=transform.basis.slerp(target_rot,speed_rotation*delta)#потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
else:#Если это последняя точка, то мы тормозим, и задаём минимальное расстояние, чтобы точнее выставить корабль
target_rot=Quat(transform.looking_at(front.origin,Vector3.UP).basis)#запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
funcset_route(route_array):
if!route_array.empty():
itineroj.clear()#Просто приравнивать нельзя, так как изменяется адрес и если где-то на него кто-то ссылался в других сценах, то он теряет этот адрес Так что очищаем и копируем.
foriinroute_array:
itineroj.push_back(i)
rotate_start()
funcdec_route():
itineroj.pop_front()
set_route(itineroj.duplicate())
funcroute_gone():
itineroj.clear()
funcadd_route(route_array):
foriinroute_array:
itineroj.push_back(i)
set_route(itineroj.duplicate())
# редактировать маршрут
funcsxangxi_itinero(projekto,tasko):
ifprojekto['uuid']==projekto_itineroj:# изменение по задаче в текущем проекте
varnew_tasko=true# признак необходимости новой задачи
varpos=0# номер позиции в списке задач
foritinitineroj:# проходим по всем задачам
iftasko['uuid']==it['uuid']:# нашли соответствующую задачу
new_tasko=false
iftasko['statuso']['objId']==1:# новая - в очередь выполнения
it['koordinatoX']=tasko['finKoordinatoX']
it['koordinatoY']=tasko['finKoordinatoY']
it['koordinatoZ']=tasko['finKoordinatoZ']
eliftasko['statuso']['objId']==2:# в работе
# задача должна быть первой в списке
ifpos:# если не первая
itineroj.remove(pos)
itineroj.push_front({
'uuid':tasko['uuid'],
'koordinatoX':tasko['finKoordinatoX'],
'koordinatoY':tasko['finKoordinatoY'],
'koordinatoZ':tasko['finKoordinatoZ']
})
else:
it['koordinatoX']=tasko['finKoordinatoX']
it['koordinatoY']=tasko['finKoordinatoY']
it['koordinatoZ']=tasko['finKoordinatoZ']
# отправляем корабль на уточнённые координаты, а точнее поворачиваем
rotate_start()
pause=false
eliftasko['statuso']['objId']==4:# закрыта
#удаляем из списка
itineroj.remove(pos)
eliftasko['statuso']['objId']==6:# приостановлена
pause=true
pos+=1
ifnew_tasko:# добавляем новую задачу в проект
iftasko['statuso']['objId']==1:# новая - в очередь выполнения
# нужно выстроить по очерёдности
pass
pos=0
varpozicio=false
foritinitineroj:# проходим по всем задачам и находим нужную позицию
ifitineroj['pozicio']>tasko['pozicio']:# вставляем перед данной записью
itineroj.insert(pos,{
'uuid':tasko['uuid'],
'koordinatoX':tasko['finKoordinatoX'],
'koordinatoY':tasko['finKoordinatoY'],
'koordinatoZ':tasko['finKoordinatoZ'],
'pozicio':tasko['pozicio']
})
pozicio=true
break
pos+=1
if!pozicio:# позиция не найдены, добавляем в конце
itineroj.push_pop({
'uuid':tasko['uuid'],
'koordinatoX':tasko['finKoordinatoX'],
'koordinatoY':tasko['finKoordinatoY'],
'koordinatoZ':tasko['finKoordinatoZ'],
'pozicio':tasko['pozicio']
})
eliftasko['statuso']['objId']==2:# в работе
# задача должна быть первой в списке
itineroj.push_front({
'uuid':tasko['uuid'],
'koordinatoX':tasko['finKoordinatoX'],
'koordinatoY':tasko['finKoordinatoY'],
'koordinatoZ':tasko['finKoordinatoZ'],
'pozicio':tasko['pozicio']
})
# отправляем корабль на уточнённые координаты, а точнее поворачиваем
transform.basis=transform.basis.slerp(target_rot,speed_rotation*delta)#потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
vara=Quat(transform.basis)
varc=a.slerp(target_rot,speed_rotation*delta)#потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
transform.basis=Basis(c)
# transform.basis = transform.basis.slerp(target_rot,speed_rotation*delta) #потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
else:#Если это последняя точка, то мы тормозим, и задаём минимальное расстояние, чтобы точнее выставить корабль
else:#Если это последняя точка, то мы тормозим, и задаём минимальное расстояние, чтобы точнее выставить корабль