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

Merge branch 'develop' into 'develop'

Замена пушки и сдвинут корабль в доке

See merge request tehnokom/universo!151
владельцы 6feeac8b 9eec6b21
......@@ -194,3 +194,36 @@ func finado_projeko_json(projekto_uuid, id=0):
'}',
'variables': {"statusoId": statusoId, "projekto_uuid":projekto_uuid } }})
# подписка на действия в кубе
func kubo_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 ($kuboj:[Int]!)'+
'{ universoObjektoEventoj (kuboj: $kuboj) { evento '+
' objekto { uuid koordinatoX koordinatoY koordinatoZ} '+
' projekto {uuid} '+
' tasko { uuid komKoordinatoX komKoordinatoY '+
' komKoordinatoZ finKoordinatoX finKoordinatoY '+
' finKoordinatoZ pozicio statuso{objId} kategorio { '+
' edges { node { objId } } }} } '+
'}',
'variables': {"kuboj": Global.kubo } }})
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 } } }'}})
extends Spatial
var choose = true
# warning-ignore:unused_signal
const QueryObject = preload("queries.gd")
signal load_objektoj
var id_projekto_direkt_del = [] # список проектов на удаление
var choose = true
var subscription_id
func _ready():
# подключаем сигнал для обработки входящих данных
......@@ -33,14 +39,17 @@ func _ready():
for i in get_children():
if has_signal(i,"new_way_point"):
i.connect("new_way_point",self,"set_way_point")
subscribtion_kubo()
func _on_data():
var i_data_server = 0
for on_data in Net.data_server:
print('on_data[id] =',on_data['id'],' id_projekto_direkt_del=',id_projekto_direkt_del)
# print('on_data=', on_data)
# 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'])
print('index=',index)
if index!=-1: # находится в спике удаляемых объектов
# print('index=',index,' ::: ', typeof(index), " == ", typeof(on_data['id']))
if index > -1: # находится в спике удаляемых объектов
print('=== Удалили проект управляемого объекта')
# удаляем из списка
var idx_prj = 0 #индекс массива для удаления
......@@ -50,11 +59,42 @@ func _on_data():
idx_prj += 1
id_projekto_direkt_del.remove(index)
Net.data_server.remove(i_data_server)
elif int(on_data['id']) == subscription_id:
# пришло сообщение, по какому объекту, в каком проекте, какая задача изменена
sxangxi_tasko(on_data['payload']['data'])
print('=== subscription_id ===',on_data)
else:
print('on_data else=', on_data)
# elif on_data['payload']['data'].get('filteredUniversoObjekto'):
# pass
# Net.data_server.remove(i_data_server)
i_data_server += 1
# меняем задачу объекту
func sxangxi_tasko(on_data):
# пометка о нахождении нужного объекта
var objekto = false
for ch in get_children(): # проходим по всем созданным объектам в поисках нужного
if ch.is_in_group('create') and ('objekto' in ch):
if on_data['universoObjektoEventoj']['objekto']['uuid']==ch.uuid:
ch.sxangxi_itinero(on_data['universoObjektoEventoj']['projekto'],
on_data['universoObjektoEventoj']['tasko'])
objekto = true
if !objekto: # если объект не найден, то нужно его добавить
print('найден новый объект!!!')
pass
# подписка на действие в кубе нахождения
func subscribtion_kubo():
var q = QueryObject.new()
subscription_id = Net.current_query_id
Net.current_query_id += 1
# Net.send_json(q.test_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"):
......@@ -85,11 +125,6 @@ func has_signal(node, sgnl):
return false
const QueryObject = preload("queries.gd")
# записав проект в базу, получили его uuid
# warning-ignore:unused_argument
# warning-ignore:unused_argument
......@@ -203,10 +238,10 @@ func _on_space_load_objektoj():
print('нужно обнулить все проекты!!! должно быть на стороне сервера')
#нужно обнулить все проекты!!! должно быть на стороне сервера
for prj in projektoj:
id_projekto_direkt_del.push_back(Net.current_query_id)
var id = Net.current_query_id
Net.current_query_id += 1
Net.send_json(q.finado_projeko_json(prj['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(prj['node']['uuid'],id))
projektoj.clear()
if len(projektoj)>0:
if len(projektoj[0]['node']['tasko']['edges'])==0:
......
......@@ -16,7 +16,7 @@ func _on_CapKosmostacio_ready():
# ship.rotate_y(1.58)
ship.rotate_y(deg2rad(-90))
ship.translation.x = ship.translation.x + 26 # насколько въезжать в парковку
ship.translation.x = ship.translation.x + 26.4 # насколько въезжать в парковку
ship.translation.z = ship.translation.z - 5 # в сторону от центра
ship.translation.y = ship.translation.y + 2 # высота от пола
add_child(ship,true)
......
Это отличие свёрнуто
Это отличие свёрнуто
Это отличие свёрнуто
[gd_scene load_steps=13 format=2]
[gd_scene load_steps=16 format=2]
[ext_resource path="res://blokoj/kosmosxipoj/resursoj/laser_beam.tres" type="Material" id=1]
[ext_resource path="res://blokoj/kosmosxipoj/scenoj/moduloj/laser01/tubo.tscn" type="PackedScene" id=2]
[ext_resource path="res://blokoj/kosmosxipoj/scenoj/moduloj/laser01/platform.tscn" type="PackedScene" id=3]
[ext_resource path="res://blokoj/kosmosxipoj/scenoj/moduloj/laser01/turret.tscn" type="PackedScene" id=4]
[sub_resource type="GDScript" id=1]
script/source = "extends Spatial
......@@ -30,6 +33,7 @@ func rotate_gun(delta):
$laser.rotation_degrees.x = clamp($laser.rotation_degrees.x,x_limiter.x,x_limiter.y)# ограничиваем вращение пушки вниз, чтобы стреляла только в верхнюю полусферу
# $laser.rotation_degrees.y = clamp($laser.rotation_degrees.y,y_limiter.x,y_limiter.y)# ограничиваем вращение пушки по сторонам, если нужно
$gun_body.rotation.y = $laser.rotation.y
$Turret.rotation.y = $laser.rotation.y
func get_uuid(object):
......@@ -148,6 +152,7 @@ collide_with_areas = true
[node name="gun_stem" type="MeshInstance" parent="laser"]
transform = Transform( 1, 0, 0, 0, -1.62921e-07, -1, 0, 1, -1.62921e-07, 0, 0, -0.5 )
visible = false
mesh = SubResource( 2 )
material/0 = SubResource( 3 )
......@@ -180,6 +185,16 @@ cast_shadow = 0
mesh = SubResource( 9 )
material/0 = ExtResource( 1 )
[node name="tubo" parent="laser" instance=ExtResource( 2 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.2, 0 )
[node name="gun_body" type="MeshInstance" parent="."]
visible = false
mesh = SubResource( 10 )
material/0 = SubResource( 11 )
[node name="Platform" parent="." instance=ExtResource( 3 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.2, 0 )
[node name="Turret" parent="." instance=ExtResource( 4 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.2, 0 )
[gd_scene load_steps=2 format=2]
[ext_resource path="res://blokoj/kosmosxipoj/resursoj/Platform.glb" type="PackedScene" id=1]
[node name="Platform" instance=ExtResource( 1 )]
[node name="Platform" parent="." index="0"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.524, 0 )
[gd_scene load_steps=2 format=2]
[ext_resource path="res://blokoj/kosmosxipoj/resursoj/Laser.glb" type="PackedScene" id=1]
[node name="tubo" instance=ExtResource( 1 )]
[gd_scene load_steps=2 format=2]
[ext_resource path="res://blokoj/kosmosxipoj/resursoj/Turret.glb" type="PackedScene" id=1]
[node name="Turret" instance=ExtResource( 1 )]
......@@ -69,10 +69,23 @@ func create_sxipo(sxipo, objecto):
elif modulo['node']['ligilo']['resurso']['objId'] == 11: #Универсальный лазер
moduloj = laser.instance()
moduloj.uuid = modulo['node']['ligilo']['uuid']
moduloj.get_node("Turret").translation.y = 3.5
moduloj.get_node("Turret").translation.z = 1.1
moduloj.get_node("Platform").translation.y = 3.5
moduloj.get_node("Platform").translation.z = 1.1
moduloj.get_node("laser").translation.y = 4.7
moduloj.get_node("laser").translation.z = 1.1
moduloj.get_node("gun_body").translation.y = 4.2
moduloj.get_node("gun_body").translation.z = 0.6
moduloj.get_node("laser").translation.y = 4.2
moduloj.get_node("laser").translation.z = 0.6
# moduloj.get_node("laser").translation.y = 4.2
# moduloj.get_node("laser").translation.z = 0.6
# moduloj.get_node("laser/gun_stem").translation.y = 4.2
moduloj.get_node("laser/gun_stem").translation.z = -0.6
# moduloj.get_node("laser/beam/MeshInstance").translation.y = 4.2
......
......@@ -17,7 +17,7 @@ var speed_rotation =1
var max_speed =50000.0
# проект маршрута
# uuid проекта маршрута
var projekto_itineroj
#маршрут движения корабля
var itineroj = []
......@@ -26,14 +26,14 @@ var itineroj = []
# 'koordinatoX':
# 'koordinatoY':
# 'koordinatoZ':
var pause = false # корабль стоит на паузе
func _ready():
$CollisionShape.queue_free()
func _physics_process(delta):
if !itineroj.empty(): #Если цель существует, двигаемся
if !(itineroj.empty() or pause): #Если цель существует, двигаемся
# print('летит объект = ',uuid)
var front = Transform(Basis.IDENTITY,Vector3(itineroj.front()['koordinatoX'],
itineroj.front()['koordinatoY'], itineroj.front()['koordinatoZ']))
......@@ -66,25 +66,70 @@ func _physics_process(delta):
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)
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) #запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
rotate_start()
func dec_route():
itineroj.pop_front()
set_route(itineroj.duplicate())
func route_gone():
itineroj.clear()
# print("doexali") #Тут можно сообщить серверу, что цель достигнута
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_tasko']: # нашли соответствующую задачу
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: # добавляем новую задачу в проект
pass
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать