ship.gd 7,9 КБ
Newer Older
magcourier's avatar
magcourier включено в состав коммита
1
extends KinematicBody
Vladimir Levadnij's avatar
Vladimir Levadnij включено в состав коммита
2
3
4
5
6
7
8
9
10
11
12
13

export var Sensitivity_X: float = 0.01
export var Sensitivity_Y: float = 0.01

const ZOOM_MIN = 1
const ZOOM_MAX = 50
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 current_speed =0
magcourier's avatar
magcourier включено в состав коммита
14
var acceleration = 0.5
Vladimir Levadnij's avatar
Vladimir Levadnij включено в состав коммита
15
16
17
18
19
20
var way_point: Vector3 = Vector3() # Координаты точки, в которую летим
var target_dir: Vector3 = Vector3.ZERO #направление на эту точку от текущей позиции корабля
var target_rot #положение корабля, которое надо принять, чтобы нацелиться на точку.
var speed_rotation =0.03
var middle_mouse_pressed = false
var docking_rotation
magcourier's avatar
magcourier включено в состав коммита
21
var uuid #uuid активного корабля игрока
magcourier's avatar
magcourier включено в состав коммита
22
var projekto_uuid
Vladimir Levadnij's avatar
Vladimir Levadnij включено в состав коммита
23
24

func _ready():
magcourier's avatar
magcourier включено в состав коммита
25
	$CollisionShape.queue_free()
Vladimir Levadnij's avatar
Vladimir Levadnij включено в состав коммита
26
27
28
29
30
	pass

func _physics_process(delta):
	if target_dir != Vector3.ZERO: #Если цель существует, двигаемся
		target_dir = (way_point - translation).normalized()
magcourier's avatar
magcourier включено в состав коммита
31
32
		if translation.distance_to(way_point) > max_speed*delta/acceleration:
			current_speed = lerp(current_speed,max_speed,delta*acceleration)
Vladimir Levadnij's avatar
Vladimir Levadnij включено в состав коммита
33
34
35
36
37
38
39
			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()
magcourier's avatar
magcourier включено в состав коммита
40
				print("doexali")
magcourier's avatar
magcourier включено в состав коммита
41
				# останавливаем таймер передачи данных на сервер
magcourier's avatar
magcourier включено в состав коммита
42
				$"../timer".stop()
magcourier's avatar
magcourier включено в состав коммита
43
				#отправка последних координат и закрытие задачи с проектом
magcourier's avatar
magcourier включено в состав коммита
44
				finofara_flugo()
Vladimir Levadnij's avatar
Vladimir Levadnij включено в состав коммита
45
				return
magcourier's avatar
magcourier включено в состав коммита
46
47
			current_speed = lerp(current_speed,50,delta*acceleration)

Vladimir Levadnij's avatar
Vladimir Levadnij включено в состав коммита
48
49
50
			if docking_rotation != null:
				transform.basis = Basis(Quat(transform.basis).slerp(docking_rotation,speed_rotation*1.5)) #поворачиваем в дефолтное состояние, чтобы сесть
		move_and_slide(target_dir*delta*current_speed) #Двигаемся к цели
magcourier's avatar
magcourier включено в состав коммита
51
		Title.get_node("CanvasLayer/UI/Objektoj/Window").distance_to(translation)
magcourier's avatar
magcourier включено в состав коммита
52
		Global.fenestro_itinero.distance_to(translation)
magcourier's avatar
magcourier включено в состав коммита
53

Vladimir Levadnij's avatar
Vladimir Levadnij включено в состав коммита
54

55
func set_way_point(position, dock):
Vladimir Levadnij's avatar
Vladimir Levadnij включено в состав коммита
56
57
58
59
60
61
62
63
64
65
	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
magcourier's avatar
magcourier включено в состав коммита
66
67
68
69




magcourier's avatar
magcourier включено в состав коммита
70
const QueryObject = preload("../skriptoj/queries.gd")
magcourier's avatar
magcourier включено в состав коммита
71
72
73
74

func _on_timer_timeout():
	var q = QueryObject.new()
	# Делаем запрос к бэкэнду
magcourier's avatar
magcourier включено в состав коммита
75
	$"../http_mutate".request(q.URL, Global.backend_headers, true, 2, 
magcourier's avatar
magcourier включено в состав коммита
76
77
78
79
		q.objecto_mutation(uuid, translation.x, 
			translation.y, translation.z,
			rotation.x, 
			rotation.y, rotation.z)
magcourier's avatar
magcourier включено в состав коммита
80
81
	)

magcourier's avatar
magcourier включено в состав коммита
82
83
#добавление в список маршрута с предварительным очишением маршрута
func add_itinero():
magcourier's avatar
magcourier включено в состав коммита
84
	Global.fenestro_itinero.add_itinero('','', 'точка в космосе', 
magcourier's avatar
magcourier включено в состав коммита
85
86
		way_point.x, way_point.y, 
		way_point.z, translation.distance_to(way_point))
magcourier's avatar
magcourier включено в состав коммита
87
88
89


#передача данных на сервер при отправке корабля по первой цели
magcourier's avatar
magcourier включено в состав коммита
90
func vojkomenco():
magcourier's avatar
magcourier включено в состав коммита
91
	if len(Global.itineroj)==0:
magcourier's avatar
magcourier включено в состав коммита
92
		return 404
magcourier's avatar
magcourier включено в состав коммита
93
94
	var q = QueryObject.new()
	if !projekto_uuid:#если проекта нет, то создаём
magcourier's avatar
magcourier включено в состав коммита
95
		# цель маршрута берём из itineroj
magcourier's avatar
magcourier включено в состав коммита
96
		var count_itineroj=len(Global.itineroj)-1
magcourier's avatar
magcourier включено в состав коммита
97
		$"../http_projekto".request(q.URL, Global.backend_headers, true, 2,
magcourier's avatar
magcourier включено в состав коммита
98
99
100
101
			q.instalo_projekto(uuid,
				translation.x, #kom_koordX
				translation.y, #kom_koordY
				translation.z, #kom_koordZ
magcourier's avatar
magcourier включено в состав коммита
102
103
104
				Global.itineroj[count_itineroj]['koordinatoX'], #fin_koordX
				Global.itineroj[count_itineroj]['koordinatoY'], #fin_koordY
				Global.itineroj[count_itineroj]['koordinatoZ'] #fin_koordZ
magcourier's avatar
magcourier включено в состав коммита
105
		))
magcourier's avatar
magcourier включено в состав коммита
106
107
108
109
110
	else:#проект есть, изменяем задачу
		# ставим задачу в выполененную
		# надо использовать другой request, не от поседанто, т.к. поседанто используется при /
		#   установке владельца задачи и этот может не успеть отработать
		$"../http_finado".request(q.URL, Global.backend_headers, true, 2, 
magcourier's avatar
magcourier включено в состав коммита
111
112
			q.finado_tasko(Global.itineroj[0]['uuid_tasko']))
		Global.itineroj.remove(0)#удаляем задачу
magcourier's avatar
magcourier включено в состав коммита
113
		# изменяем цель проекта
magcourier's avatar
magcourier включено в состав коммита
114
115
		$"../http_tasko".request(q.URL, Global.backend_headers, true, 2, 
			q.instalo_tasko_koord(
magcourier's avatar
magcourier включено в состав коммита
116
117
118
119
			uuid, projekto_uuid, 
			translation.x, #kom_koordX
			translation.y, #kom_koordY
			translation.z, #kom_koordZ
magcourier's avatar
magcourier включено в состав коммита
120
121
122
			Global.itineroj[0]['koordinatoX'], #fin_koordX
			Global.itineroj[0]['koordinatoY'], #fin_koordY
			Global.itineroj[0]['koordinatoZ'] #fin_koordZ
magcourier's avatar
magcourier включено в состав коммита
123
		))
magcourier's avatar
magcourier включено в состав коммита
124
125
126
127
128
		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
magcourier's avatar
magcourier включено в состав коммита
129

magcourier's avatar
magcourier включено в состав коммита
130

magcourier's avatar
magcourier включено в состав коммита
131
func finofara_flugo():
magcourier's avatar
magcourier включено в состав коммита
132
	if len(Global.itineroj)==0:
magcourier's avatar
magcourier включено в состав коммита
133
		return 404 # маршрута нет, закрывать нечего, выходим из процедуры
magcourier's avatar
magcourier включено в состав коммита
134
135
	if projekto_uuid:
		var q = QueryObject.new()
magcourier's avatar
magcourier включено в состав коммита
136
		# если есть очередь в задачах, то закрываем только текущую задачу и запускаем в работу следующую
magcourier's avatar
magcourier включено в состав коммита
137
		if len(Global.itineroj)==1:
magcourier's avatar
magcourier включено в состав коммита
138
			$"../http_finado".request(q.URL, Global.backend_headers, true, 2, 
magcourier's avatar
magcourier включено в состав коммита
139
140
141
				q.finado_projeko_tasko(projekto_uuid, Global.itineroj[0]['uuid_tasko']))
			Global.itineroj.clear()
			Global.fenestro_itinero.get_node("canvas/MarginContainer/VBoxContainer/ItemList").clear()
magcourier's avatar
magcourier включено в состав коммита
142
			projekto_uuid=''
magcourier's avatar
magcourier включено в состав коммита
143
144
145
146
			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
magcourier's avatar
magcourier включено в состав коммита
147
148
		else:
			$"../http_posedanto".request(q.URL, Global.backend_headers, true, 2, 
magcourier's avatar
magcourier включено в состав коммита
149
				q.finado_tasko(Global.itineroj[0]['uuid_tasko']))
magcourier's avatar
magcourier включено в состав коммита
150
			# берём следующую задачу в работу
magcourier's avatar
magcourier включено в состав коммита
151
152
			Global.itineroj.remove(0)
			Global.fenestro_itinero.FillItemList()
magcourier's avatar
magcourier включено в состав коммита
153
154
			# изменяем следующую задачу  на "в работе"
			$"../http_finado".request(q.URL, Global.backend_headers, true, 2, 
magcourier's avatar
magcourier включено в состав коммита
155
156
157
158
				q.finado_tasko(Global.itineroj[0]['uuid_tasko'],2))
			var position = Vector3(Global.itineroj[0]['koordinatoX'],
				Global.itineroj[0]['koordinatoY'],
				Global.itineroj[0]['koordinatoZ'])
magcourier's avatar
magcourier включено в состав коммита
159
			set_way_point(position,null)
magcourier's avatar
magcourier включено в состав коммита
160
161
			$"../way_point".set_way_point(position)
			#запускаем таймер
magcourier's avatar
magcourier включено в состав коммита
162
			$"../timer".start()