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

Добавлена стрельба лазера

владелец ef039418
[gd_scene load_steps=2 format=2]
[gd_scene load_steps=4 format=2]
[ext_resource path="res://blokoj/asteroidoj/resursoj/ast 6.dae" type="PackedScene" id=1]
[ext_resource path="res://blokoj/asteroidoj/skriptoj/asteroid.gd" type="Script" id=2]
[sub_resource type="SphereShape" id=1]
radius = 0.967435
[node name="ast 6" instance=ExtResource( 1 )]
transform = Transform( 10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0 )
script = ExtResource( 2 )
[node name="ast 6_cell049" parent="." index="0"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.236695, 1.73682, -1.68406 )
......@@ -118,3 +123,9 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.22947, 0.247741, -1.96274 )
[node name="ast 6_cell" parent="." index="37"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.68345, 0.165816, 0.077196 )
[node name="Area" type="Area" parent="." index="39"]
[node name="CollisionShape" type="CollisionShape" parent="Area" index="0"]
transform = Transform( 2.07784, 0, 0, 0, 1.83488, 0, 0, 0, 1.5436, 0.110293, 0, -0.626147 )
shape = SubResource( 1 )
extends Spatial
var uuid
var integreco
var potenco
......@@ -19,7 +19,7 @@ layer = 50
margin_left = -1.0
margin_right = 209.0
margin_bottom = 66.0
items = [ "Двигаться к объекту", null, 0, false, false, 0, 0, null, "", false, "Добавить в маршрут", null, 0, false, false, 1, 0, null, "", false, "Войти в док", null, 0, false, true, 2, 0, null, "", false ]
items = [ "Двигаться к объекту", null, 0, false, false, 0, 0, null, "", false, "Добавить в маршрут", null, 0, false, false, 1, 0, null, "", false, "Войти в док", null, 0, false, true, 2, 0, null, "", false, "Открыть огонь", null, 0, false, false, 3, 0, null, "", false ]
hide_on_state_item_selection = true
__meta__ = {
"_edit_use_anchors_": false
......
[gd_scene load_steps=3 format=2]
[gd_scene load_steps=4 format=2]
[ext_resource path="res://blokoj/kosmo/resursoj/untitled.obj" type="ArrayMesh" id=1]
[ext_resource path="res://blokoj/kosmosxipoj/skriptoj/moduloj/modulo.gd" type="Script" id=2]
[sub_resource type="CapsuleShape" id=1]
height = 1.36019
......@@ -12,6 +13,7 @@ material/1 = null
material/2 = null
material/3 = null
material/4 = null
script = ExtResource( 2 )
[node name="StaticBody" type="StaticBody" parent="."]
......
......@@ -41,7 +41,7 @@ const translacio_stat = 300
const QueryObject = preload("res://kerno/menuo/skriptoj/queries.gd")
func _on_PopupMenu_index_pressed(index):
if index == 2:
if index == 2: # если выбран вход в станцию
# Разрегистрируем обработчик сигнала request_completed (вызывается
# по завершении HTTPRequest)
Title.get_node("request").connect('request_completed', Title, '_on_eniri_kosmostacio_request_completed')
......@@ -65,8 +65,16 @@ func _on_PopupMenu_index_pressed(index):
Global.direktebla_objekto[Global.realeco-2]['kosmo'] = false
# вызываем сцену станции
get_tree().change_scene('res://blokoj/kosmostacioj/CapKosmostacio.tscn')
else:
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())
else: # если выбрано движение к цели или добавление в маршрут
# вычисляем точку в пространстве, придвинутую на translacio ближе
# если станция, то дистанция больше
var celo = Vector3(Global.objektoj[index_pos]['koordinatoX'],
......
......@@ -163,7 +163,7 @@ func create_ship(objecto):
var konektilo_y = 0
var konektilo_z = 0
for modulo in objecto['ligilo']['edges']:
if max_konektilo<modulo['node']['konektiloPosedanto']:
if max_konektilo < modulo['node']['konektiloPosedanto']:
max_konektilo = modulo['node']['konektiloPosedanto']
if modulo['node']['tipo']['objId'] == 1: # связь типа 1 - модуль корабля
if modulo['node']['ligilo']['resurso']['objId'] == 4: #"Vostok Модуль Кабины" "Базовый модуль кабины кораблей Vostok"
......@@ -202,10 +202,13 @@ func create_ship(objecto):
moduloj.uuid = modulo['node']['ligilo']['uuid']
moduloj.get_node("gun_body").translation.y = 4.2
moduloj.get_node("gun_body").translation.z = 0.6
moduloj.get_node("laser/gun_stem").translation.y = 4.2
moduloj.get_node("laser/gun_stem").translation.z = -0.4
moduloj.get_node("laser/beam/MeshInstance").translation.y = 4.2
moduloj.get_node("laser/beam/MeshInstance2").translation.y = 4.2
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
# moduloj.get_node("laser/beam/MeshInstance2").translation.y = 4.2
# moduloj.get_node("laser/end_point/Particles").translation.y = 4.2
ship.get_node("CollisionShape").add_child(moduloj)
# for modulo in objecto['ligilo']['edges']:
if not ship: # проверка, если такого корабля нет в программе
......@@ -289,11 +292,13 @@ func _on_space_load_objektoj():
var state = espero.instance()
state.translation=Vector3(item['koordinatoX'],
item['koordinatoY'], item['koordinatoZ'])
state.uuid = item['uuid']
add_child(state)
state.add_to_group('state')
state.add_to_group('create')
elif (item['resurso']['tipo']['objId'] == 2)and(item['koordinatoX']):# тип - корабль
var s = ships.instance()
s.uuid = item['uuid']
s.translation=Vector3(item['koordinatoX'],
item['koordinatoY'], item['koordinatoZ'])
s.rotation=Vector3(item['rotaciaX'],
......@@ -307,10 +312,10 @@ func _on_space_load_objektoj():
item['koordinatoY'], item['koordinatoZ'])
ast.rotation=Vector3(item['rotaciaX'],
item['rotaciaY'], item['rotaciaZ'])
ast.uuid = item['uuid']
add_child(ast)
ast.add_to_group('create')
ast.add_to_group('asteroidoj')
pass # Replace with function body.
func _on_Timer_timeout():
......
[gd_scene load_steps=5 format=2]
[gd_scene load_steps=6 format=2]
[ext_resource path="res://blokoj/kosmostacioj/espero/resursoj/Stars Sphere.jpg" type="Texture" id=1]
[ext_resource path="res://blokoj/kosmostacioj/espero/hangaroutside.tscn" type="PackedScene" id=2]
[ext_resource path="res://blokoj/kosmosxipoj/skriptoj/moduloj/modulo.gd" type="Script" id=3]
[sub_resource type="PanoramaSky" id=1]
panorama = ExtResource( 1 )
......@@ -11,6 +12,7 @@ background_mode = 2
background_sky = SubResource( 1 )
[node name="stacio" type="Spatial"]
script = ExtResource( 3 )
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource( 2 )
......
......@@ -7,7 +7,7 @@ script/source = "extends Spatial
var uuid #нужно для идентификации конкретного модуля
export (float) var beam_length =1000000
export (float) var beam_length = 1000
export (float) var speed_rotation = 3
export (Color, RGBA) var laser_color :Color = Color(1.0,0.0,0.0,1.0)
export var x_limiter: Vector2=Vector2(0.0,90.0)
......@@ -15,6 +15,7 @@ export var y_limiter: Vector2=Vector2(-90.0,90.0)
var target = null
func _ready():
print('ready')
# target=get_parent().route #это потом удалить, здесь тестовое получение цели.
$laser.cast_to.z = -beam_length #устанавливаем максимальную дальность лазера.
$laser/beam/MeshInstance.mesh.material.set(\"shader_param/laser_color\",laser_color)
......@@ -22,24 +23,32 @@ func _ready():
func rotate_gun(delta):
var temp = transform.basis #сохраняем старый базис
look_at(target.back().origin,Vector3.UP)#смотрим на цель, это сохранится в текущем базисе, из-за этого и куча движений с буферными базисами
# look_at(target.back().origin,Vector3.UP)#смотрим на цель, это сохранится в текущем базисе, из-за этого и куча движений с буферными базисами
look_at(target.origin,Vector3.UP)#смотрим на цель, это сохранится в текущем базисе, из-за этого и куча движений с буферными базисами
var target_rot = transform.basis#сохраняем целевой базис
transform.basis = temp#восстанавливаем изначальный базис
$laser.transform.basis = $laser.transform.basis.slerp(target_rot,speed_rotation*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)# ограничиваем вращение пушки по сторонам, если нужно
# $laser.rotation_degrees.y = clamp($laser.rotation_degrees.y,y_limiter.x,y_limiter.y)# ограничиваем вращение пушки по сторонам, если нужно
$gun_body.rotation.y = $laser.rotation.y
func _physics_process(delta):
if target:
# print('цель задана')
var length_to_end=beam_length
var can_shoot = false
if !target.empty():
rotate_gun(delta)
if $laser.is_colliding():
print($laser.get_collider().name) #тут можно обработать в кого мы попали и вызвать повреждения.
length_to_end = get_global_transform().origin.distance_to($laser.get_collision_point())
can_shoot = true
# if !target.empty():
rotate_gun(delta)
if $laser.is_colliding():
# print($laser.get_collider().name) #тут можно обработать в кого мы попали и вызвать повреждения.
length_to_end = get_global_transform().origin.distance_to($laser.get_collision_point())
can_shoot = true
$laser/end_point.visible = true
$laser/beam.visible = true
else:
$laser/end_point.visible = false
$laser/beam.visible = false
if can_shoot:
$laser/beam.scale.z=length_to_end
$laser/end_point.translation.z = -length_to_end
......@@ -48,6 +57,13 @@ func _physics_process(delta):
$laser/end_point/Particles.emitting = false
$laser/beam.scale.z=0.1
$laser/end_point.translation.z = 0
# else:
# print('не вижу цели')
func set_target(targeto):
print('установили цель')
if targeto:
target = targeto
"
[sub_resource type="CylinderMesh" id=2]
......
......@@ -4,3 +4,4 @@ extends Spatial
var uuid = ""
var integreco = 100
var potenco
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать