space.gd 10,9 КБ
Newer Older
magcourier's avatar
magcourier включено в состав коммита
1
2
extends Spatial

magcourier's avatar
magcourier включено в состав коммита
3
var choose = true
magcourier's avatar
magcourier включено в состав коммита
4

magcourier's avatar
magcourier включено в состав коммита
5
# warning-ignore:unused_signal
magcourier's avatar
magcourier включено в состав коммита
6
7
signal load_objektoj

magcourier's avatar
magcourier включено в состав коммита
8
func _ready():
magcourier's avatar
magcourier включено в состав коммита
9
	Global.fenestro_kosmo = self
magcourier's avatar
magcourier включено в состав коммита
10
11
12
	# считываем размер экрана и задаём затемнение на весь экран
	$ui/loading.margin_right = get_node("/root").get_viewport().size.x
	$ui/loading.margin_bottom = get_node("/root").get_viewport().size.y
magcourier's avatar
magcourier включено в состав коммита
13
14
#	$b_itinero.margin_left = get_node("/root").get_viewport().size.x - 100
#	$b_itinero.margin_top = get_node("/root").get_viewport().size.y-50
magcourier's avatar
magcourier включено в состав коммита
15
16
17
18
19
20
21
22
23
24
25
	# создаём свой корабль
	var ship = create_ship(Global.direktebla_objekto[Global.realeco-2])
	#если корабль игрока, то брать данные из direktebla_objekto

	$main_camera.translation=Vector3(
		Global.direktebla_objekto[Global.realeco-2]['koordinatoX'],
		Global.direktebla_objekto[Global.realeco-2]['koordinatoY'], 
		Global.direktebla_objekto[Global.realeco-2]['koordinatoZ']+22
	)
	add_child(ship,true)

magcourier's avatar
magcourier включено в состав коммита
26
27
28
29
	for i in get_children():
		if has_signal(i,"new_way_point"):
			i.connect("new_way_point",self,"set_way_point")

magcourier's avatar
magcourier включено в состав коммита
30
# warning-ignore:unused_argument
magcourier's avatar
magcourier включено в состав коммита
31
32
33
34
35
36
37
38
39
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):
magcourier's avatar
magcourier включено в состав коммита
40
	get_node("ship").add_itinero()
magcourier's avatar
magcourier включено в состав коммита
41
	#останавливаем таймер
magcourier's avatar
magcourier включено в состав коммита
42
	$timer.stop()
magcourier's avatar
magcourier включено в состав коммита
43
44
	$ship.set_way_point(position,dock)
	$way_point.set_way_point(position)
magcourier's avatar
magcourier включено в состав коммита
45
46
47
	#передаём текущие координаты
	$ship.vojkomenco()#начинаем движение
	#запускаем таймер
magcourier's avatar
magcourier включено в состав коммита
48
	$timer.start()
magcourier's avatar
magcourier включено в состав коммита
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

func has_signal(node, sgnl):
	if node == null:
		return false
	node=node.get_signal_list()
	for i in node:
		if i.name == sgnl:
			return true
	return false




const QueryObject = preload("queries.gd")


magcourier's avatar
magcourier включено в состав коммита
65
# записав проект в базу, получили его uuid
magcourier's avatar
magcourier включено в состав коммита
66
67
68
# warning-ignore:unused_argument
# warning-ignore:unused_argument
# warning-ignore:unused_argument
magcourier's avatar
magcourier включено в состав коммита
69
70
71
72
73
74
75
76
func _on_http_projekto_request_completed(result, response_code, headers, body):
	var resp = body.get_string_from_utf8()
	var parsed_resp = parse_json(resp)
	var simpled_data = parsed_resp['data']['redaktuUniversoProjekto']['universoProjekto']
	var uuid = simpled_data['uuid']
	$"ship".projekto_uuid=uuid
	# теперь создаём задачу с координатами
	var q = QueryObject.new()
magcourier's avatar
magcourier включено в состав коммита
77
78
79
80
81
82
	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
magcourier's avatar
magcourier включено в состав коммита
83
	$"http_taskoj".request(q.URL, Global.backend_headers, true, 2,
magcourier's avatar
magcourier включено в состав коммита
84
85
86
87
88
		q.instalo_tasko_posedanto_koord(
			$"ship".uuid, $"ship".projekto_uuid, 
			$"ship".translation.x, #kom_koordX
			$"ship".translation.y, #kom_koordY
			$"ship".translation.z, #kom_koordZ
magcourier's avatar
magcourier включено в состав коммита
89
			Global.itineroj
magcourier's avatar
magcourier включено в состав коммита
90
	))
