Browse Source

Adjust player movement code

Aaron Franke 5 years ago
parent
commit
f78779fa21
6 changed files with 91 additions and 75 deletions
  1. 3 3
      level/level.tscn
  2. 2 2
      level/shader_cache.gd
  3. 2 2
      player/bullet.gd
  4. 6 6
      player/bullet.tscn
  5. 32 31
      player/player.gd
  6. 46 31
      player/player.tscn

+ 3 - 3
level/level.tscn

@@ -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,7 +220,7 @@ 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 )]

+ 2 - 2
level/shader_cache.gd

@@ -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()

+ 2 - 2
player/bullet.gd

@@ -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
 
 

+ 6 - 6
player/bullet.tscn

@@ -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

+ 32 - 31
player/player.gd

@@ -34,14 +34,6 @@ 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 _physics_process(delta):
 	var camera_move = Vector2(Input.get_action_strength("view_right") - Input.get_action_strength("view_left"),
 								Input.get_action_strength("view_up") - Input.get_action_strength("view_down"))
@@ -50,10 +42,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 = $CameraBase/CameraRot.global_transform.basis
 	var camera_z = camera_basis.z
 	var camera_x = camera_basis.x
 	
@@ -67,9 +59,9 @@ func _physics_process(delta):
 	if aiming != current_aim:
 			aiming = current_aim
 			if (aiming):
-				$camera_base/animation.play("shoot")
+				$CameraBase/Animation.play("shoot")
 			else:
-				$camera_base/animation.play("far")
+				$CameraBase/Animation.play("far")
 	
 	# Jump/in-air logic.
 	airborne_time += delta
@@ -83,39 +75,40 @@ 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
+		$AnimationTree["parameters/state/current"] = 2
 		$sfx/jump.play()
 	
 	if on_air:
 		if (velocity.y > 0):
-			$animation_tree["parameters/state/current"] = 2
+			$AnimationTree["parameters/state/current"] = 2
 		else:
-			$animation_tree["parameters/state/current"] = 3
+			$AnimationTree["parameters/state/current"] = 3
 	elif aiming:
 		# Change state to strafe.
-		$animation_tree["parameters/state/current"] = 0
+		$AnimationTree["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)
+			$AnimationTree["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)
+			$AnimationTree["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.
+		$AnimationTree["parameters/strafe/blend_position"] = Vector2(motion.x, -motion.y)
 		
-		root_motion = $animation_tree.get_root_motion_transform()
+		root_motion = $AnimationTree.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 cam = $CameraBase/CameraRot/Camera
 			
-			var ch_pos = $crosshair.rect_position + $crosshair.rect_size * 0.5
+			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)
 			
@@ -136,21 +129,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
+		$AnimationTree["parameters/aim/add_amount"] = 0
 		# Change state to walk.
-		$animation_tree["parameters/state/current"] = 1
+		$AnimationTree["parameters/state/current"] = 1
 		# Blend position for walk speed based on motion.
-		$animation_tree["parameters/walk/blend_position"] = Vector2(motion.length(), 0) 
+		$AnimationTree["parameters/walk/blend_position"] = Vector2(motion.length(), 0) 
 		
-		root_motion = $animation_tree.get_root_motion_transform()
+		root_motion = $AnimationTree.get_root_motion_transform()
 	
 	# Apply root motion to orientation.
 	orientation *= root_motion
@@ -173,3 +166,11 @@ func _input(event):
 		if aiming:
 			camera_speed_this_frame *= 0.75
 		rotate_camera(event.relative * camera_speed_this_frame)
+
+
+func rotate_camera(move):
+	$CameraBase.rotate_y(-move.x)
+	$CameraBase.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))
+	$CameraBase/CameraRot.rotation.x = camera_x_rot

+ 46 - 31
player/player.tscn

@@ -126,33 +126,33 @@ y_label = "gun"
 
 [sub_resource type="AnimationNodeBlendTree" id=22]
 resource_local_to_scene = true
-graph_offset = Vector2( -517, 242 )
+graph_offset = Vector2( -480.904, 74.268 )
 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
@@ -162,7 +162,7 @@ height = 0.560254
 
 [sub_resource type="Animation" id=25]
 tracks/0/type = "value"
-tracks/0/path = NodePath("camera_rot/Camera:translation")
+tracks/0/path = NodePath("CameraRot/Camera: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.593, -2.157 ), Vector3( 0, 0.593, -2.157 ) ]
 }
 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/Camera:translation")
 tracks/0/interp = 1
 tracks/0/loop_wrap = true
 tracks/0/imported = false
@@ -200,7 +200,7 @@ tracks/0/keys = {
 "values": [ Vector3( -0.684193, 0.265504, -1.04126 ), Vector3( -0.684193, 0.265504, -1.04126 ) ]
 }
 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,26 @@ tracks/1/keys = {
 [sub_resource type="AudioStreamRandomPitch" id=27]
 audio_stream = ExtResource( 7 )
 
-[node name="player" type="KinematicBody"]
+[node name="Player" type="KinematicBody"]
 collision_layer = 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.908797, -0.252345, 0.332564, -0.248902, -0.967057, -0.0539471, 0.335258, -0.0337236, -0.941535, -0.207594, 1.37206, 0.52221 )
 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
@@ -252,21 +255,30 @@ shape = SubResource( 23 )
 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="."]
+[node name="CameraBase" type="Spatial" parent="."]
 transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.85456, 0 )
+__meta__ = {
+"_editor_description_": "Handles Y rotation (yaw)."
+}
 
-[node name="camera_rot" type="Spatial" parent="camera_base"]
+[node name="CameraRot" type="Spatial" parent="CameraBase"]
+__meta__ = {
+"_editor_description_": "Handles X rotation (pitch)."
+}
 
-[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="Camera" type="Camera" parent="CameraBase/CameraRot"]
+transform = Transform( -1, 1.18511e-07, -3.03526e-07, 0, 0.931514, 0.363707, 3.25841e-07, 0.363707, -0.931514, 0, 0.592719, -2.15676 )
 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="Crosshair" type="TextureRect" parent="."]
 self_modulate = Color( 1, 1, 1, 0 )
 anchor_left = 0.5
 anchor_top = 0.5
@@ -277,6 +289,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="."]