Коммит 01e9d39b создал по автору Vladimir levadnij's avatar Vladimir levadnij
Просмотр файлов

Merge branch 'develop' into 'master'

Формирование релиза проекта версии 0.8.0-alfo

See merge request tehnokom/universo!186
владельцы fa3ef46e 5d3b30da
Это отличие свёрнуто
extends Camera
var point_of_interest# к чему привязать камеру
var choose = false # привязать или отвязать камеру
var right_click_mode: bool= false
export var enabled = true setget set_enabled
export(int, "Visible", "Hidden", "Captured, Confined") var mouse_mode = 2
......@@ -22,7 +26,7 @@ export var distance_step: float = 2.0
# Movement settings
export (float, 0.0, 1.0) var acceleration = 0.1
export (float, 0.0, 0.0, 1.0) var deceleration = 0.1
export var max_speed = Vector3(1.0, 1.0, 1.0)
export var max_speed = Vector3(100.0, 100.0, 100.0)
export var local = true
# Intern variables.
......@@ -49,34 +53,40 @@ func _ready():
event.unicode = s
event.unicode = d
#
Input.set_mouse_mode(Input.MOUSE_MODE_CONFINED)
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
#func _input(event):
func _unhandled_input(event):
if freelook:
if Input.get_action_strength("right_click"):
if Input.is_action_just_pressed("right_click"):
right_click_mode = true;
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
if Input.is_action_just_released("right_click"):
right_click_mode = false;
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
if right_click_mode:
if event is InputEventMouseMotion:
_mouse_offset = event.relative
if Input.is_action_just_pressed("ui_select"):
choose=!choose
if choose:
set_privot(point_of_interest)
else:
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
set_privot(null)
func _input(event):
if privot:
if event.is_action_pressed("wheel_down"):
distance-=distance_step
if event.is_action_pressed("wheel_up"):
distance += distance_step
distance += (Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")) * distance_step * 0.5
distance = clamp(distance,distance_min,distance_max)
else:
_direction.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
_direction.y = Input.get_action_strength("ui_page_up") - Input.get_action_strength("ui_page_down")
_direction.z = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
func _physics_process(delta):
collide()
if privot:
distance += (Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")) * distance_step * 0.1
distance = clamp(distance,distance_min,distance_max)
distance_smooth =lerp(distance_smooth,distance,0.05)
set_translation(privot.get_translation())
translate_object_local(Vector3(0.0, 0.0, distance_smooth))
......@@ -114,6 +124,12 @@ func collide():
_direction.z =-2
func _update_movement(delta):
if !privot:
_direction.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
_direction.y = Input.get_action_strength("ui_page_up") - Input.get_action_strength("ui_page_down")
_direction.z = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
else:
_direction = Vector3.ZERO
var offset = max_speed * acceleration * _direction
_speed.x = clamp(_speed.x + offset.x, -max_speed.x, max_speed.x)
......@@ -135,12 +151,12 @@ func _update_movement(delta):
# warning-ignore:unused_argument
func _update_rotation(delta):
if privot:
_mouse_offset.x -= Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
_mouse_offset.y += Input.get_action_strength("ui_page_up") - Input.get_action_strength("ui_page_down")
var offset = Vector2();
offset += _mouse_offset * sensitivity
_mouse_offset = Vector2()
_yaw = _yaw * smoothness + offset.x * (1.0 - smoothness)
_pitch = _pitch * smoothness + offset.y * (1.0 - smoothness)
......@@ -154,6 +170,9 @@ func _update_rotation(delta):
rotate_y(deg2rad(-_yaw))
rotate_object_local(Vector3(1,0,0), deg2rad(-_pitch))
func set_point_of_interest(ship):
point_of_interest = ship
func set_privot(value):
privot = value
if privot:
......
extends Control
onready var margin = $"/root/Title/CanvasLayer/UI/Objektoj/Window/canvas/MarginContainer"
onready var window = $"/root/Title/CanvasLayer/UI/Objektoj/Window"
onready var margin = $"/root/Title/CanvasLayer/UI/Objektoj/Window/VBox"
var camera #камера
export var z_away = 100 # насколько глубоко\далеко будет точка пути от экрана
var index_pos = 0
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, Net.kategorio_movado, true
)
if Input.is_action_just_pressed("right_click"):
# event.pressed=true
if event is InputEventMouseButton and $"/root/Title/CanvasLayer/UI/Objektoj/Window/canvas/MarginContainer".visible:
if event is InputEventMouseButton and $"/root/Title/CanvasLayer/UI/Objektoj/Window/VBox".visible:
$canvas/PopupMenu.set_item_disabled(2,true)
# $canvas/PopupMenu.mouse_filter=2
var x = $".".get_global_mouse_position().x
var y = $".".get_global_mouse_position().y
if (margin.margin_top<y) and (y<margin.margin_bottom) and (margin.margin_left<x) and (x<margin.margin_right):
var mrg = margin
if (margin.margin_top+window.rect_global_position.y<y) and \
(y<margin.margin_bottom+window.rect_global_position.y) and \
(margin.margin_left+window.rect_global_position.x<x) and \
(x<margin.margin_right+window.rect_global_position.x):
$canvas/PopupMenu.margin_left=x
$canvas/PopupMenu.margin_top=y
$canvas/PopupMenu.visible=true
# #если пункт меню - станция
x = $"/root/Title/CanvasLayer/UI/Objektoj/Window/canvas/MarginContainer/VBoxContainer/scroll/ItemList".get_local_mouse_position().x
y = $"/root/Title/CanvasLayer/UI/Objektoj/Window/canvas/MarginContainer/VBoxContainer/scroll/ItemList".get_local_mouse_position().y
index_pos = $"/root/Title/CanvasLayer/UI/Objektoj/Window/canvas/MarginContainer/VBoxContainer/scroll/ItemList".get_item_at_position(Vector2(x,y),true)
$"/root/Title/CanvasLayer/UI/Objektoj/Window/canvas/MarginContainer/VBoxContainer/scroll/ItemList".select(index_pos)
x = $"/root/Title/CanvasLayer/UI/Objektoj/Window/VBox/body_texture/ItemList".get_local_mouse_position().x
y = $"/root/Title/CanvasLayer/UI/Objektoj/Window/VBox/body_texture/ItemList".get_local_mouse_position().y
index_pos = $"/root/Title/CanvasLayer/UI/Objektoj/Window/VBox/body_texture/ItemList".get_item_at_position(Vector2(x,y),true)
$"/root/Title/CanvasLayer/UI/Objektoj/Window/VBox/body_texture/ItemList".select(index_pos)
if Global.objektoj[index_pos]['resurso']['objId'] == 1:#объект станция Espero
#проверяем как далеко от станции и если менее 20, то разрешаем войти
var dist = $"../ship".translation.distance_to(Vector3(
......@@ -33,6 +49,7 @@ func _input(event: InputEvent) -> void:
$canvas/PopupMenu.set_item_disabled(2,false)
# сдвиг по всем координатам по целеполаганию полёта к объекту
const translacio = 20
const translacio_stat = 300
......@@ -49,12 +66,12 @@ func go_kosmostacioj():
# закрываем проект
# добавляем запись в связи, что находимся внутри
var uuid_tasko = ''
if $"../ship".projekto_uuid:
uuid_tasko = Global.itineroj[0]['uuid_tasko']
if Global.fenestro_itinero.projekto_itineroj_uuid:
uuid_tasko = Global.fenestro_itinero.itineroj.front()['uuid_tasko']
var error = Title.get_node("request").request(q.URL_DATA,
Global.backend_headers,
true, 2, q.eniri_kosmostacio(
$"../ship".projekto_uuid,
Global.fenestro_itinero.projekto_itineroj_uuid,
uuid_tasko,
Global.objektoj[index_pos]['uuid']))
# Если запрос не выполнен из-за какой-то ошибки
......@@ -77,19 +94,23 @@ func go_kosmostacioj():
get_tree().change_scene('res://blokoj/kosmostacioj/CapKosmostacio.tscn')
# выбрали позицию в меню
func _on_PopupMenu_index_pressed(index):
var ship = $"../".get_node("ship")
var objekto
# вычисляем объект в космосе
# проходим по всем созданным объектам в космосе и находим нужный по uuid
for child in $"../".get_children():
if child.is_in_group('create'):
if child.uuid == Global.objektoj[index_pos]['uuid']:
objekto = child
break
if index == 2: # если выбран вход в станцию
go_kosmostacioj()
elif index == 3: # если выбрана стрельба по объекту
# вычисляем объект в космосе
# проходим по всем созданным объектам в космосе и находим нужный по uuid
for child in $"../".get_children():
if child.is_in_group('create'):
if child.uuid == Global.objektoj[index_pos]['uuid']:
# for ch in $"../ship/CollisionShape".get_children():
# print('==',ch.name)
# $"../ship/CollisionShape/laser_gun".set_target(child.get_global_transform())
$"../ship/laser_gun".set_target(child)
$"../ship/laser_gun".set_target(objekto)
elif index == 4: # взять в прицел
ship.set_celilo(objekto)
else: # если выбрано движение к цели или добавление в маршрут
# вычисляем точку в пространстве, придвинутую на translacio ближе
# если станция, то дистанция больше
......@@ -104,23 +125,29 @@ func _on_PopupMenu_index_pressed(index):
dist = $"../ship".translation.distance_to(celo) - translacio
var speed = celo - $"../ship".translation
celo = $"../ship".translation + speed.normalized() * dist
Global.fenestro_itinero.add_itinero(
'',
Global.objektoj[index_pos]['uuid'],
Global.objektoj[index_pos]['nomo']['enhavo'], #'nomo'
celo.x,
celo.y,
celo.z,
dist
)
Global.fenestro_itinero.FillItemList()
if index==0:
Global.fenestro_itinero.komenci_itinero()
# elif index==1:
func _on_PopupMenu_draw():
# $canvas/PopupMenu.mouse_filter=0 #для отключения игнорирования меню и его реакции на выбор пунктов
pass # Replace with function body.
if index==0: # отправка корабля к цели
Global.fenestro_itinero.okazigi_itinero(
Global.objektoj[index_pos]['uuid'],
Global.objektoj[index_pos]['nomo']['enhavo'], #'nomo'
celo.x,
celo.y,
celo.z,
Transform(Basis.IDENTITY, celo),
dist,
Net.kategorio_movado,
false
)
elif index==1: # добавление точки в маршрут
Global.fenestro_itinero.add_itinero(
'',
Global.objektoj[index_pos]['uuid'],
Global.objektoj[index_pos]['nomo']['enhavo'], #'nomo'
celo.x,
celo.y,
celo.z,
Transform(Basis.IDENTITY, celo),
dist,
Net.kategorio_movado,
-1 #pozicio
)
......@@ -18,8 +18,8 @@ func objecto_mutation(uuid, koordX, koordY, koordZ, rotaciaX, rotaciaY, rotaciaZ
# устанавливаем проект
func instalo_projekto(objektoUuid, kom_koordX, kom_koordY, kom_koordZ,
fin_koordX, fin_koordY, fin_koordZ):
func instalo_projekto_json(objektoUuid, kom_koordX, kom_koordY, kom_koordZ,
fin_koordX, fin_koordY, fin_koordZ, id):
var tipoId = 2
var kategorio = 3
var statusoId = 2
......@@ -27,7 +27,12 @@ func instalo_projekto(objektoUuid, kom_koordX, kom_koordY, kom_koordZ,
var priskribo = "Movado de objekto"
var statusoPosedantoId = 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, '+
' $kom_koordY:Float, $kom_koordZ:Float, $fin_koordX:Float, '+
' $fin_koordY:Float, $fin_koordZ:Float, $tipoPosedantoId:Int,'+
......@@ -48,16 +53,17 @@ func instalo_projekto(objektoUuid, kom_koordX, kom_koordY, kom_koordZ,
"fin_koordX":fin_koordX,
"fin_koordY":fin_koordY, "fin_koordZ":fin_koordZ,
"objektoUuid":objektoUuid, "statusoPosedantoId":statusoPosedantoId,
"tipoPosedantoId":tipoPosedantoId, "realecoId":Global.realeco} })
"tipoPosedantoId":tipoPosedantoId, "realecoId":Global.realeco} }})
# print('===instalo_projekto===',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 kategorio = 3
var statusoId = [2]
var statusoId = [2] # первая задача в работе
var nomo = "Movado"
var priskribo = "Movado de objekto"
var tipoPosedantoId = 1
......@@ -81,13 +87,18 @@ func instalo_tasko_posedanto_koord(uuid, projekto_uuid, kom_koordX, kom_koordY,
komKoordinatoX.append(itineroj[i-1]['koordinatoX'])
komKoordinatoY.append(itineroj[i-1]['koordinatoY'])
komKoordinatoZ.append(itineroj[i-1]['koordinatoZ'])
statusoId.append(1)
statusoId.append(1) # новая задача
fin_koordX.append(itineroj[i]['koordinatoX'])
fin_koordY.append(itineroj[i]['koordinatoY'])
fin_koordZ.append(itineroj[i]['koordinatoZ'])
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,' +
'$komKoordinatoX:[Float], $komKoordinatoY:[Float], $komKoordinatoZ:[Float], $tipoPosedantoId: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,
"fin_koordY":fin_koordY, "fin_koordZ":fin_koordZ, "tipoPosedantoId":tipoPosedantoId,
"statusoPosedantoId":statusoPosedantoId, "objektoUuid":uuid, "pozicio":pozicio,
"komKoordinatoX":komKoordinatoX, "komKoordinatoY":komKoordinatoY, "komKoordinatoZ":komKoordinatoZ,
"realecoId":Global.realeco}})
"realecoId":Global.realeco}}})
# print('===instalo_tasko_posedanto_koord===',query)
return query
# создаём задачу, устанавливаем координаты объекту, изменяем финальные координаты проекту
func instalo_tasko_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ,
fin_koordX, fin_koordY, fin_koordZ):
func instalo_tasko_koord_json(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ,
fin_koordX, fin_koordY, fin_koordZ, id=0):
var posedantoTipoId = 1
var posedantoStatusoId = 1
var tipoId = 2
......@@ -122,10 +133,15 @@ func instalo_tasko_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ
var statusoId = 2
var nomo = "Movado"
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,'+
'$fin_koordX:Float, $fin_koordY:Float, $fin_koordZ:Float, $projektoUuid: String, '+
'$posedantoTipoId:Int, $posedantoStatusoId:Int, $objektoUuid:String, '+
'$posedantoTipoId:Int, $posedantoStatusoId:Int, $objektoUuid:String, $UzantoId:Int'+
'$realecoId:Int)'+
'{ redaktuUniversoObjekto ( uuid: $uuid, koordinatoX: $koordX, koordinatoY: $koordY, '+
' koordinatoZ: $koordZ, realecoId:$realecoId ) { status message universoObjektoj { uuid } } '+
......@@ -134,6 +150,7 @@ func instalo_tasko_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ
' komKoordinatoY:$koordY, komKoordinatoZ:$koordZ, finKoordinatoX:$fin_koordX,'+
' finKoordinatoY:$fin_koordY, finKoordinatoZ:$fin_koordZ, posedantoTipoId:$posedantoTipoId, '+
' objektoUuid:$objektoUuid, posedantoStatusoId:$posedantoStatusoId, '+
' posedantoUzantoSiriusoUzantoId: $UzantoId, ' +
' realecoId:$realecoId) '+
'{ status '+
' message universoTaskoj { uuid } } '+
......@@ -147,25 +164,49 @@ func instalo_tasko_koord(uuid, projekto_uuid, kom_koordX, kom_koordY, kom_koordZ
"statusoId": statusoId, "projekto_uuid": projekto_uuid, "projektoUuid": projekto_uuid,
"fin_koordX":fin_koordX, "fin_koordY":fin_koordY, "fin_koordZ":fin_koordZ,
"posedantoStatusoId":posedantoStatusoId, "posedantoTipoId":posedantoTipoId,
"objektoUuid":uuid, "realecoId":Global.realeco } })
"UzantoId":Global.id,
"objektoUuid":uuid, "realecoId":Global.realeco } }})
# print('===instalo_tasko_koord===',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, )'+
'{ redaktuUniversoTaskoj (uuid: $uuid, '+
' statusoId:$statusoId) { status '+
' message universoTaskoj { uuid } } }',
'variables': {"uuid":tasko_uuid, "statusoId": statusoId } })
'variables': {"uuid":tasko_uuid, "statusoId": statusoId } }})
# print('===finado_tasko==',query)
return query
# завершение задачи и проекта
func finado_projeko_tasko(projekto_uuid, tasko_uuid):
func finado_projekto_tasko_json(projekto_uuid, tasko_uuid, id=0):
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, )'+
'{ redaktuUniversoTaskoj (uuid: $tasko_uuid, '+
' statusoId:$statusoId) { status '+
......@@ -174,15 +215,14 @@ func finado_projeko_tasko(projekto_uuid, tasko_uuid):
' statusoId:$statusoId) { status '+
' 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):
var statusoId = 4 # Закрыт
if !id:
id = Net.current_query_id
Net.current_query_id += 1
id = Net.get_current_query_id()
return JSON.print({
'type': 'start',
'id': '%s' % id,
......@@ -194,37 +234,29 @@ 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
var kategorio = 3 # категория движения объектов в космосе
id = Net.get_current_query_id()
return JSON.print({
'type': 'start',
'id': '%s' % id,
'payload':{ 'query': 'subscription ($kuboj:[Int]!, $realeco:Int!, $kategorio:Int!)'+
'{ universoObjektoEventoj (kuboj: $kuboj, realeco:$realeco, kategorio: $kategorio) { evento '+
' objekto { uuid koordinatoX koordinatoY koordinatoZ} '+
' projekto {uuid} '+
'payload':{ 'query': 'subscription ($kuboj:[Int]!, $realeco:Int!)'+
'{ universoObjektoEventoj (kuboj: $kuboj, realeco:$realeco) { evento '+
' objekto { uuid koordinatoX koordinatoY koordinatoZ '+
" stato{objId potenco integreco statoAntaua {integreco} "+
" statoSekva{integreco}} integreco" +
" resurso{objId tipo{objId}}" +
' rotaciaX rotaciaY rotaciaZ } '+
' projekto {uuid kategorio {edges {node {objId }}}} '+
' tasko { uuid komKoordinatoX komKoordinatoY '+
' komKoordinatoZ finKoordinatoX finKoordinatoY '+
' finKoordinatoZ pozicio statuso{objId} kategorio { '+
' edges { node { objId } } }} } '+
" objekto{uuid nomo {enhavo}} " +
' posedanto{edges{node{ posedantoObjekto{uuid} }}}' +
' komKoordinatoZ finKoordinatoX finKoordinatoY '+
' finKoordinatoZ pozicio statuso{objId} kategorio { '+
' edges { node { objId } } }} } '+
'}',
'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 } } }'}})
'variables': {"kuboj": Global.kubo, "realeco": Global.realeco } }})
......@@ -9,64 +9,101 @@ const Zoom_Step: float = 1.0
#const MIN_ROT_Y = -1.55 #(89 градусов)
#const MAX_ROT_Y = 0.79 #(45 градусов)
var max_speed =1000.0
var max_speed =500.0
# текущая скорость
var current_speed =0
var acceleration = 0.5
var acceleration = 1
var way_point: Vector3 = Vector3() # Координаты точки, в которую летим
var target_dir: Vector3 = Vector3.ZERO #направление на эту точку от текущей позиции корабля
var target_rot #положение корабля, которое надо принять, чтобы нацелиться на точку.
var speed_rotation =0.03
var target_rot = null #положение корабля, которое надо принять, чтобы нацелиться на точку.
var speed_rotation = 1
var middle_mouse_pressed = false
var docking_rotation
var uuid #uuid активного корабля игрока
var projekto_uuid
# взятые в прицел, массив объектов, взятых в прицел
var celilo = []
var max_celilo = 1 # максимальное количество прицелов
var livero = false # произошел выстрел и запущена перезарядка
func _ready():
$CollisionShape.queue_free()
pass
func _physics_process(delta):
if target_dir != Vector3.ZERO: #Если цель существует, двигаемся
target_dir = (way_point - translation).normalized()
if translation.distance_to(way_point) > max_speed*delta/acceleration:
current_speed = lerp(current_speed,max_speed,delta*acceleration)
transform.basis = Basis(Quat(transform.basis).slerp(target_rot,speed_rotation)) #потихоньку поворачиваем корабль на цель. Взято у Сканера из урока про зомбей. Quat(transform.basis) - текущий поворот корабля
else:
if translation.distance_to(way_point) <0.01:
if docking_rotation !=null:
transform.basis = Basis(Quat(docking_rotation))
translation = way_point
clear_way_point()
print("doexali")
# останавливаем таймер передачи данных на сервер
$"../timer".stop()
#отправка последних координат и закрытие задачи с проектом
finofara_flugo()
# если категория задачи равна категории движения объекта, тогда двигаемся
if !(Global.fenestro_itinero.itineroj.empty() or \
Global.fenestro_itinero.itinero_pause) and \
(Global.fenestro_itinero.itineroj.front()['kategorio']==Net.kategorio_movado): #Если цель существует, двигаемся
if !target_rot:
# print('target_rot = ',Global.fenestro_itinero.itineroj.front()['transform'].origin)
target_rot = Quat(transform.looking_at(Global.fenestro_itinero.itineroj.front()['transform'].origin,Vector3.UP).basis) #запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
var target_dir = (Global.fenestro_itinero.itineroj.front()['transform'].origin - translation).normalized()
var distance = translation.distance_to(Global.fenestro_itinero.itineroj.front()['transform'].origin)
if (len (Global.fenestro_itinero.itineroj)>1) and \
(Global.fenestro_itinero.itineroj[1]['kategorio']==Net.kategorio_movado):
# проверяем, если следующая точка является движением
if distance <1: #Если это не последняя точка, то мы не тормозим, так что завышаем расстояние, чтобы не проскочить эту точку
dec_route()
return
current_speed = lerp(current_speed,50,delta*acceleration)
if docking_rotation != null:
transform.basis = Basis(Quat(transform.basis).slerp(docking_rotation,speed_rotation*1.5)) #поворачиваем в дефолтное состояние, чтобы сесть
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)#ускоряемся
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
move_and_slide(target_dir*delta*current_speed) #Двигаемся к цели
Global.fenestro_itinero.distance_to(translation)
move_and_slide(target_dir*delta*current_speed) #Двигаемся к цели и тут можно передать transform на сервер
Title.get_node("CanvasLayer/UI/Objektoj/Window").distance_to(translation)
# вывод целей на экран
# if get_node_or_null('Control'):
if celilo.size()>0:
if livero:
$Control/kanonadi/livero.value = $Control/kanonadi/livero.value + 1
# else:
# $Control/celilo.set_visible(false)
# $Control/celilo/label.text = ''
func set_way_point(position, dock):
docking_rotation = dock
way_point = position # устанавливаем точку цели
target_dir = (way_point - translation).normalized() # устанавливаем направление движение на цель.
target_rot = Quat(transform.looking_at(way_point,Vector3.UP).basis) #запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
func clear_way_point():
target_dir = Vector3.ZERO #очищаем цель
way_point = Vector3.ZERO
docking_rotation = null
current_speed = 0
func set_celilo(celo):
celilo.append(celo)
$Control/celilo.set_visible(true)
$Control/celilo/label.text = celilo.front().uuid
get_node("laser_gun").set_target(celilo.front())
func rotate_start():# поворачиваем корабль носом по ходу движения
var front = Transform(Basis.IDENTITY, Vector3(Global.fenestro_itinero.itineroj.front()['koordinatoX'],
Global.fenestro_itinero.itineroj.front()['koordinatoY'],
Global.fenestro_itinero.itineroj.front()['koordinatoZ']))
target_rot = Quat(transform.looking_at(front.origin,Vector3.UP).basis) #запоминаем в какое положение надо установить корабль, чтобы нос был к цели. Это в кватернионах. ХЗ что это, но именно так вращать правильнее всего.
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")
......@@ -80,86 +117,29 @@ func _on_timer_timeout():
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
func _on_kanonadi_pressed():
if celilo.size()>0:
if $Control/kanonadi.pressed:
# постановка цели
# get_node("laser_gun").set_target(celilo.front())
get_node("laser_gun").pafo = true
livero = 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()
get_node("laser_gun").pafo = false
# get_node("laser_gun").set_target('')
else:
$Control/kanonadi.pressed = false
get_node("laser_gun").pafo = false
func _on_livero_value_changed(value):
if value == 20:
get_node("laser_gun").pafo = false
# get_node("laser_gun").set_target('')
elif value == 100:
livero = false
$Control/kanonadi/livero.value = 0
_on_kanonadi_pressed()
Это отличие свёрнуто
......@@ -7,6 +7,7 @@ export var colision_radius = 2.0 #радиус, на который надо п
var active = false # есть ли точка пути, или ничего не указано
# warning-ignore:unused_signal
signal new_way_point(position) # сигнал кораблю, что пора лететь в точку position
func _ready():
......@@ -14,10 +15,12 @@ func _ready():
offset =Vector2($TextureRect.rect_size/2) # получаем смещение контрол-нод в центр
$Area/CollisionShape.shape.radius = colision_radius #задаём радиус обнуления вейпойнта.
# warning-ignore:unused_argument
func _input(event):
if Input.is_action_just_pressed("left_click"):
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 и получаем точку, тут же устанавливаем новый вейпойнт с координатами
# if Input.is_action_just_pressed("left_click"):
# 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 и получаем точку, тут же устанавливаем новый вейпойнт с координатами
pass
# warning-ignore:unused_argument
func _physics_process(delta):
......
[gd_scene load_steps=3 format=2]
[gd_scene load_steps=4 format=2]
[ext_resource path="res://blokoj/kosmostacioj/kosmostacio.jpg" type="Texture" id=1]
[ext_resource path="res://blokoj/kosmostacioj/resursoj/CapKosmostacio/textures/Stars Sphere.jpg" type="Texture" id=1]
[ext_resource path="res://blokoj/kosmostacioj/Kosmostacio.gd" type="Script" id=2]
[ext_resource path="res://blokoj/rajtigo/tero.png" type="Texture" id=3]
[node name="Node2D" type="Node2D"]
script = ExtResource( 2 )
[node name="ParallaxBackground" type="ParallaxBackground" parent="."]
follow_viewport_enable = true
[node name="ParallaxBackground2" type="ParallaxBackground" parent="."]
[node name="TextureRect" type="TextureRect" parent="ParallaxBackground"]
[node name="TextureRect" type="TextureRect" parent="ParallaxBackground2"]
anchor_right = 1.0
anchor_bottom = 1.0
texture = ExtResource( 1 )
expand = true
stretch_mode = 1
__meta__ = {
"_edit_use_anchors_": false
}
[node name="ParallaxBackground" type="ParallaxBackground" parent="."]
layer = -98
follow_viewport_enable = true
[node name="TextureRect" type="TextureRect" parent="ParallaxBackground"]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -512.0
margin_top = -384.0
margin_right = 512.0
margin_bottom = 384.0
texture = ExtResource( 3 )
__meta__ = {
"_edit_use_anchors_": false
}
......@@ -23,21 +42,21 @@ anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.594
anchor_bottom = 1.0
margin_left = -5.548
margin_top = -31.556
margin_left = -5.54797
margin_top = -26.556
margin_right = 0.195984
margin_bottom = -19.556
margin_bottom = -9.55603
__meta__ = {
"_edit_use_anchors_": false
}
[node name="GreetingLabel" type="Label" parent="ParallaxBackground"]
anchor_left = 0.317
anchor_right = 0.708
margin_left = 0.0470276
margin_top = 70.0
margin_right = -0.336975
margin_bottom = 100.0
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = -625.216
margin_top = -30.0
align = 1
valign = 1
__meta__ = {
......
......@@ -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.4 # насколько въезжать в парковку
ship.translation.x = ship.translation.x + 25.4 # насколько въезжать в парковку
ship.translation.z = ship.translation.z - 5 # в сторону от центра
ship.translation.y = ship.translation.y + 2 # высота от пола
add_child(ship,true)
......
Это отличие свёрнуто
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/celilo.png-47499df231bb4886ea8e9433f8b1c0af.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://blokoj/kosmosxipoj/resursoj/celilo.png"
dest_files=[ "res://.import/celilo.png-47499df231bb4886ea8e9433f8b1c0af.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0
Нет предварительного просмотра для этого типа файлов
Нет предварительного просмотра для этого типа файлов
Нет предварительного просмотра для этого типа файлов
Нет предварительного просмотра для этого типа файлов
Нет предварительного просмотра для этого типа файлов
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать