Added space scene and Railgun
Added an empty space with the nebula as a skybox. Also created the railgun subscene with scripts to follow a given target with the turret.main
parent
d20c964d62
commit
8c43b39f01
@ -0,0 +1,23 @@
|
||||
extends Position3D
|
||||
|
||||
|
||||
var maxX = 10
|
||||
var minX = -10
|
||||
|
||||
var SPEED = 1
|
||||
|
||||
var state = -1
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass
|
||||
|
||||
|
||||
func _process(delta):
|
||||
if self.translation.x < minX or self.translation.x > maxX:
|
||||
self.state *= -1
|
||||
|
||||
if state == -1: # moving negative
|
||||
self.transform.origin += Vector3(1, 0, 0) * SPEED * delta
|
||||
elif state == 1:
|
||||
self.transform.origin += Vector3(-1, 0, 0) * SPEED * delta
|
@ -0,0 +1,85 @@
|
||||
extends Spatial
|
||||
|
||||
export(NodePath) var LookAtTarget setget _set_lookAtTarget_path
|
||||
|
||||
### Railgun turret entity controller
|
||||
|
||||
|
||||
onready var skeleton = $Armature/Skeleton
|
||||
onready var turret_yaw_bone = skeleton.find_bone("turret head")
|
||||
onready var turret_pitch_bone = skeleton.find_bone("vertical joint")
|
||||
onready var vert_eyes = $VertEyes
|
||||
onready var turret_eyes = $Armature/Skeleton/turretAttachement/TurretEyes
|
||||
|
||||
var first_call: bool = true
|
||||
var target: Position3D
|
||||
|
||||
#var additional_rotation = Vector3(90, 0, 0)
|
||||
|
||||
func _set_lookAtTarget_path(new_value):
|
||||
# Because get_node doesn't work in the first call, we just want to assign instead.
|
||||
# This is to get around a issue with NodePaths exposed to the editor.
|
||||
if first_call:
|
||||
LookAtTarget = new_value
|
||||
return
|
||||
|
||||
# Assign skeleton_path to whatever value is passed.
|
||||
LookAtTarget = new_value
|
||||
|
||||
if LookAtTarget == null:
|
||||
return
|
||||
|
||||
# Get the node at that location, if there is one.
|
||||
var temp = get_node(LookAtTarget)
|
||||
if temp != null:
|
||||
if temp is Position3D:
|
||||
target = get_node(LookAtTarget)
|
||||
return
|
||||
else:
|
||||
print("Railgun.gd: Got invalid LookAtTarget: ", LookAtTarget)
|
||||
return
|
||||
else:
|
||||
print("Railgun.gd: Got no LookAtTarget: ", LookAtTarget)
|
||||
|
||||
func _ready():
|
||||
pass # configuring skeletonIK
|
||||
|
||||
|
||||
func _process(delta):
|
||||
# Calculating the two points where the vertical joint should point to to aim at the target
|
||||
"""
|
||||
var T = target.transform.origin
|
||||
var C = skeleton.get_bone_global_pose(turret_pitch_bone).origin # Vector3 root of the pitch bone
|
||||
|
||||
var radius_C = (skeleton.get_bone_global_pose(turret_yaw_bone).origin - C).length()
|
||||
var normal_C = (T-C).normalized()
|
||||
|
||||
var normal_C_angle = acos(Vector3(0, normal_C.y, normal_C.z).dot(normal_C)) # to transform the T point into a 2D plane and THEN do 2D circle intersection
|
||||
|
||||
var radius_T = (T - C).length() # length of CT which will be the radius of the circle around T"""
|
||||
if first_call:
|
||||
first_call = false
|
||||
if target == null:
|
||||
_set_lookAtTarget_path(LookAtTarget)
|
||||
|
||||
var turret_height_diff = (turret_eyes.global_transform.origin - vert_eyes.global_transform.origin)
|
||||
|
||||
vert_eyes.look_at((target.global_transform.origin-turret_height_diff), Vector3.UP)
|
||||
skeleton.set_bone_pose(turret_pitch_bone, Basis(Vector3.RIGHT, -1*vert_eyes.rotation.x))
|
||||
|
||||
var vert_bone_direction = skeleton.get_bone_pose(turret_pitch_bone) * Vector3.UP
|
||||
|
||||
var target_pos = skeleton.global_transform.xform_inv(target.global_transform.origin)
|
||||
|
||||
var rest = skeleton.get_bone_global_pose(turret_yaw_bone)
|
||||
rest = rest.looking_at(target_pos, vert_bone_direction)
|
||||
|
||||
# Get the rotation euler of the bone and of this node.
|
||||
#var rest_euler = rest.basis.get_euler()
|
||||
|
||||
# Apply additional rotation stored in additional_rotation to the bone.
|
||||
|
||||
# Make a new basis with the, potentially, changed euler angles.
|
||||
#rest.basis = Basis(rest_euler)
|
||||
|
||||
skeleton.set_bone_global_pose_override(turret_yaw_bone, rest, 1, true)
|
@ -0,0 +1,54 @@
|
||||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://assets/entities/railgun/railgun.glb" type="PackedScene" id=1]
|
||||
[ext_resource path="res://scenes/entities/railgun.gd" type="Script" id=2]
|
||||
|
||||
[sub_resource type="PrismMesh" id=2]
|
||||
|
||||
[sub_resource type="Skin" id=3]
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=7]
|
||||
albedo_color = Color( 0.956863, 0.635294, 0.635294, 1 )
|
||||
|
||||
[sub_resource type="SphereMesh" id=8]
|
||||
material = SubResource( 7 )
|
||||
|
||||
[node name="railgun" instance=ExtResource( 1 )]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="Skeleton" parent="Armature" index="0"]
|
||||
bones/1/rest = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 )
|
||||
|
||||
[node name="turretAttachement" type="BoneAttachment" parent="Armature/Skeleton" index="1"]
|
||||
transform = Transform( -1, 0, 1.50996e-07, 0, 1, 0, -1.50996e-07, 0, -1, 0, 2.92139, 0 )
|
||||
bone_name = "turret head"
|
||||
|
||||
[node name="TurretEyes" type="Spatial" parent="Armature/Skeleton/turretAttachement" index="0"]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
__meta__ = {
|
||||
"_editor_description_": "Helper Node which gets the rotation to face a target with look_at() to be copied by a bone"
|
||||
}
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="Armature/Skeleton/turretAttachement/TurretEyes" index="0"]
|
||||
visible = false
|
||||
mesh = SubResource( 2 )
|
||||
skin = SubResource( 3 )
|
||||
|
||||
[node name="RayCast" type="RayCast" parent="Armature/Skeleton/turretAttachement/TurretEyes" index="1"]
|
||||
transform = Transform( 0.1, -1.50996e-08, -8.74228e-08, -1.50996e-08, -0.1, -4.37114e-08, -8.74228e-09, 4.37114e-09, -1, 0, 0, 0 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="Armature/Skeleton/turretAttachement/TurretEyes/RayCast" index="0"]
|
||||
transform = Transform( 1, -8.5412e-22, -1.73472e-18, -2.71051e-20, -4.37114e-09, 70, 7.10543e-15, -0.1, -3.0598e-06, 1.3415e-11, 69.095, 0 )
|
||||
mesh = SubResource( 8 )
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="1"]
|
||||
|
||||
[node name="VertEyes" type="Spatial" parent="." index="2"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 )
|
||||
__meta__ = {
|
||||
"_editor_description_": "Helper Node which gets the rotation to face a target with look_at() to be copied by a bone"
|
||||
}
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="VertEyes" index="0"]
|
||||
mesh = SubResource( 2 )
|
||||
skin = SubResource( 3 )
|
@ -0,0 +1,46 @@
|
||||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://assets/environment/skyboxes/nebula_space/panorama_image.png" type="Texture" id=1]
|
||||
[ext_resource path="res://scenes/entities/railgun.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://scenes/entities/DebugLookAtTarget.gd" type="Script" id=3]
|
||||
|
||||
[sub_resource type="PanoramaSky" id=1]
|
||||
panorama = ExtResource( 1 )
|
||||
|
||||
[sub_resource type="Environment" id=2]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
|
||||
[sub_resource type="SphereMesh" id=3]
|
||||
|
||||
[node name="world" type="Node"]
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource( 2 )
|
||||
|
||||
[node name="entities" type="Node" parent="."]
|
||||
|
||||
[node name="railgun" parent="entities" instance=ExtResource( 2 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 7.50682, 0, -7.59585 )
|
||||
LookAtTarget = NodePath("LookAtTarget2")
|
||||
|
||||
[node name="LookAtTarget2" type="Position3D" parent="entities/railgun"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8.694, 4.553 )
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="entities/railgun/LookAtTarget2"]
|
||||
mesh = SubResource( 3 )
|
||||
|
||||
[node name="lighting" type="Node" parent="."]
|
||||
|
||||
[node name="main_light" type="DirectionalLight" parent="lighting"]
|
||||
transform = Transform( 0.784772, 0.331552, 0.523648, -0.612234, 0.54618, 0.571714, -0.0964525, -0.76926, 0.631614, 7.76443, 10.2646, 7.06444 )
|
||||
light_color = Color( 1, 0.941176, 0.854902, 1 )
|
||||
|
||||
[node name="rim_light" type="DirectionalLight" parent="lighting/main_light"]
|
||||
transform = Transform( 0.921065, 0.320717, -0.22086, 0.2725, -0.936009, -0.222781, -0.278177, 0.145011, -0.94952, -3.6761, -8.54977, -15.0604 )
|
||||
light_color = Color( 0.411765, 0.854902, 0.92549, 1 )
|
||||
light_energy = 0.2
|
||||
|
||||
[node name="Camera" type="Camera" parent="."]
|
||||
transform = Transform( 0.8208, 0.16956, -0.545469, 0, 0.954927, 0.296842, 0.571215, -0.243648, 0.783804, -4.41776, 10.7973, 11.901 )
|
Loading…
Reference in New Issue