magcourier's avatar
magcourier включено в состав коммита
91
92
93
94




magcourier's avatar
magcourier включено в состав коммита
95
96
97
# warning-ignore:unused_argument
# warning-ignore:unused_argument
# warning-ignore:unused_argument
magcourier's avatar
magcourier включено в состав коммита
98
99
100
func _on_http_tasko_request_completed(result, response_code, headers, body):
	var resp = body.get_string_from_utf8()
	var parsed_resp = parse_json(resp)
magcourier's avatar
magcourier включено в состав коммита
101
	var simpled_data = parsed_resp['data']['redaktuUniversoTaskoj']['universoTaskoj']
magcourier's avatar
magcourier включено в состав коммита
102
#	print('===_on_http_tasko_request_completed===',parsed_resp)
magcourier's avatar
magcourier включено в состав коммита
103
	# получаем список задач и помещаем в itinero
magcourier's avatar
magcourier включено в состав коммита
104
	Global.itineroj[0]['uuid_tasko']=simpled_data['uuid']
magcourier's avatar
magcourier включено в состав коммита
105
106


magcourier's avatar
magcourier включено в состав коммита
107
108
109
# warning-ignore:unused_argument
# warning-ignore:unused_argument
# warning-ignore:unused_argument
magcourier's avatar
magcourier включено в состав коммита
110
111
func _on_http_posedanto_request_completed(result, response_code, headers, body):
	var resp = body.get_string_from_utf8()
magcourier's avatar
magcourier включено в состав коммита
112
# warning-ignore:unused_variable
magcourier's avatar
magcourier включено в состав коммита
113
114
115
116
	var parsed_resp = parse_json(resp)
	pass


magcourier's avatar
magcourier включено в состав коммита
117
118
119
# warning-ignore:unused_argument
# warning-ignore:unused_argument
# warning-ignore:unused_argument
magcourier's avatar
magcourier включено в состав коммита
120
121
func _on_http_finado_request_completed(result, response_code, headers, body):
	var resp = body.get_string_from_utf8()
magcourier's avatar
magcourier включено в состав коммита
122
# warning-ignore:unused_variable
magcourier's avatar
magcourier включено в состав коммита
123
124
	var parsed_resp = parse_json(resp)
	pass # Replace with function body.
magcourier's avatar
magcourier включено в состав коммита
125
126


magcourier's avatar
magcourier включено в состав коммита
127
128
129
# warning-ignore:unused_argument
# warning-ignore:unused_argument
# warning-ignore:unused_argument
magcourier's avatar
magcourier включено в состав коммита
130
131
132
133
134
135
136
func _on_http_taskoj_request_completed(result, response_code, headers, body):
	var resp = body.get_string_from_utf8()
	var parsed_resp = parse_json(resp)
	var simpled_data = parsed_resp['data']['redaktuKreiUniversoTaskojPosedanto']['universoTaskoj']
	# получаем список задач и помещаем в itinero
	var i = 0
	for tasko in simpled_data:
magcourier's avatar
magcourier включено в состав коммита
137
138
		if len(Global.itineroj)>i:
			Global.itineroj[i]['uuid_tasko']=tasko['uuid']
magcourier's avatar
magcourier включено в состав коммита
139
140
		i += 1

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

magcourier's avatar
magcourier включено в состав коммита
142
143
const sxipo = preload("res://blokoj/kosmosxipoj/scenoj/sxipo_fremdulo.tscn")
const sxipo_modulo = preload("res://blokoj/kosmosxipoj/skriptoj/moduloj/sxipo.gd")
magcourier's avatar
magcourier включено в состав коммита
144
const base_ship = preload("res://blokoj/kosmosxipoj/scenoj/base_ship.tscn")
magcourier's avatar
magcourier включено в состав коммита
145
const espero = preload("res://blokoj/kosmostacioj/espero/espero_ekster.tscn")
tigisae's avatar
tigisae включено в состав коммита
146
const asteroido = preload("res://blokoj/asteroidoj/ast_1.tscn")
magcourier's avatar
magcourier включено в состав коммита
147

magcourier's avatar
magcourier включено в состав коммита
148
149
150
# функция создания корабля
func create_ship(objecto):
	var ship = null
magcourier's avatar
magcourier включено в состав коммита
151
	
