Коммит 561788a2 создал по автору magcourier's avatar magcourier
Просмотр файлов

#117 Движение чужих объектов в реальном времени

владелец a80e7412
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
[node name="Control" type="Control"] [node name="Control" type="Control"]
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
margin_right = -813.0 margin_right = -701.0
margin_bottom = -534.0 margin_bottom = -289.0
script = ExtResource( 1 ) script = ExtResource( 1 )
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
...@@ -24,5 +24,4 @@ hide_on_state_item_selection = true ...@@ -24,5 +24,4 @@ hide_on_state_item_selection = true
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[connection signal="draw" from="canvas/PopupMenu" to="." method="_on_PopupMenu_draw"]
[connection signal="index_pressed" from="canvas/PopupMenu" to="." method="_on_PopupMenu_index_pressed"] [connection signal="index_pressed" from="canvas/PopupMenu" to="." method="_on_PopupMenu_index_pressed"]
[gd_scene load_steps=4 format=2]
[ext_resource path="res://blokoj/kosmo/resursoj/untitled.obj" type="ArrayMesh" id=1]
[ext_resource path="res://blokoj/kosmosxipoj/skriptoj/moduloj/modulo.gd" type="Script" id=2]
[sub_resource type="CapsuleShape" id=1]
height = 1.36019
[node name="mesh" type="MeshInstance"]
mesh = ExtResource( 1 )
material/0 = null
material/1 = null
material/2 = null
material/3 = null
material/4 = null
script = ExtResource( 2 )
[node name="StaticBody" type="StaticBody" parent="."]
[node name="CollisionShape" type="CollisionShape" parent="StaticBody"]
transform = Transform( 3.84755, 0, 0, 0, 3.95025, 0, 0, 0, 5.03246, 0, 0, 4.95616 )
shape = SubResource( 1 )
[gd_scene load_steps=15 format=2] [gd_scene load_steps=14 format=2]
[ext_resource path="res://blokoj/kosmo/scenoj/waypoint.tscn" type="PackedScene" id=1]
[ext_resource path="res://blokoj/kosmo/scenoj/ship.tscn" type="PackedScene" id=2] [ext_resource path="res://blokoj/kosmo/scenoj/ship.tscn" type="PackedScene" id=2]
[ext_resource path="res://blokoj/kosmo/scenoj/space_object.tscn" type="PackedScene" id=3] [ext_resource path="res://blokoj/kosmo/scenoj/space_object.tscn" type="PackedScene" id=3]
[ext_resource path="res://blokoj/kosmo/scenoj/main_camera.tscn" type="PackedScene" id=4] [ext_resource path="res://blokoj/kosmo/scenoj/main_camera.tscn" type="PackedScene" id=4]
...@@ -8,7 +7,7 @@ ...@@ -8,7 +7,7 @@
[ext_resource path="res://blokoj/kosmo/skriptoj/space_ui.gd" type="Script" id=6] [ext_resource path="res://blokoj/kosmo/skriptoj/space_ui.gd" type="Script" id=6]
[ext_resource path="res://blokoj/kosmo/skriptoj/http_mutate.gd" type="Script" id=7] [ext_resource path="res://blokoj/kosmo/skriptoj/http_mutate.gd" type="Script" id=7]
[ext_resource path="res://blokoj/kosmo/skriptoj/space.gd" type="Script" id=8] [ext_resource path="res://blokoj/kosmo/skriptoj/space.gd" type="Script" id=8]
[ext_resource path="res://blokoj/kosmo/scenoj/menuo.tscn" type="PackedScene" id=9] [ext_resource path="res://blokoj/kosmo/scenoj/control.tscn" type="PackedScene" id=9]
[sub_resource type="SphereMesh" id=1] [sub_resource type="SphereMesh" id=1]
radial_segments = 4 radial_segments = 4
...@@ -138,15 +137,11 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -78.8565, 6.63192, 14.2732 ) ...@@ -138,15 +137,11 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -78.8565, 6.63192, 14.2732 )
mesh = SubResource( 1 ) mesh = SubResource( 1 )
material/0 = SubResource( 4 ) material/0 = SubResource( 4 )
[node name="way_point" parent="." instance=ExtResource( 1 )]
z_away = 4000
colision_radius = 1.0
[node name="space_object1" parent="." instance=ExtResource( 3 )] [node name="space_object1" parent="." instance=ExtResource( 3 )]
transform = Transform( 10, 0, 0, 0, 10, 0, 0, 0, 10, -163.333, 10.0102, 3.27841 ) transform = Transform( 10, 0, 0, 0, 10, 0, 0, 0, 10, -163.333, 10.0102, 3.27841 )
visible = false visible = false
[node name="main_camera" parent="." instance=ExtResource( 4 )] [node name="camera" parent="." instance=ExtResource( 4 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 151.894 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 151.894 )
distance_min = 0 distance_min = 0
......
extends Control extends Control
# uuid выполняемого проекта
var projekto_uuid
var projekto_mouse # проект запущен мышкой
# если маршрут создаётся списком, то это новый проект
# если мышкой по космосу после мышки - меняем задачу на новую в том же проекте
# если мышкой по космосу после проекта (несколько задач в списке), то закрываем проект и открываем новый проект
# маршрут движения управляемого объекта (список проектов с задачей маршрута)
var itineroj = []
#uuid_tasko - uuid задачи, когда уже летим
#uuid_celo - uuid цели полёта, если это объект
#nomo - название объекта цели
# координаты цели полёта
# 'koordinatoX':
# 'koordinatoY':
# 'koordinatoZ':
# distance - расстояние до цели полёта
# pozicio - в какой позиции должна находится задача
# transform - transform координат цели движения (лучше высчитать один раз при добавлении)
# kategorio - категория задачи объекта
# маршрут стоит на паузе
var itinero_pause = true
# запросы по задачам/проектам
const QueryObject = preload("../skriptoj/queries.gd")
# список id запросов, отправленных на сервер
var id_net = []
var id_projekto # id запроса по созданию проекта
var id_taskoj # id запроса на список задач
var id_tasko # id запроса на одну задачу
func _ready(): func _ready():
Global.fenestro_itinero = self Global.fenestro_itinero = self
# подключаем сигнал для обработки входящих данных
var err = Net.connect("input_data", self, "_on_data")
if err:
print('error = ',err)
func _on_data():
var i_data_server = 0
for on_data in Net.data_server:
var index = id_net.find(int(on_data['id']))
if index > -1: # находится в списке отправленных запросов
# удаляем из списка
id_net.remove(index)
Net.data_server.remove(i_data_server)
elif int(on_data['id']) == id_projekto:
# запустили новый проект
taskoj_to_server(on_data['payload']['data'])
Net.data_server.remove(i_data_server)
id_projekto = 0
elif int(on_data['id']) == id_taskoj:
# присвоить uuid задачам после ответа
# uuid соответственно переданным задачам - по порядку
var i = 0
for datoj in on_data['payload']['data']['redaktuKreiUniversoTaskojPosedanto']['universoTaskoj']:
itineroj[i]['uuid_tasko'] = datoj['uuid']
i += 1
id_taskoj = 0
Net.data_server.remove(i_data_server)
elif int(on_data['id']) == id_tasko:
itineroj.front()['uuid_tasko'] = on_data['payload']['data']['redaktuUniversoTaskoj']['universoTaskoj']['uuid']
id_tasko = 0
Net.data_server.remove(i_data_server)
i_data_server += 1
func _physics_process(delta):
if Global.fenestro_kosmo:
distance_to(Global.fenestro_kosmo.get_node("ship").translation)
func _on_Close_button_pressed(): func _on_Close_button_pressed():
...@@ -19,107 +90,267 @@ func _drag(event: InputEvent) -> void: ...@@ -19,107 +90,267 @@ func _drag(event: InputEvent) -> void:
$canvas/MarginContainer.rect_position += event.relative $canvas/MarginContainer.rect_position += event.relative
func FillItemList(): # очистить список маршрута в окне маршрута
func purigi_fenestro():
$"canvas/MarginContainer/VBoxContainer/ItemList".clear() $"canvas/MarginContainer/VBoxContainer/ItemList".clear()
# Заполняет список найдеными продуктами
for Item in Global.itineroj:
# вывести на экран окна весь список маршрута с предварительным очищением окна
func FillItemList():
purigi_fenestro()
# Заполняет список маршрутом
for Item in itineroj:
get_node("canvas/MarginContainer/VBoxContainer/ItemList").add_item('('+String(int(Item['distance']))+') '+Item['nomo'], null, true) get_node("canvas/MarginContainer/VBoxContainer/ItemList").add_item('('+String(int(Item['distance']))+') '+Item['nomo'], null, true)
#пересчет дистанции до объектов в списке #пересчет дистанции до объектов в списке
func distance_to(trans): func distance_to(trans):
for obj in Global.itineroj: for obj in itineroj:
obj['distance'] = trans.distance_to(Vector3(obj['koordinatoX'], obj['distance'] = trans.distance_to(Vector3(obj['koordinatoX'],
obj['koordinatoY'],obj['koordinatoZ'])) obj['koordinatoY'],obj['koordinatoZ']))
$'canvas/MarginContainer/VBoxContainer/ItemList'.clear() $'canvas/MarginContainer/VBoxContainer/ItemList'.clear()
FillItemList() FillItemList()
#отправляем корабль в полёт # начинаем маршрут
func go_ship():
if len(Global.itineroj)==0:
return 404
if Global.fenestro_kosmo:
var position = Vector3(Global.itineroj[0]['koordinatoX'],Global.itineroj[0]['koordinatoY'],Global.itineroj[0]['koordinatoZ'])
Global.fenestro_kosmo.get_node("ship").set_way_point(position,null)
Global.fenestro_kosmo.get_node("way_point").set_way_point(position)
func komenci_itinero(): func komenci_itinero():
if Global.fenestro_kosmo: if Global.fenestro_kosmo:
Global.fenestro_kosmo.get_node("ship").vojkomenco()#начинаем движение
# отправляем в полёт # отправляем в полёт
go_ship() vojkomenco()#начинаем движение
#запускаем таймер if !itinero_pause:
Global.fenestro_kosmo.get_node("timer").start() #запускаем таймер
$canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero.disabled=true Global.fenestro_kosmo.get_node("timer").start()
$canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero.disabled=true
# начинаем лететь
func _on_kom_itinero_pressed(): func _on_kom_itinero_pressed():
if Global.fenestro_kosmo: if Global.fenestro_kosmo:
#остановить текущие задачи projekto_mouse = false # проект не по мышке
# останавливаем таймер передачи данных на сервер
Global.fenestro_kosmo.get_node("timer").stop()
#отправка последних координат и закрытие задачи с проектом
Global.fenestro_kosmo.get_node("ship").finofara_flugo()
#создать проект #создать проект
#создать список задач на основе списка itineroj #создать список задач на основе списка itineroj
komenci_itinero() komenci_itinero()
func add_itinero(uuid_tasko, uuid, nomo, koordX, koordY, koordZ, distance):
Global.itineroj.append({ # ткнули мышкой в космосе, отправились к точке в космосе
# отправили к конкретному объекту mouse=false
# добавить задачу в маршрут, а при отсутствии проекта - создать маршрут из одной точки
func okazigi_itinero(uuid_celo, nomo, koordinatoX, koordinatoY,
koordinatoZ, transform, distance, kategorio, mouse):
# kategorio=Global.kategorio_movado
if len(itineroj)>1:
fermi_projekto_tasko()
elif len(itineroj)>0:
malmultigi_unua(mouse)
if !transform:
transform = Transform(Basis.IDENTITY, Vector3(koordinatoX,
koordinatoY, koordinatoZ))
if (distance == -1) and (Global.fenestro_kosmo):
distance = Global.fenestro_kosmo.get_node("ship").translation.distance_to(Vector3(koordinatoX,
koordinatoY,koordinatoZ))
Global.fenestro_kosmo.get_node("ship").target_rot = Quat(Global.fenestro_kosmo.get_node("ship").transform.looking_at(transform.origin,Vector3.UP).basis) #запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
add_itinero('', uuid_celo, nomo, koordinatoX,
koordinatoY, koordinatoZ, transform, distance, kategorio)
if itinero_pause:
itinero_pause = false
vojkomenco()
# добавить точку маршрута
func add_itinero(uuid_tasko, uuid_celo, nomo, koordinatoX,
koordinatoY, koordinatoZ, transform, distance, kategorio=Global.kategorio_movado):
itineroj.append({
'uuid_tasko':uuid_tasko, 'uuid_tasko':uuid_tasko,
'uuid':uuid, 'uuid_celo':uuid_celo,
'nomo':nomo, 'nomo':nomo,
'koordinatoX':koordX, 'koordinatoX':koordinatoX,
'koordinatoY':koordY, 'koordinatoY':koordinatoY,
'koordinatoZ':koordZ, 'koordinatoZ':koordinatoZ,
'transform': transform,
'distance':distance, 'distance':distance,
'kategorio':kategorio
}) })
FillItemList() get_node("canvas/MarginContainer/VBoxContainer/ItemList").add_item('('+String(int(distance))+') '+nomo, null, true)
# удаляем первую точку маршрута (выполнена)
# mouse - движение по мышке
func malmultigi_unua(mouse = false): # уменьшить первый
# если первая точка задача с uuid - закрываем её
# ставим задачу в "Закрыта" (Статус = 4)
if itineroj.front()['uuid_tasko']:
var q = QueryObject.new()
var id = Net.get_current_query_id()
id_net.push_back(id)
Net.send_json(q.finado_tasko(itineroj.front()['uuid_tasko'],4,id))
itineroj.pop_front()
# а если это движение по мышке?? что бы продолжить тот же проект
if mouse and projekto_mouse:
FillItemList()
elif len(itineroj)==0:# если была последняя точка, то закрываем проект
fermi_projekto()
else:
FillItemList()
# закрываем проект
func fermi_projekto():
if projekto_uuid:
var q = QueryObject.new()
var id = Net.get_current_query_id()
id_net.push_back(id)
Net.send_json(q.finado_projeko_json(projekto_uuid,id))
projekto_uuid = ''
projekto_mouse = true
malplenigi_itinero()
# закрываем проект и первую (текущую) задачу
func fermi_projekto_tasko():
if projekto_uuid:
var q = QueryObject.new()
var id = Net.get_current_query_id()
id_net.push_back(id)
if itineroj.front()['uuid_tasko']:
Net.send_json(q.finado_projekto_tasko_json(projekto_uuid,itineroj.front()['uuid_tasko'],id))
else:
Net.send_json(q.finado_projeko_json(projekto_uuid,id))
projekto_uuid = ''
projekto_mouse = true
malplenigi_itinero()
func clear_itinero(): # очищаем маршрут clear_itinero
Global.itineroj.clear() func malplenigi_itinero():
itineroj.clear()
itinero_pause = true
FillItemList() FillItemList()
# приводим кнопки в исходное состояние
Global.fenestro_kosmo.get_node("timer").stop()
$canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero.disabled=false
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next.disabled=true
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin.disabled=true
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_clear.disabled=true
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin.text='Пауза'
# поставить на паузу или отправить дальше
func _on_itinero_fin_pressed(): func _on_itinero_fin_pressed():
if Global.fenestro_kosmo: if Global.fenestro_kosmo:
#если в полёте #если в полёте
if $canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero.disabled: if $canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero.disabled:
if $canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin.text=='Пауза': if !itinero_pause:
#останавливаем движение корабля #останавливаем движение корабля
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin.text='Далее' $canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin.text='Далее'
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next.disabled=true $canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next.disabled=true
Global.fenestro_kosmo.get_node("ship").clear_way_point() itinero_pause = true
Global.fenestro_kosmo.get_node("way_point").set_active(false)
else: else:
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin.text='Пауза' $canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin.text='Пауза'
#продолжаем движение корабля #продолжаем движение корабля
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next.disabled=false $canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next.disabled=false
go_ship() itinero_pause = false
# itinero_clear
# кнопка сброса маршрута
func _on_itinero_clear_pressed(): func _on_itinero_clear_pressed():
if len(Global.itineroj)==0: projekto_mouse = true
if len(itineroj)==0:
return 404 return 404
if Global.fenestro_kosmo: if Global.fenestro_kosmo:
#закрыть все задачи и проект #закрыть все задачи и проект
#удаляем все задачи далее первой fermi_projekto_tasko()
Global.itineroj = [Global.itineroj[0],]
#закрываем текущую задачу и проект автоматически закрывается
Global.fenestro_kosmo.get_node("ship").clear_way_point()
Global.fenestro_kosmo.get_node("way_point").set_active(false)
Global.fenestro_kosmo.get_node("timer").stop()
Global.fenestro_kosmo.get_node("ship").finofara_flugo()
$canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero.disabled=false
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next.disabled=true
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin.disabled=true
$canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_clear.disabled=true
# пропустить текущую цель и лететь к следующей # пропустить текущую цель и лететь к следующей
func _on_itinero_next_pressed(): func _on_itinero_next_pressed():
if Global.fenestro_kosmo: if Global.fenestro_kosmo:
Global.fenestro_kosmo.get_node("ship").clear_way_point()
Global.fenestro_kosmo.get_node("way_point").set_active(false)
Global.fenestro_kosmo.get_node("timer").stop() Global.fenestro_kosmo.get_node("timer").stop()
Global.fenestro_kosmo.get_node("ship").finofara_flugo() # закрываем текущую задачу
malmultigi_unua()
# переводим следующую задачу в работу
vojkomenco()
#передача данных на сервер при отправке корабля по первой цели
func vojkomenco(): # нача́ло доро́ги
if len(itineroj)==0:
return 404
var q = QueryObject.new()
# отправляем на сервер маршрут
if !projekto_uuid:#если проекта нет, то создаём
# создание проекта с задачами идёт в два этапа:
# 1 - создаём запись проекта и получаем его uuid
# 2- создаём задачи к проекту после ответа сервера
# цель маршрута берём из itineroj
id_projekto = Net.get_current_query_id()
var count_itineroj=len(itineroj)-1
Net.send_json(q.instalo_projekto_json(
Global.direktebla_objekto[Global.realeco-2]['uuid'], # uuid объекта управления
Global.fenestro_kosmo.get_node("ship").translation.x, #kom_koordX
Global.fenestro_kosmo.get_node("ship").translation.y, #kom_koordY
Global.fenestro_kosmo.get_node("ship").translation.z, #kom_koordZ
itineroj[count_itineroj]['koordinatoX'], #fin_koordX
itineroj[count_itineroj]['koordinatoY'], #fin_koordY
itineroj[count_itineroj]['koordinatoZ'], #fin_koordZ
id_projekto
))
else:#проект есть, изменяем задачу
# изменяем цель проекта
var id = Net.get_current_query_id()
if itineroj.front()['uuid_tasko']: # если есть uuid задачи
Net.send_json(q.instalo_tasko_uuid_koord_json(
# если задача зарегистрирована на сервере, то мы должны передать её uuid
itineroj.front()['uuid_tasko'],
Global.fenestro_kosmo.get_node("ship").translation.x, #kom_koordX
Global.fenestro_kosmo.get_node("ship").translation.y, #kom_koordY
Global.fenestro_kosmo.get_node("ship").translation.z, #kom_koordZ
2, # берём в работу
id
))
else: #создаём новую задачу
id_tasko = id
itineroj.front()['uuid_tasko'] = id_tasko
Net.send_json(q.instalo_tasko_koord_json(
# если задача зарегистрирована на сервере, то мы должны передать её uuid
Global.direktebla_objekto[Global.realeco-2]['uuid'],
projekto_uuid,
Global.fenestro_kosmo.get_node("ship").translation.x, #kom_koordX
Global.fenestro_kosmo.get_node("ship").translation.y, #kom_koordY
Global.fenestro_kosmo.get_node("ship").translation.z, #kom_koordZ
itineroj.front()['koordinatoX'], #fin_koordX
itineroj.front()['koordinatoY'], #fin_koordY
itineroj.front()['koordinatoZ'], #fin_koordZ
id_tasko
))
itinero_pause = false
get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero").disabled=true
get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next").disabled=false
get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin").disabled=false
get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_clear").disabled=false
# записав проект в базу, получили его uuid и теперь передаём на сервер его задачи
func taskoj_to_server(on_data):
projekto_uuid = on_data['redaktuUniversoProjekto']['universoProjekto']['uuid']
# теперь создаём задачу с координатами
var q = QueryObject.new()
var ship = Global.fenestro_kosmo.get_node("ship")
Global.direktebla_objekto[Global.realeco-2]['koordinatoX'] = ship.translation.x
Global.direktebla_objekto[Global.realeco-2]['koordinatoY'] = ship.translation.y
Global.direktebla_objekto[Global.realeco-2]['koordinatoZ'] = ship.translation.z
Global.direktebla_objekto[Global.realeco-2]['rotationX'] = ship.rotation.x
Global.direktebla_objekto[Global.realeco-2]['rotationY'] = ship.rotation.y
Global.direktebla_objekto[Global.realeco-2]['rotationZ'] = ship.rotation.z
id_taskoj = Net.get_current_query_id()
Net.send_json(q.instalo_tasko_posedanto_koord(
ship.uuid,
projekto_uuid,
ship.translation.x, #kom_koordX
ship.translation.y, #kom_koordY
ship.translation.z, #kom_koordZ
itineroj,
id_taskoj
))
extends Camera extends Camera
var point_of_interest# к чему привязать камеру
var choose = false # привязать или отвязать камеру
export var enabled = true setget set_enabled export var enabled = true setget set_enabled
export(int, "Visible", "Hidden", "Captured, Confined") var mouse_mode = 2 export(int, "Visible", "Hidden", "Captured, Confined") var mouse_mode = 2
...@@ -60,7 +63,15 @@ func _unhandled_input(event): ...@@ -60,7 +63,15 @@ func _unhandled_input(event):
else: else:
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
func _input(event): func _input(event):
if Input.is_action_just_pressed("ui_select"):
choose=!choose
if choose:
set_privot(point_of_interest)
else:
set_privot(null)
if privot: if privot:
if event.is_action_pressed("wheel_down"): if event.is_action_pressed("wheel_down"):
distance-=distance_step distance-=distance_step
...@@ -136,11 +147,8 @@ func _update_movement(delta): ...@@ -136,11 +147,8 @@ func _update_movement(delta):
# warning-ignore:unused_argument # warning-ignore:unused_argument
func _update_rotation(delta): func _update_rotation(delta):
var offset = Vector2(); var offset = Vector2();
offset += _mouse_offset * sensitivity offset += _mouse_offset * sensitivity
_mouse_offset = Vector2() _mouse_offset = Vector2()
_yaw = _yaw * smoothness + offset.x * (1.0 - smoothness) _yaw = _yaw * smoothness + offset.x * (1.0 - smoothness)
_pitch = _pitch * smoothness + offset.y * (1.0 - smoothness) _pitch = _pitch * smoothness + offset.y * (1.0 - smoothness)
...@@ -154,6 +162,9 @@ func _update_rotation(delta): ...@@ -154,6 +162,9 @@ func _update_rotation(delta):
rotate_y(deg2rad(-_yaw)) rotate_y(deg2rad(-_yaw))
rotate_object_local(Vector3(1,0,0), deg2rad(-_pitch)) rotate_object_local(Vector3(1,0,0), deg2rad(-_pitch))
func set_point_of_interest(ship):
point_of_interest = ship
func set_privot(value): func set_privot(value):
privot = value privot = value
if privot: if privot:
...@@ -170,3 +181,5 @@ func set_enabled(value): ...@@ -170,3 +181,5 @@ func set_enabled(value):
func set_smoothness(value): func set_smoothness(value):
smoothness = clamp(value, 0.001, 0.999) smoothness = clamp(value, 0.001, 0.999)
...@@ -2,10 +2,22 @@ extends Control ...@@ -2,10 +2,22 @@ extends Control
onready var margin = $"/root/Title/CanvasLayer/UI/Objektoj/Window/Canvas/VBox" onready var margin = $"/root/Title/CanvasLayer/UI/Objektoj/Window/Canvas/VBox"
var camera #камера
export var z_away = 100 # насколько глубоко\далеко будет точка пути от экрана
var index_pos = 0 var index_pos = 0
func _input(event: InputEvent) -> void: func _input(event: InputEvent) -> void:
if Input.is_action_just_pressed("left_click"):
if event is InputEventMouseButton and event.doubleclick:
#Если кнопка нажата, то бросаем луч из камеры на глубину z_away и получаем точку, тут же устанавливаем новый вейпойнт с координатами
var celo = Transform(Basis.IDENTITY, camera.project_position(get_viewport().get_mouse_position(),z_away))
Global.fenestro_itinero.okazigi_itinero(
'', '', celo.origin.x, celo.origin.y, celo.origin.z,
celo, -1, Global.kategorio_movado, true
)
if Input.is_action_just_pressed("right_click"): if Input.is_action_just_pressed("right_click"):
# event.pressed=true # event.pressed=true
if event is InputEventMouseButton and $"/root/Title/CanvasLayer/UI/Objektoj/Window/Canvas/VBox".visible: if event is InputEventMouseButton and $"/root/Title/CanvasLayer/UI/Objektoj/Window/Canvas/VBox".visible:
...@@ -77,6 +89,7 @@ func go_kosmostacioj(): ...@@ -77,6 +89,7 @@ func go_kosmostacioj():
get_tree().change_scene('res://blokoj/kosmostacioj/CapKosmostacio.tscn') get_tree().change_scene('res://blokoj/kosmostacioj/CapKosmostacio.tscn')
# выбрали позицию в меню
func _on_PopupMenu_index_pressed(index): func _on_PopupMenu_index_pressed(index):
if index == 2: # если выбран вход в станцию if index == 2: # если выбран вход в станцию
go_kosmostacioj() go_kosmostacioj()
...@@ -104,23 +117,27 @@ func _on_PopupMenu_index_pressed(index): ...@@ -104,23 +117,27 @@ func _on_PopupMenu_index_pressed(index):
dist = $"../ship".translation.distance_to(celo) - translacio dist = $"../ship".translation.distance_to(celo) - translacio
var speed = celo - $"../ship".translation var speed = celo - $"../ship".translation
celo = $"../ship".translation + speed.normalized() * dist celo = $"../ship".translation + speed.normalized() * dist
if index==0: # отправка корабля к цели
Global.fenestro_itinero.add_itinero( Global.fenestro_itinero.okazigi_itinero(
'', Global.objektoj[index_pos]['uuid'],
Global.objektoj[index_pos]['uuid'], Global.objektoj[index_pos]['nomo']['enhavo'], #'nomo'
Global.objektoj[index_pos]['nomo']['enhavo'], #'nomo' celo.x,
celo.x, celo.y,
celo.y, celo.z,
celo.z, Transform(Basis.IDENTITY, celo),
dist dist,
) Global.kategorio_movado,
Global.fenestro_itinero.FillItemList() false
if index==0: )
Global.fenestro_itinero.komenci_itinero() elif index==1: # добавление точки в маршрут
# elif index==1: Global.fenestro_itinero.add_itinero(
'',
Global.objektoj[index_pos]['uuid'],
func _on_PopupMenu_draw(): Global.objektoj[index_pos]['nomo']['enhavo'], #'nomo'
# $canvas/PopupMenu.mouse_filter=0 #для отключения игнорирования меню и его реакции на выбор пунктов celo.x,
pass # Replace with function body. celo.y,
celo.z,
Transform(Basis.IDENTITY, celo),
dist
)
...@@ -18,8 +18,8 @@ func objecto_mutation(uuid, koordX, koordY, koordZ, rotaciaX, rotaciaY, rotaciaZ ...@@ -18,8 +18,8 @@ func objecto_mutation(uuid, koordX, koordY, koordZ, rotaciaX, rotaciaY, rotaciaZ
# устанавливаем проект # устанавливаем проект
func instalo_projekto(objektoUuid, kom_koordX, kom_koordY, kom_koordZ, func instalo_projekto_json(objektoUuid, kom_koordX, kom_koordY, kom_koordZ,
fin_koordX, fin_koordY, fin_koordZ): fin_koordX, fin_koordY, fin_koordZ, id):
var tipoId = 2 var tipoId = 2
var kategorio = 3 var kategorio = 3
var statusoId = 2 var statusoId = 2
...@@ -27,7 +27,12 @@ func instalo_projekto(objektoUuid, kom_koordX, kom_koordY, kom_koordZ, ...@@ -27,7 +27,12 @@ func instalo_projekto(objektoUuid, kom_koordX, kom_koordY, kom_koordZ,
var priskribo = "Movado de objekto" var priskribo = "Movado de objekto"
var statusoPosedantoId = 1 var statusoPosedantoId = 1
var tipoPosedantoId = 1 var tipoPosedantoId = 1
var query = JSON.print({ 'query': 'mutation ($tipoId:Int, $kategorio:[Int],'+ if !id:
id = Net.get_current_query_id()
var query = JSON.print({
'type': 'start',
'id': '%s' % id,
'payload':{ 'query': 'mutation ($tipoId:Int, $kategorio:[Int],'+
' $nomo:String, $priskribo:String, $statusoId:Int, $kom_koordX:Float, '+ ' $nomo:String, $priskribo:String, $statusoId:Int, $kom_koordX:Float, '+
' $kom_koordY:Float, $kom_koordZ:Float, $fin_koordX:Float, '+ ' $kom_koordY:Float, $kom_koordZ:Float, $fin_koordX:Float, '+
' $fin_koordY:Float, $fin_koordZ:Float, $tipoPosedantoId:Int,'+ ' $fin_koordY:Float, $fin_koordZ:Float, $tipoPosedantoId:Int,'+
...@@ -48,16 +53,17 @@ func instalo_projekto(objektoUuid, kom_koordX, kom_koordY, kom_koordZ, ...@@ -48,16 +53,17 @@ func instalo_projekto(objektoUuid, kom_koordX, kom_koordY, kom_koordZ,
"fin_koordX":fin_koordX, "fin_koordX":fin_koordX,
"fin_koordY":fin_koordY, "fin_koordZ":fin_koordZ, "fin_koordY":fin_koordY, "fin_koordZ":fin_koordZ,
"objektoUuid":objektoUuid, "statusoPosedantoId":statusoPosedantoId, "objektoUuid":objektoUuid, "statusoPosedantoId":statusoPosedantoId,
"tipoPosedantoId":tipoPosedantoId, "realecoId":Global.realeco} }) "tipoPosedantoId":tipoPosedantoId, "realecoId":Global.realeco} }})
# print('===instalo_projekto===',query) # print('===instalo_projekto===',query)
return query return query
# записываем список задач с их владельцами и текущие координаты объекту
func instalo_tasko_posedanto_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ, itineroj): # записываем список задач с их владельцами и текущие координаты объекту
func instalo_tasko_posedanto_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ, itineroj, id=0):
# создаём список задач, создаём владельца проекта, устанавливаем координаты объекту # создаём список задач, создаём владельца проекта, устанавливаем координаты объекту
var tipoId = 2 var tipoId = 2
var kategorio = 3 var kategorio = 3
var statusoId = [2] var statusoId = [2] # первая задача в работе
var nomo = "Movado" var nomo = "Movado"
var priskribo = "Movado de objekto" var priskribo = "Movado de objekto"
var tipoPosedantoId = 1 var tipoPosedantoId = 1
...@@ -81,13 +87,18 @@ func instalo_tasko_posedanto_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, ...@@ -81,13 +87,18 @@ func instalo_tasko_posedanto_koord(uuid, projekto_uuid, kom_koordX, kom_koordY,
komKoordinatoX.append(itineroj[i-1]['koordinatoX']) komKoordinatoX.append(itineroj[i-1]['koordinatoX'])
komKoordinatoY.append(itineroj[i-1]['koordinatoY']) komKoordinatoY.append(itineroj[i-1]['koordinatoY'])
komKoordinatoZ.append(itineroj[i-1]['koordinatoZ']) komKoordinatoZ.append(itineroj[i-1]['koordinatoZ'])
statusoId.append(1) statusoId.append(1) # новая задача
fin_koordX.append(itineroj[i]['koordinatoX']) fin_koordX.append(itineroj[i]['koordinatoX'])
fin_koordY.append(itineroj[i]['koordinatoY']) fin_koordY.append(itineroj[i]['koordinatoY'])
fin_koordZ.append(itineroj[i]['koordinatoZ']) fin_koordZ.append(itineroj[i]['koordinatoZ'])
i += 1 i += 1
var query = JSON.print({ 'query': 'mutation ($uuid:UUID, $koordX:Float, $koordY:Float, $koordZ:Float, ' + if !id:
id = Net.get_current_query_id()
var query = JSON.print({
'type': 'start',
'id': '%s' % id,
'payload':{ 'query': 'mutation ($uuid:UUID, $koordX:Float, $koordY:Float, $koordZ:Float, ' +
'$tipoId:Int, $kategorio:[Int], $nomo:String, $priskribo:String, $statusoId:[Int], $projekto_uuid: String,' + '$tipoId:Int, $kategorio:[Int], $nomo:String, $priskribo:String, $statusoId:[Int], $projekto_uuid: String,' +
'$komKoordinatoX:[Float], $komKoordinatoY:[Float], $komKoordinatoZ:[Float], $tipoPosedantoId:Int,' + '$komKoordinatoX:[Float], $komKoordinatoY:[Float], $komKoordinatoZ:[Float], $tipoPosedantoId:Int,' +
'$fin_koordX:[Float], $fin_koordY:[Float], $fin_koordZ:[Float], $pozicio:[Int], $statusoPosedantoId:Int,' + '$fin_koordX:[Float], $fin_koordY:[Float], $fin_koordZ:[Float], $pozicio:[Int], $statusoPosedantoId:Int,' +
...@@ -107,14 +118,14 @@ func instalo_tasko_posedanto_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, ...@@ -107,14 +118,14 @@ func instalo_tasko_posedanto_koord(uuid, projekto_uuid, kom_koordX, kom_koordY,
"fin_koordY":fin_koordY, "fin_koordZ":fin_koordZ, "tipoPosedantoId":tipoPosedantoId, "fin_koordY":fin_koordY, "fin_koordZ":fin_koordZ, "tipoPosedantoId":tipoPosedantoId,
"statusoPosedantoId":statusoPosedantoId, "objektoUuid":uuid, "pozicio":pozicio, "statusoPosedantoId":statusoPosedantoId, "objektoUuid":uuid, "pozicio":pozicio,
"komKoordinatoX":komKoordinatoX, "komKoordinatoY":komKoordinatoY, "komKoordinatoZ":komKoordinatoZ, "komKoordinatoX":komKoordinatoX, "komKoordinatoY":komKoordinatoY, "komKoordinatoZ":komKoordinatoZ,
"realecoId":Global.realeco}}) "realecoId":Global.realeco}}})
# print('===instalo_tasko_posedanto_koord===',query) # print('===instalo_tasko_posedanto_koord===',query)
return query return query
# создаём задачу, устанавливаем координаты объекту, изменяем финальные координаты проекту # создаём задачу, устанавливаем координаты объекту, изменяем финальные координаты проекту
func instalo_tasko_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ, func instalo_tasko_koord_json(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ,
fin_koordX, fin_koordY, fin_koordZ): fin_koordX, fin_koordY, fin_koordZ, id=0):
var posedantoTipoId = 1 var posedantoTipoId = 1
var posedantoStatusoId = 1 var posedantoStatusoId = 1
var tipoId = 2 var tipoId = 2
...@@ -122,7 +133,12 @@ func instalo_tasko_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ ...@@ -122,7 +133,12 @@ func instalo_tasko_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ
var statusoId = 2 var statusoId = 2
var nomo = "Movado" var nomo = "Movado"
var priskribo = "Movado de objekto" var priskribo = "Movado de objekto"
var query = JSON.print({ 'query': 'mutation ($uuid:UUID, $koordX:Float, $koordY:Float, $koordZ:Float, '+ if !id:
id = Net.get_current_query_id()
var query = JSON.print({
'type': 'start',
'id': '%s' % id,
'payload':{ 'query': 'mutation ($uuid:UUID, $koordX:Float, $koordY:Float, $koordZ:Float, '+
'$tipoId:Int, $kategorio:[Int], $nomo:String, $priskribo:String, $statusoId:Int, $projekto_uuid: UUID,'+ '$tipoId:Int, $kategorio:[Int], $nomo:String, $priskribo:String, $statusoId:Int, $projekto_uuid: UUID,'+
'$fin_koordX:Float, $fin_koordY:Float, $fin_koordZ:Float, $projektoUuid: String, '+ '$fin_koordX:Float, $fin_koordY:Float, $fin_koordZ:Float, $projektoUuid: String, '+
'$posedantoTipoId:Int, $posedantoStatusoId:Int, $objektoUuid:String, '+ '$posedantoTipoId:Int, $posedantoStatusoId:Int, $objektoUuid:String, '+
...@@ -147,25 +163,47 @@ func instalo_tasko_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ ...@@ -147,25 +163,47 @@ func instalo_tasko_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ
"statusoId": statusoId, "projekto_uuid": projekto_uuid, "projektoUuid": projekto_uuid, "statusoId": statusoId, "projekto_uuid": projekto_uuid, "projektoUuid": projekto_uuid,
"fin_koordX":fin_koordX, "fin_koordY":fin_koordY, "fin_koordZ":fin_koordZ, "fin_koordX":fin_koordX, "fin_koordY":fin_koordY, "fin_koordZ":fin_koordZ,
"posedantoStatusoId":posedantoStatusoId, "posedantoTipoId":posedantoTipoId, "posedantoStatusoId":posedantoStatusoId, "posedantoTipoId":posedantoTipoId,
"objektoUuid":uuid, "realecoId":Global.realeco } }) "objektoUuid":uuid, "realecoId":Global.realeco } }})
# print('===instalo_tasko_koord===',query) # print('===instalo_tasko_koord===',query)
return query return query
# # завершение задачи
# func finado_tasko(tasko_uuid, statusoId = 4):
# return JSON.print({ 'query': 'mutation ($uuid:UUID, '+
# ' $statusoId:Int, )'+
# '{ redaktuUniversoTaskoj (uuid: $uuid, '+
# ' statusoId:$statusoId) { status '+
# ' message universoTaskoj { uuid } } }',
# 'variables': {"uuid":tasko_uuid, "statusoId": statusoId } })
# завершение задачи # завершение задачи
func finado_tasko(tasko_uuid, statusoId = 4): #!!! хорошо бы отправлять координаты до куда долетел по факту
return JSON.print({ 'query': 'mutation ($uuid:UUID, '+ func finado_tasko(tasko_uuid, statusoId = 4, id=0):
if !id:
id = Net.get_current_query_id()
var query = JSON.print({
'type': 'start',
'id': '%s' % id,
'payload':{ 'query': 'mutation ($uuid:UUID, '+
' $statusoId:Int, )'+ ' $statusoId:Int, )'+
'{ redaktuUniversoTaskoj (uuid: $uuid, '+ '{ redaktuUniversoTaskoj (uuid: $uuid, '+
' statusoId:$statusoId) { status '+ ' statusoId:$statusoId) { status '+
' message universoTaskoj { uuid } } }', ' message universoTaskoj { uuid } } }',
'variables': {"uuid":tasko_uuid, "statusoId": statusoId } }) 'variables': {"uuid":tasko_uuid, "statusoId": statusoId } }})
return query
# завершение задачи и проекта # завершение задачи и проекта
func finado_projeko_tasko(projekto_uuid, tasko_uuid): func finado_projekto_tasko_json(projekto_uuid, tasko_uuid, id=0):
var statusoId = 4 var statusoId = 4
return JSON.print({ 'query': 'mutation ($tasko_uuid:UUID, $projekto_uuid:UUID, '+ if !id:
id = Net.get_current_query_id()
return JSON.print({
'type': 'start',
'id': '%s' % id,
'payload':{ 'query': 'mutation ($tasko_uuid:UUID, $projekto_uuid:UUID, '+
' $statusoId:Int, )'+ ' $statusoId:Int, )'+
'{ redaktuUniversoTaskoj (uuid: $tasko_uuid, '+ '{ redaktuUniversoTaskoj (uuid: $tasko_uuid, '+
' statusoId:$statusoId) { status '+ ' statusoId:$statusoId) { status '+
...@@ -174,15 +212,14 @@ func finado_projeko_tasko(projekto_uuid, tasko_uuid): ...@@ -174,15 +212,14 @@ func finado_projeko_tasko(projekto_uuid, tasko_uuid):
' statusoId:$statusoId) { status '+ ' statusoId:$statusoId) { status '+
' message universoProjekto { uuid } } '+ ' message universoProjekto { uuid } } '+
'}', '}',
'variables': {"tasko_uuid":tasko_uuid, "statusoId": statusoId, "projekto_uuid":projekto_uuid } }) 'variables': {"tasko_uuid":tasko_uuid, "statusoId": statusoId, "projekto_uuid":projekto_uuid } } })
# завершение проекта # завершение проекта
func finado_projeko_json(projekto_uuid, id=0): func finado_projeko_json(projekto_uuid, id=0):
var statusoId = 4 # Закрыт var statusoId = 4 # Закрыт
if !id: if !id:
id = Net.current_query_id id = Net.get_current_query_id()
Net.current_query_id += 1
return JSON.print({ return JSON.print({
'type': 'start', 'type': 'start',
'id': '%s' % id, 'id': '%s' % id,
...@@ -197,8 +234,7 @@ func finado_projeko_json(projekto_uuid, id=0): ...@@ -197,8 +234,7 @@ func finado_projeko_json(projekto_uuid, id=0):
# подписка на действия в кубе # подписка на действия в кубе
func kubo_json(id=0): func kubo_json(id=0):
if !id: if !id:
id = Net.current_query_id id = Net.get_current_query_id()
Net.current_query_id += 1
var kategorio = 3 # категория движения объектов в космосе var kategorio = 3 # категория движения объектов в космосе
return JSON.print({ return JSON.print({
'type': 'start', 'type': 'start',
...@@ -215,16 +251,3 @@ func kubo_json(id=0): ...@@ -215,16 +251,3 @@ func kubo_json(id=0):
'variables': {"kuboj": Global.kubo, "realeco": Global.realeco, "kategorio":kategorio } }}) 'variables': {"kuboj": Global.kubo, "realeco": Global.realeco, "kategorio":kategorio } }})
func test_json(id=0):
if !id:
id = Net.current_query_id
Net.current_query_id += 1
return JSON.print({
'type': 'start',
'id': '%s' % id,
'payload':{ 'query': 'subscription '+
'{ mesagxiloEventoj (babilejoj: [1,2]) { ' +
'evento ' +
'babilejo { uuid } } }'}})
...@@ -9,63 +9,81 @@ const Zoom_Step: float = 1.0 ...@@ -9,63 +9,81 @@ const Zoom_Step: float = 1.0
#const MIN_ROT_Y = -1.55 #(89 градусов) #const MIN_ROT_Y = -1.55 #(89 градусов)
#const MAX_ROT_Y = 0.79 #(45 градусов) #const MAX_ROT_Y = 0.79 #(45 градусов)
var max_speed =1000.0 var max_speed =500.0
# текущая скорость
var current_speed =0 var current_speed =0
var acceleration = 0.5 var acceleration = 1
var way_point: Vector3 = Vector3() # Координаты точки, в которую летим var way_point: Vector3 = Vector3() # Координаты точки, в которую летим
var target_dir: Vector3 = Vector3.ZERO #направление на эту точку от текущей позиции корабля var target_dir: Vector3 = Vector3.ZERO #направление на эту точку от текущей позиции корабля
var target_rot #положение корабля, которое надо принять, чтобы нацелиться на точку. var target_rot = null #положение корабля, которое надо принять, чтобы нацелиться на точку.
var speed_rotation =0.03 var speed_rotation = 1
var middle_mouse_pressed = false var middle_mouse_pressed = false
var docking_rotation var docking_rotation
var uuid #uuid активного корабля игрока var uuid #uuid активного корабля игрока
var projekto_uuid
func _ready(): func _ready():
$CollisionShape.queue_free() $CollisionShape.queue_free()
pass
func _physics_process(delta): func _physics_process(delta):
if target_dir != Vector3.ZERO: #Если цель существует, двигаемся # если категория задачи равна категории движения объекта, тогда двигаемся
target_dir = (way_point - translation).normalized() if !(Global.fenestro_itinero.itineroj.empty() or \
if translation.distance_to(way_point) > max_speed*delta/acceleration: Global.fenestro_itinero.itinero_pause) and \
current_speed = lerp(current_speed,max_speed,delta*acceleration) (Global.fenestro_itinero.itineroj.front()['kategorio']==Global.kategorio_movado): #Если цель существует, двигаемся
transform.basis = Basis(Quat(transform.basis).slerp(target_rot,speed_rotation)) #потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля if !target_rot:
else: # print('target_rot = ',Global.fenestro_itinero.itineroj.front()['transform'].origin)
if translation.distance_to(way_point) <0.01: target_rot = Quat(transform.looking_at(Global.fenestro_itinero.itineroj.front()['transform'].origin,Vector3.UP).basis) #запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
if docking_rotation !=null:
transform.basis = Basis(Quat(docking_rotation)) var target_dir = (Global.fenestro_itinero.itineroj.front()['transform'].origin - translation).normalized()
translation = way_point var distance = translation.distance_to(Global.fenestro_itinero.itineroj.front()['transform'].origin)
clear_way_point() if (len (Global.fenestro_itinero.itineroj)>1) and \
print("doexali") (Global.fenestro_itinero.itineroj[1]['kategorio']==Global.kategorio_movado):
# останавливаем таймер передачи данных на сервер # проверяем, если следующая точка является движением
$"../timer".stop() if distance <1: #Если это не последняя точка, то мы не тормозим, так что завышаем расстояние, чтобы не проскочить эту точку
#отправка последних координат и закрытие задачи с проектом dec_route()
finofara_flugo()
return return
current_speed = lerp(current_speed,50,delta*acceleration) current_speed = lerp(current_speed,max_speed,delta*acceleration)#ускоряемся
transform.basis = transform.basis.slerp(target_rot,speed_rotation*delta) #потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
if docking_rotation != null: else:
transform.basis = Basis(Quat(transform.basis).slerp(docking_rotation,speed_rotation*1.5)) #поворачиваем в дефолтное состояние, чтобы сесть if distance > max_speed*delta/acceleration:#Тут сомнительная формула от фонаря, вычисляющая примерно откуда надо начинать тормозить корабль.
current_speed = lerp(current_speed,max_speed,delta*acceleration)#ускоряемся
var a = Quat(transform.basis)
var c = 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: #Если это последняя точка, то мы тормозим, и задаём минимальное расстояние, чтобы точнее выставить корабль
current_speed = lerp(current_speed,50,delta*acceleration)#замедляемся
if Global.fenestro_itinero.itineroj.front()['transform'].basis !=Basis.IDENTITY:
transform.basis = transform.basis.slerp(Quat(Global.fenestro_itinero.itineroj.front()['transform'].basis),speed_rotation*delta*1.5) #поворачиваем в дефолтное состояние, чтобы сесть
if distance <0.01:
if Global.fenestro_itinero.itineroj.front()['transform'].basis !=Basis.IDENTITY:
transform.basis = Global.fenestro_itinero.itineroj.front()['transform'].basis
translation = Global.fenestro_itinero.itineroj.front()['transform'].origin
clear_route()
return
# warning-ignore:return_value_discarded # warning-ignore:return_value_discarded
move_and_slide(target_dir*delta*current_speed) #Двигаемся к цели move_and_slide(target_dir*delta*current_speed) #Двигаемся к цели и тут можно передать transform на сервер
Global.fenestro_itinero.distance_to(translation)
Title.get_node("CanvasLayer/UI/Objektoj/Window").distance_to(translation) Title.get_node("CanvasLayer/UI/Objektoj/Window").distance_to(translation)
func set_way_point(position, dock): func rotate_start():# поворачиваем корабль носом по ходу движения
docking_rotation = dock var front = Transform(Basis.IDENTITY, Vector3(Global.fenestro_itinero.itineroj.front()['koordinatoX'],
way_point = position # устанавливаем точку цели Global.fenestro_itinero.itineroj.front()['koordinatoY'],
target_dir = (way_point - translation).normalized() # устанавливаем направление движение на цель. Global.fenestro_itinero.itineroj.front()['koordinatoZ']))
target_rot = Quat(transform.looking_at(way_point,Vector3.UP).basis) #запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего. target_rot = Quat(transform.looking_at(front.origin,Vector3.UP).basis) #запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
func clear_way_point():
target_dir = Vector3.ZERO #очищаем цель
way_point = Vector3.ZERO
docking_rotation = null
current_speed = 0
func dec_route():
target_rot = null
Global.fenestro_itinero.malmultigi_unua()
rotate_start()
func clear_route():
target_rot = null
# достигли цели, закрываем проект
Global.fenestro_itinero.fermi_projekto_tasko()
const QueryObject = preload("../skriptoj/queries.gd") const QueryObject = preload("../skriptoj/queries.gd")
...@@ -80,86 +98,6 @@ func _on_timer_timeout(): ...@@ -80,86 +98,6 @@ func _on_timer_timeout():
rotation.y, rotation.z) rotation.y, rotation.z)
) )
#добавление в список маршрута с предварительным очишением маршрута
func add_itinero():
Global.fenestro_itinero.add_itinero('','', 'точка в космосе',
way_point.x, way_point.y,
way_point.z, translation.distance_to(way_point))
#передача данных на сервер при отправке корабля по первой цели
func vojkomenco():
if len(Global.itineroj)==0:
return 404
var q = QueryObject.new()
if !projekto_uuid:#если проекта нет, то создаём
# цель маршрута берём из itineroj
var count_itineroj=len(Global.itineroj)-1
$"../http_projekto".request(q.URL, Global.backend_headers, true, 2,
q.instalo_projekto(uuid,
translation.x, #kom_koordX
translation.y, #kom_koordY
translation.z, #kom_koordZ
Global.itineroj[count_itineroj]['koordinatoX'], #fin_koordX
Global.itineroj[count_itineroj]['koordinatoY'], #fin_koordY
Global.itineroj[count_itineroj]['koordinatoZ'] #fin_koordZ
))
else:#проект есть, изменяем задачу
# ставим задачу в выполененную
# надо использовать другой request, не от поседанто, т.к. поседанто используется при /
# установке владельца задачи и этот может не успеть отработать
$"../http_finado".request(q.URL, Global.backend_headers, true, 2,
q.finado_tasko(Global.itineroj[0]['uuid_tasko']))
Global.itineroj.remove(0)#удаляем задачу
# изменяем цель проекта
$"../http_tasko".request(q.URL, Global.backend_headers, true, 2,
q.instalo_tasko_koord(
uuid, projekto_uuid,
translation.x, #kom_koordX
translation.y, #kom_koordY
translation.z, #kom_koordZ
Global.itineroj[0]['koordinatoX'], #fin_koordX
Global.itineroj[0]['koordinatoY'], #fin_koordY
Global.itineroj[0]['koordinatoZ'] #fin_koordZ
))
Global.fenestro_itinero.FillItemList()
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero").disabled=true
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next").disabled=false
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin").disabled=false
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_clear").disabled=false
func finofara_flugo():
if len(Global.itineroj)==0:
return 404 # маршрута нет, закрывать нечего, выходим из процедуры
if projekto_uuid:
var q = QueryObject.new()
# если есть очередь в задачах, то закрываем только текущую задачу и запускаем в работу следующую
if len(Global.itineroj)==1:
$"../http_finado".request(q.URL, Global.backend_headers, true, 2,
q.finado_projeko_tasko(projekto_uuid, Global.itineroj[0]['uuid_tasko']))
Global.itineroj.clear()
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/ItemList").clear()
projekto_uuid=''
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero").disabled=false
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next").disabled=true
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin").disabled=true
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_clear").disabled=true
else:
$"../http_posedanto".request(q.URL, Global.backend_headers, true, 2,
q.finado_tasko(Global.itineroj[0]['uuid_tasko']))
# берём следующую задачу в работу
Global.itineroj.remove(0)
Global.fenestro_itinero.FillItemList()
# изменяем следующую задачу на "в работе"
$"../http_finado".request(q.URL, Global.backend_headers, true, 2,
q.finado_tasko(Global.itineroj[0]['uuid_tasko'],2))
var position = Vector3(Global.itineroj[0]['koordinatoX'],
Global.itineroj[0]['koordinatoY'],
Global.itineroj[0]['koordinatoZ'])
set_way_point(position,null)
$"../way_point".set_way_point(position)
#запускаем таймер
$"../timer".start()
...@@ -4,16 +4,18 @@ extends Spatial ...@@ -4,16 +4,18 @@ extends Spatial
const QueryObject = preload("queries.gd") const QueryObject = preload("queries.gd")
# warning-ignore:unused_signal
signal load_objektoj signal load_objektoj
var id_projekto_direkt_del = [] # список проектов на удаление var id_projekto_direkt_del = [] # список проектов на удаление
var choose = true
var subscription_id var subscription_id
func _ready(): func _ready():
$Control.camera = $camera
# подключаем сигнал для обработки входящих данных # подключаем сигнал для обработки входящих данных
var err = Net.connect("input_data", self, "_on_data") var err = Net.connect("input_data", self, "_on_data")
if err: if err:
...@@ -23,18 +25,17 @@ func _ready(): ...@@ -23,18 +25,17 @@ func _ready():
# считываем размер экрана и задаём затемнение на весь экран # считываем размер экрана и задаём затемнение на весь экран
$ui/loading.margin_right = get_node("/root").get_viewport().size.x $ui/loading.margin_right = get_node("/root").get_viewport().size.x
$ui/loading.margin_bottom = get_node("/root").get_viewport().size.y $ui/loading.margin_bottom = get_node("/root").get_viewport().size.y
# $b_itinero.margin_left = get_node("/root").get_viewport().size.x - 100
# $b_itinero.margin_top = get_node("/root").get_viewport().size.y-50
# создаём свой корабль # создаём свой корабль
var ship = create_ship(Global.direktebla_objekto[Global.realeco-2]) var ship = create_ship(Global.direktebla_objekto[Global.realeco-2])
#если корабль игрока, то брать данные из direktebla_objekto #если корабль игрока, то брать данные из direktebla_objekto
$main_camera.translation=Vector3( $camera.translation=Vector3(
Global.direktebla_objekto[Global.realeco-2]['koordinatoX'], Global.direktebla_objekto[Global.realeco-2]['koordinatoX'],
Global.direktebla_objekto[Global.realeco-2]['koordinatoY'], Global.direktebla_objekto[Global.realeco-2]['koordinatoY'],
Global.direktebla_objekto[Global.realeco-2]['koordinatoZ']+22 Global.direktebla_objekto[Global.realeco-2]['koordinatoZ']+22
) )
add_child(ship,true) add_child(ship,true)
$camera.point_of_interest = ship
for i in get_children(): for i in get_children():
if has_signal(i,"new_way_point"): if has_signal(i,"new_way_point"):
...@@ -42,14 +43,15 @@ func _ready(): ...@@ -42,14 +43,15 @@ func _ready():
subscribtion_kubo() subscribtion_kubo()
func _on_data(): func _on_data():
var i_data_server = 0 var i_data_server = 0
for on_data in Net.data_server: for on_data in Net.data_server:
# print('on_data=', on_data) # print('on_data=', on_data)
# print('on_data[id] =',on_data['id'],' id_projekto_direkt_del=',id_projekto_direkt_del) # print('on_data[id] =',on_data['id'],' id_projekto_direkt_del=',id_projekto_direkt_del)
var index = id_projekto_direkt_del.find(on_data['id']) var index = id_projekto_direkt_del.find(int(on_data['id']))
# print('index=',index,' ::: ', typeof(index), " == ", typeof(on_data['id'])) # print('index=',index,' ::: ', typeof(index), " == ", typeof(on_data['id']))
if index > -1: # находится в спике удаляемых объектов if index > -1: # находится в списке удаляемых объектов
print('=== Удалили проект управляемого объекта') print('=== Удалили проект управляемого объекта')
# удаляем из списка # удаляем из списка
var idx_prj = 0 #индекс массива для удаления var idx_prj = 0 #индекс массива для удаления
...@@ -63,6 +65,7 @@ func _on_data(): ...@@ -63,6 +65,7 @@ func _on_data():
# пришло сообщение, по какому объекту, в каком проекте, какая задача изменена # пришло сообщение, по какому объекту, в каком проекте, какая задача изменена
sxangxi_tasko(on_data['payload']['data']) sxangxi_tasko(on_data['payload']['data'])
print('=== subscription_id ===',on_data) print('=== subscription_id ===',on_data)
Net.data_server.remove(i_data_server)
else: else:
print('on_data else=', on_data) print('on_data else=', on_data)
# elif on_data['payload']['data'].get('filteredUniversoObjekto'): # elif on_data['payload']['data'].get('filteredUniversoObjekto'):
...@@ -95,21 +98,12 @@ func subscribtion_kubo(): ...@@ -95,21 +98,12 @@ func subscribtion_kubo():
Net.send_json(q.kubo_json(subscription_id)) Net.send_json(q.kubo_json(subscription_id))
# warning-ignore:unused_argument
func _input(event):
if Input.is_action_just_pressed("ui_select"):
choose=!choose
if choose:
$main_camera.set_privot($ship)
else:
$main_camera.set_privot(null)
func set_way_point(position,dock): func set_way_point(position,dock):
get_node("ship").add_itinero()
#останавливаем таймер #останавливаем таймер
$timer.stop() $timer.stop()
$ship.set_way_point(position,dock) $ship.set_way_point(position,dock)
$way_point.set_way_point(position) $way_point.set_way_point(position)
get_node("ship").add_itinero('',position.x, position.y, position.z,-1)
#передаём текущие координаты #передаём текущие координаты
$ship.vojkomenco()#начинаем движение $ship.vojkomenco()#начинаем движение
#запускаем таймер #запускаем таймер
...@@ -125,32 +119,32 @@ func has_signal(node, sgnl): ...@@ -125,32 +119,32 @@ func has_signal(node, sgnl):
return false return false
# записав проект в базу, получили его uuid ## записав проект в базу, получили его uuid
# warning-ignore:unused_argument ## warning-ignore:unused_argument
# warning-ignore:unused_argument ## warning-ignore:unused_argument
# warning-ignore:unused_argument ## warning-ignore:unused_argument
func _on_http_projekto_request_completed(result, response_code, headers, body): #func _on_http_projekto_request_completed(result, response_code, headers, body):
var resp = body.get_string_from_utf8() # var resp = body.get_string_from_utf8()
var parsed_resp = parse_json(resp) # var parsed_resp = parse_json(resp)
var simpled_data = parsed_resp['data']['redaktuUniversoProjekto']['universoProjekto'] # var simpled_data = parsed_resp['data']['redaktuUniversoProjekto']['universoProjekto']
var uuid = simpled_data['uuid'] # var uuid = simpled_data['uuid']
$"ship".projekto_uuid=uuid # $"ship".projekto_uuid=uuid
# теперь создаём задачу с координатами # # теперь создаём задачу с координатами
var q = QueryObject.new() # var q = QueryObject.new()
Global.direktebla_objekto[Global.realeco-2]['koordinatoX'] = $ship.translation.x # Global.direktebla_objekto[Global.realeco-2]['koordinatoX'] = $ship.translation.x
Global.direktebla_objekto[Global.realeco-2]['koordinatoY'] = $ship.translation.y # Global.direktebla_objekto[Global.realeco-2]['koordinatoY'] = $ship.translation.y
Global.direktebla_objekto[Global.realeco-2]['koordinatoZ'] = $ship.translation.z # Global.direktebla_objekto[Global.realeco-2]['koordinatoZ'] = $ship.translation.z
Global.direktebla_objekto[Global.realeco-2]['rotationX'] = $ship.rotation.x # Global.direktebla_objekto[Global.realeco-2]['rotationX'] = $ship.rotation.x
Global.direktebla_objekto[Global.realeco-2]['rotationY'] = $ship.rotation.y # Global.direktebla_objekto[Global.realeco-2]['rotationY'] = $ship.rotation.y
Global.direktebla_objekto[Global.realeco-2]['rotationZ'] = $ship.rotation.z # Global.direktebla_objekto[Global.realeco-2]['rotationZ'] = $ship.rotation.z
$"http_taskoj".request(q.URL, Global.backend_headers, true, 2, # $"http_taskoj".request(q.URL, Global.backend_headers, true, 2,
q.instalo_tasko_posedanto_koord( # q.instalo_tasko_posedanto_koord(
$"ship".uuid, $"ship".projekto_uuid, # $"ship".uuid, $"ship".projekto_uuid,
$"ship".translation.x, #kom_koordX # $"ship".translation.x, #kom_koordX
$"ship".translation.y, #kom_koordY # $"ship".translation.y, #kom_koordY
$"ship".translation.z, #kom_koordZ # $"ship".translation.z, #kom_koordZ
Global.itineroj # Global.itineroj
)) # ))
# warning-ignore:unused_argument # warning-ignore:unused_argument
...@@ -161,7 +155,7 @@ func _on_http_tasko_request_completed(result, response_code, headers, body): ...@@ -161,7 +155,7 @@ func _on_http_tasko_request_completed(result, response_code, headers, body):
var parsed_resp = parse_json(resp) var parsed_resp = parse_json(resp)
var simpled_data = parsed_resp['data']['redaktuUniversoTaskoj']['universoTaskoj'] var simpled_data = parsed_resp['data']['redaktuUniversoTaskoj']['universoTaskoj']
# print('===_on_http_tasko_request_completed===',parsed_resp) # print('===_on_http_tasko_request_completed===',parsed_resp)
# получаем список задач и помещаем в itinero # получаем uuid задачи и помещаем в itinero
Global.itineroj[0]['uuid_tasko']=simpled_data['uuid'] Global.itineroj[0]['uuid_tasko']=simpled_data['uuid']
...@@ -224,7 +218,7 @@ func create_ship(objecto): ...@@ -224,7 +218,7 @@ func create_ship(objecto):
ship.visible=true ship.visible=true
ship.uuid=objecto['uuid'] ship.uuid=objecto['uuid']
ship.add_to_group('create') ship.add_to_group('create')
$main_camera.set_privot(ship) $camera.set_privot(ship)
return ship return ship
...@@ -246,14 +240,15 @@ func _on_space_load_objektoj(): ...@@ -246,14 +240,15 @@ func _on_space_load_objektoj():
if len(projektoj)>0: if len(projektoj)>0:
if len(projektoj[0]['node']['tasko']['edges'])==0: if len(projektoj[0]['node']['tasko']['edges'])==0:
print('нужно закрыть проект!!!') print('нужно закрыть проект!!!')
id_projekto_direkt_del.push_back(Net.current_query_id) var id = Net.current_query_id
Net.current_query_id += 1 Net.current_query_id += 1
Net.send_json(q.finado_projeko_json(projektoj[0]['node']['uuid'],id_projekto_direkt_del[len(id_projekto_direkt_del)-1])) id_projekto_direkt_del.push_back(id)
Net.send_json(q.finado_projeko_json(projektoj[0]['node']['uuid'],id))
pass# нужно закрыть проект!!! pass# нужно закрыть проект!!!
else: else:
$ship.projekto_uuid=projektoj[0]['node']['uuid'] # очищаем маршрут
Global.fenestro_itinero.malplenigi_itinero()
#заполняем маршрут #заполняем маршрут
Global.itineroj.clear()
for tasko in projektoj[0]['node']['tasko']['edges']: for tasko in projektoj[0]['node']['tasko']['edges']:
if tasko['node']['statuso']['objId']==2:#задачу, которая "В работе" ставим первой if tasko['node']['statuso']['objId']==2:#задачу, которая "В работе" ставим первой
Global.fenestro_itinero.add_itinero( Global.fenestro_itinero.add_itinero(
...@@ -263,6 +258,9 @@ func _on_space_load_objektoj(): ...@@ -263,6 +258,9 @@ func _on_space_load_objektoj():
tasko['node']['finKoordinatoX'], tasko['node']['finKoordinatoX'],
tasko['node']['finKoordinatoY'], tasko['node']['finKoordinatoY'],
tasko['node']['finKoordinatoZ'], tasko['node']['finKoordinatoZ'],
Transform(Basis.IDENTITY, Vector3(tasko['node']['finKoordinatoX'],
tasko['node']['finKoordinatoY'],
tasko['node']['finKoordinatoZ'])),
$ship.translation.distance_to(Vector3( $ship.translation.distance_to(Vector3(
tasko['node']['finKoordinatoX'], tasko['node']['finKoordinatoX'],
tasko['node']['finKoordinatoY'], tasko['node']['finKoordinatoY'],
...@@ -278,28 +276,26 @@ func _on_space_load_objektoj(): ...@@ -278,28 +276,26 @@ func _on_space_load_objektoj():
tasko['node']['finKoordinatoX'], tasko['node']['finKoordinatoX'],
tasko['node']['finKoordinatoY'], tasko['node']['finKoordinatoY'],
tasko['node']['finKoordinatoZ'], tasko['node']['finKoordinatoZ'],
Transform(Basis.IDENTITY, Vector3(tasko['node']['finKoordinatoX'],
tasko['node']['finKoordinatoY'],
tasko['node']['finKoordinatoZ'])),
$ship.translation.distance_to(Vector3( $ship.translation.distance_to(Vector3(
tasko['node']['finKoordinatoX'], tasko['node']['finKoordinatoX'],
tasko['node']['finKoordinatoY'], tasko['node']['finKoordinatoY'],
tasko['node']['finKoordinatoZ'] tasko['node']['finKoordinatoZ']
))) )))
if len(Global.itineroj)==0: if len(Global.fenestro_itinero.itineroj)>0:# есть задачи на полёт, устанавливаем uuid проекта
$ship.projekto_uuid='' #задач на полёт нет, проект надо бы закрыть Global.fenestro_itinero.projekto_uuid=projektoj[0]['node']['uuid']
else:
#отправляем корабль по координатам #отправляем корабль по координатам
var position = Vector3(Global.itineroj[0]['koordinatoX'], Global.fenestro_itinero.itinero_pause = false
Global.itineroj[0]['koordinatoY'], #запускаем таймер
Global.itineroj[0]['koordinatoZ'])
Global.fenestro_itinero.FillItemList()
$ship.set_way_point(position,null)
$"way_point".set_way_point(position)
$timer.start() $timer.start()
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero").disabled=true Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/kom_itinero").disabled=true
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next").disabled=false Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_next").disabled=false
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin").disabled=false Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_fin").disabled=false
Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_clear").disabled=false Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/HBoxContainer/itinero_clear").disabled=false
else: else:
$ship.projekto_uuid='' Global.fenestro_itinero.projekto_uuid=''
# создаём остальные объекты в космосе # создаём остальные объекты в космосе
for item in Global.objektoj: for item in Global.objektoj:
...@@ -340,6 +336,8 @@ func _on_space_load_objektoj(): ...@@ -340,6 +336,8 @@ func _on_space_load_objektoj():
break; break;
for tasko in projektoj[0]['node']['tasko']['edges']: for tasko in projektoj[0]['node']['tasko']['edges']:
if tasko['node']['statuso']['objId']==1:# добавляем остальные задачи if tasko['node']['statuso']['objId']==1:# добавляем остальные задачи
# необходимо добавлять в порядке слодования задач
s.itineroj.push_back({ s.itineroj.push_back({
'uuid':tasko['node']['uuid'], 'uuid':tasko['node']['uuid'],
'koordinatoX':tasko['node']['finKoordinatoX'], 'koordinatoX':tasko['node']['finKoordinatoX'],
...@@ -387,3 +385,4 @@ func _on_space_tree_exiting(): ...@@ -387,3 +385,4 @@ func _on_space_tree_exiting():
for ch in get_children(): for ch in get_children():
if ch.is_in_group('create'): if ch.is_in_group('create'):
ch.free() ch.free()
Global.fenestro_kosmo = null
...@@ -7,6 +7,7 @@ export var colision_radius = 2.0 #радиус, на который надо п ...@@ -7,6 +7,7 @@ export var colision_radius = 2.0 #радиус, на который надо п
var active = false # есть ли точка пути, или ничего не указано var active = false # есть ли точка пути, или ничего не указано
# warning-ignore:unused_signal
signal new_way_point(position) # сигнал кораблю, что пора лететь в точку position signal new_way_point(position) # сигнал кораблю, что пора лететь в точку position
func _ready(): func _ready():
...@@ -14,10 +15,12 @@ func _ready(): ...@@ -14,10 +15,12 @@ func _ready():
offset =Vector2($TextureRect.rect_size/2) # получаем смещение контрол-нод в центр offset =Vector2($TextureRect.rect_size/2) # получаем смещение контрол-нод в центр
$Area/CollisionShape.shape.radius = colision_radius #задаём радиус обнуления вейпойнта. $Area/CollisionShape.shape.radius = colision_radius #задаём радиус обнуления вейпойнта.
# warning-ignore:unused_argument
func _input(event): func _input(event):
if Input.is_action_just_pressed("left_click"): # if Input.is_action_just_pressed("left_click"):
if event is InputEventMouseButton and event.doubleclick: # 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 и получаем точку, тут же устанавливаем новый вейпойнт с координатами
pass
# warning-ignore:unused_argument # warning-ignore:unused_argument
func _physics_process(delta): func _physics_process(delta):
......
...@@ -10,3 +10,14 @@ script = ExtResource( 1 ) ...@@ -10,3 +10,14 @@ script = ExtResource( 1 )
[node name="CollisionShape" type="CollisionShape" parent="."] [node name="CollisionShape" type="CollisionShape" parent="."]
transform = Transform( 3.42192, 0, 0, 0, 5.04557, 0, 0, 0, 9.53607, 0, 0, 0 ) transform = Transform( 3.42192, 0, 0, 0, 5.04557, 0, 0, 0, 9.53607, 0, 0, 0 )
shape = SubResource( 1 ) shape = SubResource( 1 )
[node name="control" type="Control" parent="."]
margin_right = 40.0
margin_bottom = 40.0
__meta__ = {
"_edit_use_anchors_": false
}
[node name="rapido" type="Label" parent="control"]
margin_right = 40.0
margin_bottom = 17.0
extends KinematicBody
# скрипт-предок для всех движущихся объектов
var uuid = ""
var objekto
var distance = 0 # дистанция до корабля игрока
var integreco = 100 # % целостности объекта
var potenco # мощность ресурса
var acceleration = 1 # для расчета движения корабля
var target_rot #положение корабля, которое надо принять, чтобы нацелиться на точку.
var speed_rotation =1
# максимальная скорость корабля
var max_speed =1000.0
# uuid проекта маршрута
var projekto_itineroj
#маршрут движения корабля
var itineroj = []
# uuid - uuid задачи
# front - transform координат цели движения (лучше высчитать один раз при добавлении)
# координаты цели полёта
# 'koordinatoX':
# 'koordinatoY':
# 'koordinatoZ':
# pozicio - в какой позиции должна находится задача
var pause = false # объект стоит на паузе и не летит
func _physics_process(delta):
if !(itineroj.empty() or pause): #Если цель существует, двигаемся
var front = Transform(Basis.IDENTITY,Vector3(itineroj.front()['koordinatoX'],
itineroj.front()['koordinatoY'], itineroj.front()['koordinatoZ']))
var target_dir = (front.origin - translation).normalized()
var distance = translation.distance_to(front.origin)
var current_speed = 0
if len (itineroj)>1:
if distance <1: #Если это не последняя точка, то мы не тормозим, так что завышаем расстояние, чтобы не проскочить эту точку
dec_route()
return
current_speed = lerp(current_speed,max_speed,delta*acceleration)#ускоряемся
transform.basis = transform.basis.slerp(target_rot,speed_rotation*delta) #потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
else:
if distance > max_speed*delta/acceleration:#Тут сомнительная формула от фонаря, вычисляющая примерно откуда надо начинать тормозить корабль.
current_speed = lerp(current_speed,max_speed,delta*acceleration)#ускоряемся
transform.basis = transform.basis.slerp(target_rot,speed_rotation*delta) #потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
else: #Если это последняя точка, то мы тормозим, и задаём минимальное расстояние, чтобы точнее выставить корабль
current_speed = lerp(current_speed,50,delta*acceleration)#замедляемся
if front.basis !=Basis.IDENTITY:
transform.basis = transform.basis.slerp(Quat(front.basis),speed_rotation*delta*1.5) #поворачиваем в дефолтное состояние, чтобы сесть
if distance <0.01:
if front.basis !=Basis.IDENTITY:
transform.basis = front.basis
translation = front.origin
route_gone()
return
# print(distance,": ",current_speed)
# print(len(itineroj))
# print('двигаемся = ',target_dir*delta*current_speed)
# warning-ignore:return_value_discarded
move_and_slide(target_dir*delta*current_speed) #Двигаемся к цели и тут можно передать transform на сервер
func rotate_start():# поворачиваем корабль носом по ходу движения
var front = Transform(Basis.IDENTITY, Vector3(itineroj.front()['koordinatoX'],
itineroj.front()['koordinatoY'], itineroj.front()['koordinatoZ']))
target_rot = Quat(transform.looking_at(front.origin,Vector3.UP).basis) #запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
func set_route(route_array):
if !route_array.empty():
itineroj.clear() #Просто приравнивать нельзя, так как изменяется адрес и если где-то на него кто-то ссылался в других сценах, то он теряет этот адрес Так что очищаем и копируем.
for i in route_array:
itineroj.push_back(i)
rotate_start()
func dec_route():
itineroj.pop_front()
set_route(itineroj.duplicate())
func route_gone():
itineroj.clear()
func add_route(route_array):
for i in route_array:
itineroj.push_back(i)
set_route(itineroj.duplicate())
# редактировать маршрут
func sxangxi_itinero(projekto, tasko):
if projekto['uuid']==projekto_itineroj: # изменение по задаче в текущем проекте
var new_tasko = true # признак необходимости новой задачи
var pos = 0 # номер позиции в списке задач
for it in itineroj:# проходим по всем задачам
if tasko['uuid'] == it['uuid']: # нашли соответствующую задачу
new_tasko = false
if tasko['statuso']['objId']==1: # новая - в очередь выполнения
it['koordinatoX'] = tasko['finKoordinatoX']
it['koordinatoY'] = tasko['finKoordinatoY']
it['koordinatoZ'] = tasko['finKoordinatoZ']
elif tasko['statuso']['objId']==2: # в работе
# задача должна быть первой в списке
if pos: # если не первая
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
elif tasko['statuso']['objId']==4: # закрыта
#удаляем из списка
itineroj.remove(pos)
elif tasko['statuso']['objId']==6: # приостановлена
pause = true
pos += 1
if new_tasko: # добавляем новую задачу в проект
if tasko['statuso']['objId']==1: # новая - в очередь выполнения
# нужно выстроить по очерёдности
pass
pos = 0
var pozicio = false
for it in itineroj:# проходим по всем задачам и находим нужную позицию
if itineroj['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']
})
elif tasko['statuso']['objId']==2: # в работе
# задача должна быть первой в списке
itineroj.push_front({
'uuid':tasko['uuid'],
'koordinatoX':tasko['finKoordinatoX'],
'koordinatoY':tasko['finKoordinatoY'],
'koordinatoZ':tasko['finKoordinatoZ'],
'pozicio': tasko['pozicio']
})
# отправляем корабль на уточнённые координаты, а точнее поворачиваем
rotate_start()
pause = false
elif tasko['statuso']['objId']==6: # приостановлена
itineroj.push_front({
'uuid':tasko['uuid'],
'koordinatoX': tasko['finKoordinatoX'],
'koordinatoY': tasko['finKoordinatoY'],
'koordinatoZ': tasko['finKoordinatoZ'],
'pozicio': tasko['pozicio']
})
pause = true
else: # первая запись нового проекта
route_gone()
projekto_itineroj = projekto['uuid']
itineroj.push_back({
'uuid':tasko['uuid'],
'koordinatoX': tasko['finKoordinatoX'],
'koordinatoY': tasko['finKoordinatoY'],
'koordinatoZ': tasko['finKoordinatoZ'],
'pozicio': tasko['pozicio']
})
if tasko['statuso']['objId']==2: # в работе
rotate_start()
pause = false
else:
pause = true
...@@ -14,18 +14,22 @@ var target_rot #положение корабля, которое надо пр ...@@ -14,18 +14,22 @@ var target_rot #положение корабля, которое надо пр
var speed_rotation =1 var speed_rotation =1
# максимальная скорость корабля # максимальная скорость корабля
var max_speed =50000.0 var max_speed =500.0
# текущая скорость
var current_speed =0
# uuid проекта маршрута # uuid проекта маршрута
var projekto_itineroj var projekto_itineroj
#маршрут движения корабля #маршрут движения корабля
var itineroj = [] var itineroj = []
#uuid - uuid задачи # uuid - uuid задачи
# front - transform координат цели движения (лучше высчитать один раз при добавлении)
# координаты цели полёта # координаты цели полёта
# 'koordinatoX': # 'koordinatoX':
# 'koordinatoY': # 'koordinatoY':
# 'koordinatoZ': # 'koordinatoZ':
# pozicio - в какой позиции должна находится задача
var pause = false # корабль стоит на паузе var pause = false # корабль стоит на паузе
func _ready(): func _ready():
...@@ -39,7 +43,6 @@ func _physics_process(delta): ...@@ -39,7 +43,6 @@ func _physics_process(delta):
itineroj.front()['koordinatoY'], itineroj.front()['koordinatoZ'])) itineroj.front()['koordinatoY'], itineroj.front()['koordinatoZ']))
var target_dir = (front.origin - translation).normalized() var target_dir = (front.origin - translation).normalized()
var distance = translation.distance_to(front.origin) var distance = translation.distance_to(front.origin)
var current_speed = 0
if len (itineroj)>1: if len (itineroj)>1:
if distance <1: #Если это не последняя точка, то мы не тормозим, так что завышаем расстояние, чтобы не проскочить эту точку if distance <1: #Если это не последняя точка, то мы не тормозим, так что завышаем расстояние, чтобы не проскочить эту точку
dec_route() dec_route()
...@@ -49,7 +52,10 @@ func _physics_process(delta): ...@@ -49,7 +52,10 @@ func _physics_process(delta):
else: else:
if distance > max_speed*delta/acceleration:#Тут сомнительная формула от фонаря, вычисляющая примерно откуда надо начинать тормозить корабль. if distance > max_speed*delta/acceleration:#Тут сомнительная формула от фонаря, вычисляющая примерно откуда надо начинать тормозить корабль.
current_speed = lerp(current_speed,max_speed,delta*acceleration)#ускоряемся current_speed = lerp(current_speed,max_speed,delta*acceleration)#ускоряемся
transform.basis = transform.basis.slerp(target_rot,speed_rotation*delta) #потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля var a = Quat(transform.basis)
var c = 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: #Если это последняя точка, то мы тормозим, и задаём минимальное расстояние, чтобы точнее выставить корабль
current_speed = lerp(current_speed,50,delta*acceleration)#замедляемся current_speed = lerp(current_speed,50,delta*acceleration)#замедляемся
if front.basis !=Basis.IDENTITY: if front.basis !=Basis.IDENTITY:
...@@ -177,7 +183,7 @@ func sxangxi_itinero(projekto, tasko): ...@@ -177,7 +183,7 @@ func sxangxi_itinero(projekto, tasko):
'pozicio': tasko['pozicio'] 'pozicio': tasko['pozicio']
}) })
pause = true pause = true
else: # новый проект else: # первая запись нового проекта
route_gone() route_gone()
projekto_itineroj = projekto['uuid'] projekto_itineroj = projekto['uuid']
itineroj.push_back({ itineroj.push_back({
......
...@@ -4,17 +4,20 @@ ...@@ -4,17 +4,20 @@
[ext_resource path="res://blokoj/objektoj/skriptoj/objekto.gd" type="Script" id=3] [ext_resource path="res://blokoj/objektoj/skriptoj/objekto.gd" type="Script" id=3]
[node name="Objekto" instance=ExtResource( 2 )] [node name="Objekto" instance=ExtResource( 2 )]
margin_left = 704.816
margin_top = 263.888
margin_right = 704.816
margin_bottom = 263.888
script = ExtResource( 3 ) script = ExtResource( 3 )
[node name="VBox" parent="Canvas" index="0"] [node name="VBox" parent="Canvas" index="0"]
visible = false margin_left = 704.816
margin_left = 81.8754 margin_top = 263.888
margin_top = 200.167 margin_right = 904.816
margin_right = 281.875 margin_bottom = 463.888
margin_bottom = 400.167
[node name="menuo_name" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="0"] [node name="menuo_name" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="0"]
margin_right = 156.0 margin_right = 155.0
text = "Объекты" text = "Объекты"
[node name="Button_fix" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="1"] [node name="Button_fix" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="1"]
...@@ -27,11 +30,10 @@ visible = false ...@@ -27,11 +30,10 @@ visible = false
visible = false visible = false
[node name="ItemList" type="ItemList" parent="Canvas/VBox/body_texture" index="1"] [node name="ItemList" type="ItemList" parent="Canvas/VBox/body_texture" index="1"]
anchor_right = 1.0 margin_right = 196.0
anchor_bottom = 1.0 margin_bottom = 158.0
margin_left = 6.0 size_flags_horizontal = 3
margin_top = 6.0 size_flags_vertical = 3
margin_right = -6.0
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
...@@ -6,14 +6,17 @@ ...@@ -6,14 +6,17 @@
[ext_resource path="res://blokoj/taskoj/skriptoj/http_request.gd" type="Script" id=4] [ext_resource path="res://blokoj/taskoj/skriptoj/http_request.gd" type="Script" id=4]
[node name="Taskoj" instance=ExtResource( 2 )] [node name="Taskoj" instance=ExtResource( 2 )]
margin_left = 121.901
margin_top = 278.253
margin_right = 121.901
margin_bottom = 278.253
script = ExtResource( 1 ) script = ExtResource( 1 )
[node name="VBox" parent="Canvas" index="0"] [node name="VBox" parent="Canvas" index="0"]
visible = false margin_left = 169.202
margin_left = 47.3008 margin_top = 318.369
margin_top = 40.1159 margin_right = 382.202
margin_right = 260.301 margin_bottom = 533.369
margin_bottom = 255.116
[node name="HBox_top" parent="Canvas/VBox" index="0"] [node name="HBox_top" parent="Canvas/VBox" index="0"]
margin_right = 213.0 margin_right = 213.0
...@@ -22,7 +25,7 @@ margin_right = 213.0 ...@@ -22,7 +25,7 @@ margin_right = 213.0
margin_right = 213.0 margin_right = 213.0
[node name="menuo_name" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="0"] [node name="menuo_name" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="0"]
margin_right = 170.0 margin_right = 168.0
text = "Задачи" text = "Задачи"
[node name="Button_fix" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="1"] [node name="Button_fix" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="1"]
...@@ -35,12 +38,12 @@ visible = false ...@@ -35,12 +38,12 @@ visible = false
visible = false visible = false
[node name="Button_x" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="4"] [node name="Button_x" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="4"]
margin_left = 174.0 margin_left = 172.0
margin_right = 193.0 margin_right = 191.0
[node name="body_texture" parent="Canvas/VBox" index="1"] [node name="body_texture" parent="Canvas/VBox" index="1"]
margin_right = 213.0 margin_right = 213.0
margin_bottom = 200.0 margin_bottom = 193.0
[node name="ItemList" type="ItemList" parent="Canvas/VBox/body_texture" index="1"] [node name="ItemList" type="ItemList" parent="Canvas/VBox/body_texture" index="1"]
anchor_right = 1.0 anchor_right = 1.0
...@@ -53,15 +56,15 @@ __meta__ = { ...@@ -53,15 +56,15 @@ __meta__ = {
} }
[node name="HBox_bottom" parent="Canvas/VBox" index="2"] [node name="HBox_bottom" parent="Canvas/VBox" index="2"]
margin_top = 200.0 margin_top = 193.0
margin_right = 213.0 margin_right = 213.0
margin_bottom = 215.0 margin_bottom = 215.0
[node name="bottom_texture1" parent="Canvas/VBox/HBox_bottom" index="0"] [node name="bottom_texture1" parent="Canvas/VBox/HBox_bottom" index="0"]
margin_right = 183.0 margin_right = 191.0
[node name="bottom_texture2" parent="Canvas/VBox/HBox_bottom" index="1"] [node name="bottom_texture2" parent="Canvas/VBox/HBox_bottom" index="1"]
margin_left = 183.0 margin_left = 191.0
margin_right = 213.0 margin_right = 213.0
[node name="HTTPProjektoRequestFind" type="HTTPRequest" parent="." index="1"] [node name="HTTPProjektoRequestFind" type="HTTPRequest" parent="." index="1"]
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
script = ExtResource( 2 ) script = ExtResource( 2 )
[node name="VBox" parent="Canvas" index="0"] [node name="VBox" parent="Canvas" index="0"]
visible = false
mouse_default_cursor_shape = 6 mouse_default_cursor_shape = 6
[node name="top_texture2" parent="Canvas/VBox/HBox_top" index="1"] [node name="top_texture2" parent="Canvas/VBox/HBox_top" index="1"]
......
...@@ -79,7 +79,9 @@ func _on_data_start(): ...@@ -79,7 +79,9 @@ func _on_data_start():
func _on_data(): func _on_data():
var i_data_server = 0 var i_data_server = 0
for on_data in Net.data_server: for on_data in Net.data_server:
if on_data['payload']['data'].get('filteredUniversoObjekto'): if !on_data['payload']['data']:
print('=== error ===',on_data)
elif on_data['payload']['data'] and on_data['payload']['data'].get('filteredUniversoObjekto'):
Global.objektoj.clear() Global.objektoj.clear()
var i = 0 var i = 0
for item in on_data['payload']['data']['filteredUniversoObjekto']['edges']: for item in on_data['payload']['data']['filteredUniversoObjekto']['edges']:
...@@ -276,6 +278,7 @@ func _on_interago_pressed(): ...@@ -276,6 +278,7 @@ func _on_interago_pressed():
$CanvasLayer/UI/interago/interago/Canvas/VBox.set_visible(true) $CanvasLayer/UI/interago/interago/Canvas/VBox.set_visible(true)
func _on_eliro_button_up(): func _on_eliro_button_up():
$CanvasLayer/UI/eliro/eliro/Canvas/Popup.popup()
$CanvasLayer/UI/eliro/eliro/Canvas/Popup.popup_centered() $CanvasLayer/UI/eliro/eliro/Canvas/Popup.popup_centered()
# запрашиваем объекты # запрашиваем объекты
...@@ -284,6 +287,9 @@ func load_objektoj(): ...@@ -284,6 +287,9 @@ func load_objektoj():
Net.send_json(q.get_objekto_json( 2, 3, 2, Global.kubo)) Net.send_json(q.get_objekto_json( 2, 3, 2, Global.kubo))
# $HTTPObjectoRequestFind.request(q.URL, Global.backend_headers, true, 2, q.objecto_query( 2, 3, 2, 1)) # $HTTPObjectoRequestFind.request(q.URL, Global.backend_headers, true, 2, q.objecto_query( 2, 3, 2, 1))
func _on_komerco_button_up(): func _on_komerco_button_up():
$CanvasLayer/UI/komerco/komerco/Canvas/VBox.set_visible(true) $CanvasLayer/UI/komerco/komerco/Canvas/VBox.set_visible(true)
...@@ -10,46 +10,5 @@ margin_left = -1024.0 ...@@ -10,46 +10,5 @@ margin_left = -1024.0
margin_right = -1024.0 margin_right = -1024.0
script = ExtResource( 1 ) script = ExtResource( 1 )
[node name="VBox" parent="Canvas" index="0"] [node name="MarginContainer" parent="canvas" index="0"]
visible = false visible = false
margin_left = 428.455
margin_top = 383.805
margin_right = 628.455
margin_bottom = 583.805
[node name="menuo_name" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="0"]
margin_right = 156.0
text = "Центр взаимодействия"
[node name="Button_fix" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="1"]
visible = false
[node name="Button_" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="2"]
visible = false
[node name="Button_full" parent="Canvas/VBox/HBox_top/top_texture2/HBox_buttons" index="3"]
visible = false
[node name="body_texture" parent="Canvas/VBox" index="1"]
margin_bottom = 162.0
[node name="resize_control" parent="Canvas/VBox/body_texture" index="0"]
margin_left = -7.0
margin_bottom = 44.0
[node name="ItemList" type="ItemList" parent="Canvas/VBox/body_texture" index="1"]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 6.0
margin_top = 6.0
margin_right = -6.0
__meta__ = {
"_edit_use_anchors_": false
}
[node name="kosmo" type="Button" parent="Canvas/VBox" index="2"]
margin_top = 162.0
margin_right = 200.0
margin_bottom = 185.0
text = "Космос"
[connection signal="pressed" from="Canvas/VBox/kosmo" to="." method="_on_kosmo_pressed"]
...@@ -75,7 +75,7 @@ func get_direktebla_kosmo_json(id=0): ...@@ -75,7 +75,7 @@ func get_direktebla_kosmo_json(id=0):
# задаём координаты и угол поворота объекту, удаляем связь по нахождению внутри # задаём координаты и угол поворота объекту, удаляем связь по нахождению внутри
func go_objekt_kosmo_query(uuid, koordX, koordY, koordZ, rotaciaX, rotaciaY, rotaciaZ, uuid_ligilo_del, kuboId = 1): func go_objekt_kosmo_query(uuid, koordX, koordY, koordZ, rotaciaX, rotaciaY, rotaciaZ, uuid_ligilo_del, kuboId=1):
var del = '' var del = ''
if uuid_ligilo_del: if uuid_ligilo_del:
del = ' redaktuUniversoObjektoLigiloj (uuid: "'+uuid_ligilo_del+'",' del = ' redaktuUniversoObjektoLigiloj (uuid: "'+uuid_ligilo_del+'",'
...@@ -127,7 +127,7 @@ func eniri_kosmostacio(projekto_uuid, tasko_uuid, station_uuid): ...@@ -127,7 +127,7 @@ func eniri_kosmostacio(projekto_uuid, tasko_uuid, station_uuid):
# statusoId - статус проекта (2=в работе) # statusoId - статус проекта (2=в работе)
# kategorioId - категория задач Универсо (3 - Движение объектов) # kategorioId - категория задач Универсо (3 - Движение объектов)
# tipoId - тип проекта Универсо (2 - Для объектов) # tipoId - тип проекта Универсо (2 - Для объектов)
func get_objekto_json(statusoId, kategorioId, tipoId, kuboId=1, id=1): func get_objekto_json(statusoId, kategorioId, tipoId, kuboId=1, id=0):
if !id: if !id:
id = Net.current_query_id id = Net.current_query_id
Net.current_query_id += 1 Net.current_query_id += 1
...@@ -167,3 +167,6 @@ func get_objekto_json(statusoId, kategorioId, tipoId, kuboId=1, id=1): ...@@ -167,3 +167,6 @@ func get_objekto_json(statusoId, kategorioId, tipoId, kuboId=1, id=1):
"realecoId":Global.realeco} } }) "realecoId":Global.realeco} } })
# print('===objecto_json=',query) # print('===objecto_json=',query)
return query return query
extends Node extends Node
# настройки по справочнику
# категория движения объекта
var kategorio_movado = 3
# Залогинен или нет # Залогинен или нет
var status = false var status = false
...@@ -25,16 +28,6 @@ var loading = false ...@@ -25,16 +28,6 @@ var loading = false
# Параллельные миры идут по порядку в соответсвии с базой минус один (реальная), # Параллельные миры идут по порядку в соответсвии с базой минус один (реальная),
# начиная с 0 # начиная с 0
var direktebla_objekto = [{'kosmo':false,},{'kosmo':false,},] var direktebla_objekto = [{'kosmo':false,},{'kosmo':false,},]
# маршрут движения управляемого объекта (список проектов с задачей маршрута)
var itineroj = []
#uuid_tasko - uuid задачи, когда уже летим
#uuid - uuid цели полёта, если это объект
#nomo - название объекта цели
# координаты цели полёта
# 'koordinatoX':
# 'koordinatoY':
# 'koordinatoZ':
# расстояние до цели полёта - distance
# окно (сцена) работы с маршрутом # окно (сцена) работы с маршрутом
var fenestro_itinero var fenestro_itinero
# сцена текущего космоса # сцена текущего космоса
......
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать