ship.gd 8,1 КБ
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
25
26
27
28
29

func _ready():
	pass

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

Vladimir Levadnij's avatar
Vladimir Levadnij включено в состав коммита
47
48
49
			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 включено в состав коммита
50
		Title.get_node("CanvasLayer/UI/Objektoj/Window").distance_to(translation)
magcourier's avatar
magcourier включено в состав коммита
51
		$"../b_itinero/itinero".distance_to(translation)
magcourier's avatar
magcourier включено в состав коммита
52

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

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




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

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

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


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

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

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