magcourier's avatar
magcourier включено в состав коммита
152
153
	if (objecto['resurso']['objId'] == 3):# это корабль "Vostok U2" "Базовый космический корабль"
		ship = base_ship.instance()
magcourier's avatar
magcourier включено в состав коммита
154
		var sh = sxipo_modulo.new()
magcourier's avatar
magcourier включено в состав коммита
155
		sh.create_sxipo(ship, objecto)
magcourier's avatar
magcourier включено в состав коммита
156
	if not ship: # проверка, если такого корабля нет в программе
magcourier's avatar
magcourier включено в состав коммита
157
		return null
magcourier's avatar
magcourier включено в состав коммита
158
159
	ship.translation=Vector3(objecto['koordinatoX'],
		objecto['koordinatoY'], objecto['koordinatoZ'])
magcourier's avatar
magcourier включено в состав коммита
160
161
162
	if objecto['rotaciaX']:
		ship.rotation=Vector3(objecto['rotaciaX'],
			objecto['rotaciaY'], objecto['rotaciaZ'])
magcourier's avatar
magcourier включено в состав коммита
163
164
165
	ship.visible=true
	ship.uuid=objecto['uuid']
	ship.add_to_group('create')
magcourier's avatar
magcourier включено в состав коммита
166
	$main_camera.set_privot(ship)
magcourier's avatar
magcourier включено в состав коммита
167
168
169
	return ship


magcourier's avatar
magcourier включено в состав коммита
170
func _on_space_load_objektoj():
magcourier's avatar
magcourier включено в состав коммита
171
	Title.get_node("CanvasLayer/UI/Objektoj/Window").distance_to($ship.translation)
magcourier's avatar
magcourier включено в состав коммита
172
173
174
175

	# и теперь по uuid нужно найти проект и задачу
	var projektoj = Global.direktebla_objekto[Global.realeco-2]['projekto']['edges']
	if len(projektoj)>1:
magcourier's avatar
magcourier включено в состав коммита
176
		pass #нужно обнулить все проекты!!! должно быть на стороне сервера
magcourier's avatar
magcourier включено в состав коммита
177
178
179
180
	if len(projektoj)>0:
		if len(projektoj[0]['node']['tasko']['edges'])==0:
			pass# нужно закрыть проект!!!
		else:
magcourier's avatar
magcourier включено в состав коммита
181
			$ship.projekto_uuid=projektoj[0]['node']['uuid']
magcourier's avatar
magcourier включено в состав коммита
182
			#заполняем маршрут
magcourier's avatar
magcourier включено в состав коммита
183
			Global.itineroj.clear()
magcourier's avatar
magcourier включено в состав коммита
184
185
			for tasko in projektoj[0]['node']['tasko']['edges']:
				if tasko['node']['statuso']['objId']==2:#задачу, которая "В работе" ставим первой
magcourier's avatar
magcourier включено в состав коммита
186
					Global.fenestro_itinero.add_itinero(
magcourier's avatar
magcourier включено в состав коммита
187
188
189
190
191
192
						tasko['node']['uuid'],
						'',
						'координаты в космосе',
						tasko['node']['finKoordinatoX'],
						tasko['node']['finKoordinatoY'],
						tasko['node']['finKoordinatoZ'],
magcourier's avatar
magcourier включено в состав коммита
193
						$ship.translation.distance_to(Vector3(
magcourier's avatar
magcourier включено в состав коммита
194
195
196
197
198
199
200
							tasko['node']['finKoordinatoX'],
							tasko['node']['finKoordinatoY'],
							tasko['node']['finKoordinatoZ']
					)))
					break;
			for tasko in projektoj[0]['node']['tasko']['edges']:
				if tasko['node']['statuso']['objId']==1:# добавляем остальные задачи
magcourier's avatar
magcourier включено в состав коммита
201
					Global.fenestro_itinero.add_itinero(
magcourier's avatar
magcourier включено в состав коммита
202
203
204
205
206
207
						tasko['node']['uuid'],
						'',
						'координаты в космосе',
						tasko['node']['finKoordinatoX'],
						tasko['node']['finKoordinatoY'],
						tasko['node']['finKoordinatoZ'],
magcourier's avatar
magcourier включено в состав коммита
208
						$ship.translation.distance_to(Vector3(
magcourier's avatar
magcourier включено в состав коммита
209
210
211
212
							tasko['node']['finKoordinatoX'],
							tasko['node']['finKoordinatoY'],
							tasko['node']['finKoordinatoZ']
					)))
magcourier's avatar
magcourier включено в состав коммита
213
			if len(Global.itineroj)==0:
magcourier's avatar
magcourier включено в состав коммита
214
				$ship.projekto_uuid='' #задач на полёт нет, проект надо бы закрыть
magcourier's avatar
magcourier включено в состав коммита
215
216
			else:
				#отправляем корабль по координатам
magcourier's avatar
magcourier включено в состав коммита
217
218
219
220
				var position = Vector3(Global.itineroj[0]['koordinatoX'],
					Global.itineroj[0]['koordinatoY'],
					Global.itineroj[0]['koordinatoZ'])
				Global.fenestro_itinero.FillItemList()
magcourier's avatar
magcourier включено в состав коммита
221
				$ship.set_way_point(position,null)
magcourier's avatar
magcourier включено в состав коммита
222
223
				$"way_point".set_way_point(position)
				$timer.start()
magcourier's avatar
magcourier включено в состав коммита
224
225
226
227
				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 включено в состав коммита
228
	else:
magcourier's avatar
magcourier включено в состав коммита
229
		$ship.projekto_uuid=''
magcourier's avatar
magcourier включено в состав коммита
230

magcourier's avatar
magcourier включено в состав коммита
231
	# создаём остальные объекты в космосе
magcourier's avatar
magcourier включено в состав коммита
232
	for item in Global.objektoj:
magcourier's avatar
magcourier включено в состав коммита
233
234
		if item['resurso']['objId'] == 1:#объект станция Espero
			var state = espero.instance()
magcourier's avatar
magcourier включено в состав коммита
235
236
			state.translation=Vector3(item['koordinatoX'],
				item['koordinatoY'], item['koordinatoZ'])
magcourier's avatar
magcourier включено в состав коммита
237
			state.uuid = item['uuid']
magcourier's avatar
magcourier включено в состав коммита
238
239
240
			add_child(state)
			state.add_to_group('state')
			state.add_to_group('create')
magcourier's avatar
magcourier включено в состав коммита
241
		elif (item['resurso']['tipo']['objId'] == 2)and(item['koordinatoX']):# тип - корабль
magcourier's avatar
magcourier включено в состав коммита
242
243
244
			var s = sxipo.instance()
			var sh = sxipo_modulo.new()
			sh.create_sxipo(s, item)
magcourier's avatar
magcourier включено в состав коммита
245
			s.uuid = item['uuid']
magcourier's avatar
magcourier включено в состав коммита
246
247
248
249
250
251
252
253
254
255
256
257
258
			s.translation=Vector3(item['koordinatoX'],
				item['koordinatoY'], item['koordinatoZ'])
			s.rotation=Vector3(item['rotaciaX'],
				item['rotaciaY'], item['rotaciaZ'])
			add_child(s)
			s.add_to_group('create')
			s.add_to_group('enemies')
		elif (item['resurso']['objId'] == 7)and(item['koordinatoX']):# тип - астероид
			var ast = asteroido.instance()
			ast.translation=Vector3(item['koordinatoX'],
				item['koordinatoY'], item['koordinatoZ'])
			ast.rotation=Vector3(item['rotaciaX'],
				item['rotaciaY'], item['rotaciaZ'])
magcourier's avatar
magcourier включено в состав коммита
259
			ast.uuid = item['uuid']
magcourier's avatar
magcourier включено в состав коммита
260
261
262
			add_child(ast)
			ast.add_to_group('create')
			ast.add_to_group('asteroidoj')
magcourier's avatar
magcourier включено в состав коммита
263
264
265
266
267


func _on_Timer_timeout():
	var q = QueryObject.new()
	# Делаем запрос к бэкэнду
magcourier's avatar
magcourier включено в состав коммита
268
269
270
271
272
273
	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
magcourier's avatar
magcourier включено в состав коммита
274
275
276
277
278
279
280
281
282
283
284
285
286
287
	$http_mutate.request(q.URL, Global.backend_headers, true, 2, 
		q.objecto_mutation($ship.uuid, $ship.translation.x, 
			$ship.translation.y, $ship.translation.z,
			$ship.rotation.x, 
			$ship.rotation.y, $ship.rotation.z)
	)



func _on_space_tree_exiting():
	#разрушаем все созданные объекты в этом мире
	for ch in get_children():
		if ch.is_in_group('create'):
			ch.free()