From 303a12b82758559ea6fcc70163dcbd7c4a43a56f Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 30 Apr 2025 20:33:49 -0500 Subject: [PATCH] happy with turret turning --- assets/spider2.tscn | 3 ++- scripts/EnemyAttack.gd | 2 +- scripts/EnemyStates.gd | 37 +++++++++++++++++++------------------ 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/assets/spider2.tscn b/assets/spider2.tscn index 1e06a64..56761ef 100644 --- a/assets/spider2.tscn +++ b/assets/spider2.tscn @@ -805,7 +805,7 @@ size = Vector3(0.816284, 0.725159, 0.75531) [sub_resource type="CylinderShape3D" id="CylinderShape3D_gicen"] height = 0.356583 -radius = 0.207031 +radius = 0.135742 [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ycipa"] random_pitch = 1.1 @@ -886,6 +886,7 @@ metadata/_custom_type_script = "uid://dhxolagi0b5s1" [node name="Attack" type="Node" parent="StateMachine" node_paths=PackedStringArray("enemy")] script = ExtResource("10_gicen") enemy = NodePath("../..") +body_turn_speed = 1.0 [node name="Reload" type="Node" parent="StateMachine" node_paths=PackedStringArray("enemy")] script = ExtResource("11_ekglj") diff --git a/scripts/EnemyAttack.gd b/scripts/EnemyAttack.gd index e70635d..24fedff 100644 --- a/scripts/EnemyAttack.gd +++ b/scripts/EnemyAttack.gd @@ -15,5 +15,5 @@ func Physics_Update(delta): func update_player_target(): move_target = enemy.player_last_seen - look_target = enemy.player_last_seen + look_target = enemy.player_last_seen + Vector3(0,.75,0) enemy.nav_agent.set_target_position(move_target) diff --git a/scripts/EnemyStates.gd b/scripts/EnemyStates.gd index 2369b01..6a59037 100644 --- a/scripts/EnemyStates.gd +++ b/scripts/EnemyStates.gd @@ -66,29 +66,30 @@ func rotate_to_face2D(object,target,target_offset_angle,delta,turn_speed): return lerp_angle(object.global_rotation.y,atan2(direction.x,direction.y) + deg_to_rad(target_offset_angle),delta * turn_speed) func rotate_to_face3D(object,target,delta,turn_speed): - #to allow both nodes and positions to be passed to this function, test the target and use Vector3 coords - var target_transformed if target == null: - target_transformed = object.global_position - elif target is Vector3: - target_transformed = target - elif target is Node3D: - target_transformed = target.global_position + return - var y_pos = Vector2(object.global_position.x,object.global_position.z) - var y_target_pos = Vector2(target_transformed.x,target_transformed.z) - var y_direction = (y_pos - y_target_pos) - var y_angle = atan2(y_direction.x,y_direction.y) + var target_positon - var x_pos = Vector2(object.global_position.y,object.global_position.z) - var x_target_pos = Vector2(target_transformed.y,target_transformed.z) - var x_direction = (x_pos - x_target_pos) - var x_angle = atan2(x_direction.x,x_direction.y) + if target is Vector3: + target_positon = target + else: + target_positon = target.global_position - #object.global_rotation.y = lerp_angle(object.global_rotation.y,y_angle,delta * turn_speed) - object.global_rotation.x = lerp_angle(object.global_rotation.x,x_angle,delta * turn_speed) + var desired_rotation = object.global_transform.looking_at(target_positon,Vector3.UP).basis.get_euler() + var current_rotation = object.global_rotation - + #Interpolate each axis + current_rotation.x = lerp_angle(current_rotation.x,desired_rotation.x,delta * turn_speed) + current_rotation.y = lerp_angle(current_rotation.y,desired_rotation.y,delta * turn_speed) + current_rotation.z = lerp_angle(current_rotation.z,desired_rotation.z,delta * turn_speed) + + #clamp pitch + var max_downward_pitch = deg_to_rad(85) + var min_upward_pitch = deg_to_rad(-45) + current_rotation.x = clamp(current_rotation.x,min_upward_pitch, max_downward_pitch) + + object.global_rotation = current_rotation func move_to_nav_point(delta): var destination = enemy.nav_agent.get_next_path_position()