Merge pull request #52 from aaronfranke/player

Player movement, camera, and respawn code
This commit is contained in:
Aaron Franke
2020-02-25 00:28:38 -05:00
committed by GitHub
8 changed files with 159 additions and 91 deletions

View File

@@ -192,7 +192,7 @@ nodes/hit3/position = Vector2( 980, 240 )
nodes/output/position = Vector2( 1180, 200 )
nodes/state/node = SubResource( 25 )
nodes/state/position = Vector2( 60, 100 )
node_connections = [ "output", 0, "hit3", "state", 0, "Animation", "state", 1, "Animation 3", "state", 2, "Animation 2", "state", 3, "Animation 4", "hit2", 0, "hit1", "hit2", 1, "Animation 6", "hit3", 0, "hit2", "hit3", 1, "Animation 7", "aiming", 0, "state", "aiming", 1, "aim", "hit1", 0, "aiming", "hit1", 1, "Animation 5" ]
node_connections = [ "output", 0, "hit3", "state", 0, "Animation", "state", 1, "Animation 3", "state", 2, "Animation 2", "state", 3, "Animation 4", "aiming", 0, "state", "aiming", 1, "aim", "hit1", 0, "aiming", "hit1", 1, "Animation 5", "hit2", 0, "hit1", "hit2", 1, "Animation 6", "hit3", 0, "hit2", "hit3", 1, "Animation 7" ]
[sub_resource type="SphereShape" id=27]
radius = 1.11815
@@ -542,13 +542,18 @@ tracks/10/keys = {
[sub_resource type="AudioStreamRandomPitch" id=44]
audio_stream = ExtResource( 18 )
[node name="big_robot" type="KinematicBody"]
[node name="RedRobot" type="KinematicBody"]
collision_layer = 3
collision_mask = 3
script = ExtResource( 1 )
[node name="Scene Root" parent="." instance=ExtResource( 2 )]
[node name="Skeleton" parent="Scene Root/Armature" index="0"]
bones/14/bound_children = [ NodePath("ray_from") ]
[node name="ray_from" type="BoneAttachment" parent="Scene Root/Armature/Skeleton" index="4"]
transform = Transform( -0.999975, 0.0070746, 0.000551782, 0.00707948, 0.999931, 0.0094271, -0.000485051, 0.00943077, -0.999955, 0.00850569, 2.08377, 0.183162 )
transform = Transform( -0.862541, 0.0793345, -0.499729, -0.033231, 0.976617, 0.2124, 0.504895, 0.19981, -0.839736, 0.123715, 2.00738, 0.252644 )
bone_name = "CannonAnimRecoil"
[node name="ray" type="MeshInstance" parent="Scene Root/Armature/Skeleton/ray_from"]
@@ -631,6 +636,8 @@ visible = false
[node name="part_shield1" type="RigidBody" parent="death"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.37822, 1.11034, 1.09121 )
collision_layer = 3
collision_mask = 3
mode = 1
physics_material_override = SubResource( 30 )
@@ -666,6 +673,8 @@ color_ramp = SubResource( 35 )
[node name="part_shield2" type="RigidBody" parent="death"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.75083, 1.02975, 0.162546 )
collision_layer = 3
collision_mask = 3
mode = 1
physics_material_override = SubResource( 36 )
@@ -701,6 +710,8 @@ color_ramp = SubResource( 35 )
[node name="part_shield3" type="RigidBody" parent="death"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0374503, 1.02975, 0.162546 )
collision_layer = 3
collision_mask = 3
mode = 1
physics_material_override = SubResource( 39 )
angular_damp = 0.3

View File

@@ -206,10 +206,10 @@ transform = Transform( 1, 0, 7.45058e-09, 5.72164e-11, 1, 8.73443e-11, -1.49012e
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource( 1 )
[node name="shader_cache" type="Node" parent="WorldEnvironment"]
[node name="ShaderCache" type="Node" parent="WorldEnvironment"]
script = ExtResource( 3 )
[node name="bullet" parent="WorldEnvironment/shader_cache" instance=ExtResource( 4 )]
[node name="Bullet" parent="WorldEnvironment/ShaderCache" instance=ExtResource( 4 )]
[node name="GIProbe" type="GIProbe" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -6.09263, 1.28266, 2.88598 )
@@ -220,19 +220,19 @@ propagation = 1.0
interior = true
data = ExtResource( 5 )
[node name="player" parent="." instance=ExtResource( 6 )]
[node name="Player" parent="." instance=ExtResource( 6 )]
transform = Transform( -0.575826, 0, -0.817573, 0, 1, 0, 0.817573, 0, -0.575826, 64.8183, -1.0765, 78.7639 )
[node name="big_robot" parent="." instance=ExtResource( 7 )]
[node name="RedRobot1" parent="." instance=ExtResource( 7 )]
transform = Transform( 0.843905, 0, -0.536493, 0, 1, 0, 0.536493, 0, 0.843905, 71.5907, -6.05686, 46.2736 )
[node name="big_robot2" parent="." instance=ExtResource( 7 )]
[node name="RedRobot2" parent="." instance=ExtResource( 7 )]
transform = Transform( 0.338334, 0, 0.941027, 0, 1, 0, -0.941027, 0, 0.338334, 53.2126, -6.05686, 15.9321 )
[node name="big_robot3" parent="." instance=ExtResource( 7 )]
[node name="RedRobot3" parent="." instance=ExtResource( 7 )]
transform = Transform( -0.164432, 0, 0.986389, 0, 1, 0, -0.986389, 0, -0.164432, -2.96096, -11.6923, 20.2343 )
[node name="big_robot4" parent="." instance=ExtResource( 7 )]
[node name="RedRobot4" parent="." instance=ExtResource( 7 )]
transform = Transform( -0.164432, 0, 0.986389, 0, 1, 0, -0.986389, 0, -0.164432, -9.15526, -11.6923, -16.9238 )
[node name="sound_outside" type="Area" parent="."]

View File

@@ -4,7 +4,7 @@ var fade_in_frame_counter = 60
func _ready():
# We don't want the cache bullet to make noise. So just get rid of its audio.
$bullet/explosion2.queue_free()
$Bullet/ExplosionAudio.queue_free()
func _physics_process(_delta):
@@ -12,7 +12,7 @@ func _physics_process(_delta):
# Fade in progressively to hide artifacts.
if fade_in_frame_counter == 50:
# Hide after a few frames to be sure the shaders compiled.
$bullet.hide()
$Bullet.hide()
if fade_in_frame_counter == 0:
# This node has served its purpose, and now it's time to stop existing.
self.queue_free()

View File

@@ -13,13 +13,13 @@ func _process(delta):
time_alive -= delta
if time_alive < 0:
hit = true
$anim.play("explode")
$AnimationPlayer.play("explode")
var col = move_and_collide(delta * direction * BULLET_VELOCITY)
if col:
if col.collider and col.collider.has_method("hit"):
col.collider.hit()
$CollisionShape.disabled = true
$anim.play("explode")
$AnimationPlayer.play("explode")
hit = true

View File

@@ -95,7 +95,7 @@ material = SubResource( 15 )
resource_name = "explode"
length = 3.0
tracks/0/type = "value"
tracks/0/path = NodePath("explosion:emitting")
tracks/0/path = NodePath("Explosion:emitting")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
@@ -157,7 +157,7 @@ tracks/4/keys = {
"values": [ false ]
}
tracks/5/type = "value"
tracks/5/path = NodePath("explosion2:playing")
tracks/5/path = NodePath("ExplosionAudio:playing")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/imported = false
@@ -169,7 +169,7 @@ tracks/5/keys = {
"values": [ true ]
}
[node name="bullet" type="KinematicBody"]
[node name="Bullet" type="KinematicBody"]
script = ExtResource( 1 )
[node name="MeshInstance" type="MeshInstance" parent="."]
@@ -198,16 +198,16 @@ omni_shadow_mode = 0
[node name="CollisionShape" type="CollisionShape" parent="."]
shape = SubResource( 9 )
[node name="explosion" type="Particles" parent="."]
[node name="Explosion" type="Particles" parent="."]
emitting = false
amount = 6
explosiveness = 1.0
process_material = SubResource( 14 )
draw_pass_1 = SubResource( 16 )
[node name="anim" type="AnimationPlayer" parent="."]
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
anims/explode = SubResource( 17 )
[node name="explosion2" type="AudioStreamPlayer3D" parent="."]
[node name="ExplosionAudio" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource( 3 )
unit_size = 20.0

View File

@@ -22,8 +22,16 @@ var velocity = Vector3()
var aiming = false
var camera_x_rot = 0.0
onready var initial_position = transform.origin
onready var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") * ProjectSettings.get_setting("physics/3d/default_gravity_vector")
onready var animation_tree = $AnimationTree
onready var camera_base = $CameraBase
onready var camera_animation = $CameraBase/Animation
onready var camera_rot = $CameraBase/CameraRot
onready var camera_spring_arm = $CameraBase/CameraRot/SpringArm
onready var camera = $CameraBase/CameraRot/SpringArm/Camera
func _init():
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
@@ -34,12 +42,16 @@ func _ready():
orientation.origin = Vector3()
func rotate_camera(move):
$camera_base.rotate_y(-move.x)
$camera_base.orthonormalize() # After relative transforms, camera needs to be renormalized.
camera_x_rot += move.y
camera_x_rot = clamp(camera_x_rot, deg2rad(CAMERA_X_ROT_MIN), deg2rad(CAMERA_X_ROT_MAX))
$camera_base/camera_rot.rotation.x = camera_x_rot
func _process(_delta):
# Fade out to black if falling out of the map. -17 is lower than
# the lowest valid position on the map (which is a bit under -16).
# At 15 units below -17 (so -32), the screen turns fully black.
if transform.origin.y < -17:
$ColorRect.modulate.a = min((-17 - transform.origin.y) / 15, 1)
# If we're below -40, respawn (teleport to the initial position).
if transform.origin.y < -40:
$ColorRect.modulate.a = 0
transform.origin = initial_position
func _physics_process(delta):
@@ -50,10 +62,10 @@ func _physics_process(delta):
camera_speed_this_frame *= 0.5
rotate_camera(camera_move * camera_speed_this_frame)
var motion_target = Vector2(Input.get_action_strength("move_right") - Input.get_action_strength("move_left"),
Input.get_action_strength("move_forward") - Input.get_action_strength("move_back"))
Input.get_action_strength("move_back") - Input.get_action_strength("move_forward"))
motion = motion.linear_interpolate(motion_target, MOTION_INTERPOLATE_SPEED * delta)
var camera_basis = $camera_base/camera_rot/Camera.global_transform.basis
var camera_basis = camera_rot.global_transform.basis
var camera_z = camera_basis.z
var camera_x = camera_basis.x
@@ -67,9 +79,9 @@ func _physics_process(delta):
if aiming != current_aim:
aiming = current_aim
if (aiming):
$camera_base/animation.play("shoot")
camera_animation.play("shoot")
else:
$camera_base/animation.play("far")
camera_animation.play("far")
# Jump/in-air logic.
airborne_time += delta
@@ -83,41 +95,41 @@ func _physics_process(delta):
if not on_air and Input.is_action_just_pressed("jump"):
velocity.y = JUMP_SPEED
on_air = true
$animation_tree["parameters/state/current"] = 2
animation_tree["parameters/state/current"] = 2
$sfx/jump.play()
if on_air:
if (velocity.y > 0):
$animation_tree["parameters/state/current"] = 2
animation_tree["parameters/state/current"] = 2
else:
$animation_tree["parameters/state/current"] = 3
animation_tree["parameters/state/current"] = 3
elif aiming:
# Change state to strafe.
$animation_tree["parameters/state/current"] = 0
animation_tree["parameters/state/current"] = 0
# Change aim according to camera rotation.
if camera_x_rot >= 0: # Aim up.
$animation_tree["parameters/aim/add_amount"] = -camera_x_rot / deg2rad(CAMERA_X_ROT_MAX)
animation_tree["parameters/aim/add_amount"] = -camera_x_rot / deg2rad(CAMERA_X_ROT_MAX)
else: # Aim down.
$animation_tree["parameters/aim/add_amount"] = camera_x_rot / deg2rad(CAMERA_X_ROT_MIN)
animation_tree["parameters/aim/add_amount"] = camera_x_rot / deg2rad(CAMERA_X_ROT_MIN)
# Convert orientation to quaternions for interpolating rotation.
var q_from = orientation.basis.get_rotation_quat()
var q_to = $camera_base.global_transform.basis.get_rotation_quat()
var q_to = $CameraBase.global_transform.basis.get_rotation_quat()
# Interpolate current rotation with desired one.
orientation.basis = Basis(q_from.slerp(q_to, delta * ROTATION_INTERPOLATE_SPEED))
$animation_tree["parameters/strafe/blend_position"] = motion
# The animation's forward/backward axis is reversed.
animation_tree["parameters/strafe/blend_position"] = Vector2(motion.x, -motion.y)
root_motion = $animation_tree.get_root_motion_transform()
root_motion = animation_tree.get_root_motion_transform()
if Input.is_action_pressed("shoot") and $FireCooldown.time_left == 0:
var shoot_from = $"Scene Root/Robot_Skeleton/Skeleton/gun_bone/shoot_from".global_transform.origin
var cam = $camera_base/camera_rot/Camera
var shoot_from = $"Scene Root/Robot_Skeleton/Skeleton/GunBone/ShootFrom".global_transform.origin
var ch_pos = $crosshair.rect_position + $crosshair.rect_size * 0.5
var ray_from = cam.project_ray_origin(ch_pos)
var ray_dir = cam.project_ray_normal(ch_pos)
var ch_pos = $Crosshair.rect_position + $Crosshair.rect_size * 0.5
var ray_from = camera.project_ray_origin(ch_pos)
var ray_dir = camera.project_ray_normal(ch_pos)
var shoot_target
var col = get_world().direct_space_state.intersect_ray(ray_from, ray_from + ray_dir * 1000, [self])
@@ -136,21 +148,21 @@ func _physics_process(delta):
$sfx/shoot.play()
else: # Not in air or aiming, idle.
# Convert orientation to quaternions for interpolating rotation.
var target = camera_z * motion.y - camera_x * motion.x
var target = camera_x * motion.x + camera_z * motion.y
if target.length() > 0.001:
var q_from = orientation.basis.get_rotation_quat()
var q_to = Quat(Transform().looking_at(target, Vector3.UP).basis)
# Interpolate current rotation with desired one
var q_to = Transform().looking_at(target, Vector3.UP).basis.get_rotation_quat()
# Interpolate current rotation with desired one.
orientation.basis = Basis(q_from.slerp(q_to, delta * ROTATION_INTERPOLATE_SPEED))
# Aim to zero (no aiming while walking).
$animation_tree["parameters/aim/add_amount"] = 0
animation_tree["parameters/aim/add_amount"] = 0
# Change state to walk.
$animation_tree["parameters/state/current"] = 1
animation_tree["parameters/state/current"] = 1
# Blend position for walk speed based on motion.
$animation_tree["parameters/walk/blend_position"] = Vector2(motion.length(), 0)
animation_tree["parameters/walk/blend_position"] = Vector2(motion.length(), 0)
root_motion = $animation_tree.get_root_motion_transform()
root_motion = animation_tree.get_root_motion_transform()
# Apply root motion to orientation.
orientation *= root_motion
@@ -173,3 +185,11 @@ func _input(event):
if aiming:
camera_speed_this_frame *= 0.75
rotate_camera(event.relative * camera_speed_this_frame)
func rotate_camera(move):
camera_base.rotate_y(-move.x)
camera_base.orthonormalize() # After relative transforms, camera needs to be renormalized.
camera_x_rot += move.y
camera_x_rot = clamp(camera_x_rot, deg2rad(CAMERA_X_ROT_MIN), deg2rad(CAMERA_X_ROT_MAX))
camera_rot.rotation.x = camera_x_rot

View File

@@ -126,43 +126,43 @@ y_label = "gun"
[sub_resource type="AnimationNodeBlendTree" id=22]
resource_local_to_scene = true
graph_offset = Vector2( -517, 242 )
graph_offset = Vector2( 1, 85 )
nodes/aim/node = SubResource( 1 )
nodes/aim/position = Vector2( 340, 120 )
nodes/aim/position = Vector2( 380, 120 )
nodes/aimdown/node = SubResource( 2 )
nodes/aimdown/position = Vector2( 120, 120 )
nodes/aimdown/position = Vector2( 120, 60 )
nodes/aimup/node = SubResource( 3 )
nodes/aimup/position = Vector2( 140, 420 )
nodes/aimup/position = Vector2( 140, 380 )
nodes/eye_blend/node = SubResource( 4 )
nodes/eye_blend/position = Vector2( 560, 120 )
nodes/eye_blend/position = Vector2( 640, 120 )
nodes/eyes/node = SubResource( 5 )
nodes/eyes/position = Vector2( 340, 360 )
nodes/eyes/position = Vector2( 380, 360 )
nodes/hardland/node = SubResource( 6 )
nodes/hardland/position = Vector2( -140, 440 )
nodes/hardland/position = Vector2( -160, 340 )
nodes/jumpdown/node = SubResource( 7 )
nodes/jumpdown/position = Vector2( -380, 440 )
nodes/jumpdown/position = Vector2( -460, 320 )
nodes/jumpup/node = SubResource( 8 )
nodes/jumpup/position = Vector2( -400, 320 )
nodes/jumpup/position = Vector2( -480, 200 )
nodes/land/node = SubResource( 9 )
nodes/land/position = Vector2( 120, 240 )
nodes/output/position = Vector2( 760, 120 )
nodes/land/position = Vector2( 120, 180 )
nodes/output/position = Vector2( 840, 120 )
nodes/state/node = SubResource( 10 )
nodes/state/position = Vector2( -60, 180 )
nodes/state/position = Vector2( -120, 120 )
nodes/strafe/node = SubResource( 16 )
nodes/strafe/position = Vector2( -340, 120 )
nodes/strafe/position = Vector2( -400, -120 )
nodes/walk/node = SubResource( 21 )
nodes/walk/position = Vector2( -340, 220 )
node_connections = [ "output", 0, "eye_blend", "state", 0, "strafe", "state", 1, "walk", "state", 2, "jumpup", "state", 3, "jumpdown", "eye_blend", 0, "aim", "eye_blend", 1, "eyes", "land", 0, "state", "land", 1, "hardland", "aim", 0, "aimdown", "aim", 1, "land", "aim", 2, "aimup" ]
nodes/walk/position = Vector2( -400, 40 )
node_connections = [ "output", 0, "eye_blend", "state", 0, "strafe", "state", 1, "walk", "state", 2, "jumpup", "state", 3, "jumpdown", "land", 0, "state", "land", 1, "hardland", "aim", 0, "aimdown", "aim", 1, "land", "aim", 2, "aimup", "eye_blend", 0, "aim", "eye_blend", 1, "eyes" ]
[sub_resource type="CapsuleShape" id=23]
radius = 0.490082
height = 0.560254
radius = 0.5
height = 0.6
[sub_resource type="RayShape" id=24]
[sub_resource type="Animation" id=25]
tracks/0/type = "value"
tracks/0/path = NodePath("camera_rot/Camera:translation")
tracks/0/path = NodePath("CameraRot/SpringArm:translation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
@@ -171,10 +171,10 @@ tracks/0/keys = {
"times": PoolRealArray( 0, 1 ),
"transitions": PoolRealArray( 0.287175, 1 ),
"update": 3,
"values": [ Vector3( 0, 0.592719, -2.15676 ), Vector3( 0, 0.592719, -2.15676 ) ]
"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 0, 0 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("../crosshair:self_modulate")
tracks/1/path = NodePath("../Crosshair:self_modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
@@ -188,7 +188,7 @@ tracks/1/keys = {
[sub_resource type="Animation" id=26]
tracks/0/type = "value"
tracks/0/path = NodePath("camera_rot/Camera:translation")
tracks/0/path = NodePath("CameraRot/SpringArm:translation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
@@ -197,10 +197,10 @@ tracks/0/keys = {
"times": PoolRealArray( 0, 1 ),
"transitions": PoolRealArray( 0.233259, 1 ),
"update": 3,
"values": [ Vector3( -0.684193, 0.265504, -1.04126 ), Vector3( -0.684193, 0.265504, -1.04126 ) ]
"values": [ Vector3( -0.6, -0.3, 1.1 ), Vector3( -0.6, -0.3, 1.1 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("../crosshair:self_modulate")
tracks/1/path = NodePath("../Crosshair:self_modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
@@ -215,23 +215,27 @@ tracks/1/keys = {
[sub_resource type="AudioStreamRandomPitch" id=27]
audio_stream = ExtResource( 7 )
[node name="player" type="KinematicBody"]
collision_layer = 3
[node name="Player" type="KinematicBody"]
collision_layer = 2
collision_mask = 3
script = ExtResource( 1 )
[node name="Scene Root" parent="." instance=ExtResource( 2 )]
[node name="gun_bone" type="BoneAttachment" parent="Scene Root/Robot_Skeleton/Skeleton" index="5"]
transform = Transform( 0.90287, -0.253554, 0.347451, -0.259802, -0.965241, -0.0296011, 0.342916, -0.0635128, -0.93723, -0.207006, 1.36658, 0.538869 )
[node name="Skeleton" parent="Scene Root/Robot_Skeleton" index="0"]
bones/46/bound_children = [ NodePath("GunBone") ]
[node name="GunBone" type="BoneAttachment" parent="Scene Root/Robot_Skeleton/Skeleton" index="5"]
transform = Transform( 0.898624, -0.247907, 0.362217, -0.262223, -0.964987, -0.0102129, 0.352102, -0.0857715, -0.932036, -0.207116, 1.3624, 0.547539 )
bone_name = "hand.R"
[node name="shoot_from" type="Position3D" parent="Scene Root/Robot_Skeleton/Skeleton/gun_bone"]
[node name="ShootFrom" type="Position3D" parent="Scene Root/Robot_Skeleton/Skeleton/GunBone"]
transform = Transform( 0.999919, 0.0106283, -0.00705317, -0.0105956, 0.99993, 0.00505793, 0.00710796, -0.0049828, 0.999962, 0.0100024, -0.00491095, -0.40371 )
[node name="RootMotionView" type="RootMotionView" parent="."]
animation_path = NodePath("../AnimationTree")
[node name="animation_tree" type="AnimationTree" parent="."]
[node name="AnimationTree" type="AnimationTree" parent="."]
tree_root = SubResource( 22 )
anim_player = NodePath("../Scene Root/AnimationPlayer")
active = true
@@ -244,29 +248,54 @@ parameters/state/current = 0
parameters/strafe/blend_position = Vector2( 0, 0 )
parameters/walk/blend_position = Vector2( 0, 0 )
[node name="CollisionShape" type="CollisionShape" parent="."]
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 1.03615, 0 )
[node name="CapsuleShape" type="CollisionShape" parent="."]
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 1, 0 )
shape = SubResource( 23 )
[node name="CollisionShape2" type="CollisionShape" parent="."]
[node name="RayShape" type="CollisionShape" parent="."]
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 1.00357, 0 )
shape = SubResource( 24 )
[node name="camera_base" type="Spatial" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.85456, 0 )
[node name="Spatial" type="Position3D" parent="."]
transform = Transform( -1, 1.18511e-07, -3.03525e-07, 0, 0.931513, 0.363707, 3.25841e-07, 0.363707, -0.931513, 0, 2.44728, -2.15676 )
[node name="camera_rot" type="Spatial" parent="camera_base"]
[node name="CameraBase" type="Spatial" parent="."]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0 )
__meta__ = {
"_editor_description_": "Handles Y rotation (yaw)."
}
[node name="Camera" type="Camera" parent="camera_base/camera_rot"]
transform = Transform( -1, 0, -8.74228e-08, -3.17959e-08, 0.931515, 0.363703, 8.14356e-08, 0.363703, -0.931515, 0, 0.592719, -2.15676 )
[node name="CameraRot" type="Spatial" parent="CameraBase"]
__meta__ = {
"_editor_description_": "Handles X rotation (pitch)."
}
[node name="SpringArm" type="SpringArm" parent="CameraBase/CameraRot"]
transform = Transform( -1, -1.11444e-07, 3.06191e-07, 0, 0.939693, 0.34202, -3.25841e-07, 0.34202, -0.939693, 0, 0, 0 )
spring_length = 2.4
[node name="Camera" type="Camera" parent="CameraBase/CameraRot/SpringArm"]
transform = Transform( 1, 1.42109e-14, -2.84217e-14, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
current = true
far = 300.0
__meta__ = {
"_editor_description_": "Translated when aiming."
}
[node name="animation" type="AnimationPlayer" parent="camera_base"]
[node name="Animation" type="AnimationPlayer" parent="CameraBase"]
anims/far = SubResource( 25 )
anims/shoot = SubResource( 26 )
[node name="crosshair" type="TextureRect" parent="."]
[node name="ColorRect" type="ColorRect" parent="."]
modulate = Color( 1, 1, 1, 0 )
anchor_right = 1.0
anchor_bottom = 1.0
color = Color( 0, 0, 0, 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Crosshair" type="TextureRect" parent="."]
self_modulate = Color( 1, 1, 1, 0 )
anchor_left = 0.5
anchor_top = 0.5
@@ -277,6 +306,9 @@ margin_top = -23.8394
margin_right = 14.6654
margin_bottom = 8.16064
texture = ExtResource( 3 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="sfx" type="Node" parent="."]

View File

@@ -194,9 +194,14 @@ toggle_fullscreen={
]
}
[layer_names]
3d_physics/layer_1="Level"
3d_physics/layer_2="Player"
[physics]
3d/physics_engine="GodotPhysics"
3d/physics_engine="Bullet"
[rendering]