WIP #102 enhancing crouching behavior
This commit is contained in:
parent
f32a317994
commit
c54d9c5d22
|
|
@ -0,0 +1,15 @@
|
|||
class_name CrouchVolume extends Area3D
|
||||
|
||||
func ready():
|
||||
body_entered.connect(notify_player_entry)
|
||||
body_exited.connect(notify_player_exit)
|
||||
|
||||
func notify_player_entry(body: RigidBody3D):
|
||||
print("Player entered Crouch area.")
|
||||
if body is Player:
|
||||
body.inside_crouch_volume.append(self)
|
||||
|
||||
func notify_player_exit(body: RigidBody3D):
|
||||
if body is Player:
|
||||
body.inside_crouch_volume.erase(self)
|
||||
body.crouched = false
|
||||
|
|
@ -1,10 +1,11 @@
|
|||
[gd_scene load_steps=114 format=4 uid="uid://b3b0gyvklqn50"]
|
||||
[gd_scene load_steps=115 format=4 uid="uid://b3b0gyvklqn50"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://belkrno67sft0" path="res://base-environments/youth_room/room_handle.gd" id="1_aitp0"]
|
||||
[ext_resource type="PackedScene" uid="uid://c0i4ydmxtxfho" path="res://base-environments/youth_room/import/youth_room.glb" id="1_jf3oi"]
|
||||
[ext_resource type="AudioStream" uid="uid://1h6k2d8q1kw3" path="res://base-environments/youth_room/import/sounds/rain_on_window.mp3" id="2_3haaq"]
|
||||
[ext_resource type="PackedScene" uid="uid://mkccbig41bqb" path="res://logic-scenes/player_controller/player_controller.tscn" id="3_foj4y"]
|
||||
[ext_resource type="AudioStream" uid="uid://bbpo1hu35yer8" path="res://base-environments/youth_room/import/sounds/thunder.mp3" id="3_wcypa"]
|
||||
[ext_resource type="Script" uid="uid://c281w7earok6w" path="res://base-environments/youth_room/crouch_volume.gd" id="3_x3dlb"]
|
||||
[ext_resource type="PackedScene" uid="uid://bnskiyx1sksww" path="res://logic-scenes/board/physics-board.tscn" id="4_gyjxx"]
|
||||
[ext_resource type="AudioStream" uid="uid://1tvopjmo6dp2" path="res://base-environments/youth_room/audio/Azure Studios - mgd-723687677.mp3" id="5_fe1yj"]
|
||||
[ext_resource type="PackedScene" uid="uid://citwb7f4dl3l1" path="res://thank-you.tscn" id="5_kts6y"]
|
||||
|
|
@ -90,7 +91,7 @@ height = 1.0
|
|||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_kewqg"]
|
||||
radius = 0.787239
|
||||
height = 3.19663
|
||||
height = 4.07459
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_k4x40"]
|
||||
radius = 1.0352
|
||||
|
|
@ -1606,6 +1607,7 @@ script = ExtResource("1_aitp0")
|
|||
unique_name_in_owner = true
|
||||
process_mode = 4
|
||||
transform = Transform3D(0.686123, 0, 0.727485, 0, 1, 0, -0.727485, 0, 0.686123, 0.63, 0, 0.925)
|
||||
collision_mask = 3
|
||||
|
||||
[node name="colission" type="Node3D" parent="logic"]
|
||||
|
||||
|
|
@ -1716,11 +1718,12 @@ collision_mask = 2
|
|||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.170028, 0.244833, -0.0455775)
|
||||
shape = SubResource("CapsuleShape3D_f1g8m")
|
||||
|
||||
[node name="ladder_reset" type="Area3D" parent="logic/Bed and Ladders"]
|
||||
[node name="bed_duck" type="Area3D" parent="logic/Bed and Ladders"]
|
||||
collision_layer = 2
|
||||
collision_mask = 2
|
||||
script = ExtResource("3_x3dlb")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="logic/Bed and Ladders/ladder_reset"]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="logic/Bed and Ladders/bed_duck"]
|
||||
transform = Transform3D(0.995341, 0.096419, 0, 4.21461e-09, -4.35077e-08, -1, -0.096419, 0.995341, -4.37114e-08, 0.916567, 1.64525, -1.14479)
|
||||
shape = SubResource("CapsuleShape3D_kewqg")
|
||||
|
||||
|
|
@ -1733,12 +1736,13 @@ collision_mask = 2
|
|||
transform = Transform3D(0.995341, 0.096419, 0, 4.21461e-09, -4.35077e-08, -1, -0.096419, 0.995341, -4.37114e-08, 0, 0, 0)
|
||||
shape = SubResource("CapsuleShape3D_k4x40")
|
||||
|
||||
[node name="bed_reset" type="Area3D" parent="logic/Bed and Ladders"]
|
||||
[node name="bed_crouch" type="Area3D" parent="logic/Bed and Ladders"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.24356, 0, -0.796765)
|
||||
collision_layer = 2
|
||||
collision_mask = 2
|
||||
script = ExtResource("3_x3dlb")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="logic/Bed and Ladders/bed_reset"]
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="logic/Bed and Ladders/bed_crouch"]
|
||||
transform = Transform3D(0.995341, 0.096419, 0, 4.21461e-09, -4.35077e-08, -1, -0.096419, 0.995341, -4.37114e-08, 0.107988, 1.56575e-08, -0.358201)
|
||||
shape = SubResource("CapsuleShape3D_4q8vc")
|
||||
|
||||
|
|
@ -2432,10 +2436,8 @@ light_array = Array[Vector3]([Vector3(-0.545, 0.915, 1.035), Vector3(-0.47, 0.85
|
|||
[connection signal="ui_exited" from="logic/PlayerController" to="SceneUI" method="hide"]
|
||||
[connection signal="body_entered" from="logic/Bed and Ladders/ladder_trigger" to="logic/PlayerController" method="_on_bed_enter"]
|
||||
[connection signal="body_entered" from="logic/Bed and Ladders/ladder_trigger" to="logic/Bed and Ladders/ladder" method="raise"]
|
||||
[connection signal="body_exited" from="logic/Bed and Ladders/ladder_reset" to="logic/PlayerController" method="_on_bed_exit"]
|
||||
[connection signal="body_exited" from="logic/Bed and Ladders/ladder_reset" to="logic/Bed and Ladders/ladder" method="reset"]
|
||||
[connection signal="body_exited" from="logic/Bed and Ladders/bed_duck" to="logic/Bed and Ladders/ladder" method="reset"]
|
||||
[connection signal="body_entered" from="logic/Bed and Ladders/bed_enter" to="logic/PlayerController" method="_on_bed_enter"]
|
||||
[connection signal="body_exited" from="logic/Bed and Ladders/bed_reset" to="logic/PlayerController" method="_on_bed_exit"]
|
||||
[connection signal="body_exited" from="logic/Bed and Ladders/reset_failover" to="logic/PlayerController" method="_on_bed_exit"]
|
||||
[connection signal="pressed" from="logic/UI/ending_button" to="logic/UI/ending_button" method="hide"]
|
||||
[connection signal="pressed" from="logic/UI/ending_button" to="logic/UI/ending" method="show"]
|
||||
|
|
|
|||
|
|
@ -52,7 +52,17 @@ var rotation_speed: Vector2 = Vector2.ZERO
|
|||
var current_mouse_rotation: Vector2 = Vector2.ZERO
|
||||
|
||||
var noise: Noise = FastNoiseLite.new()
|
||||
var crouched:bool = false
|
||||
var crouched:bool = false:
|
||||
set(set_crouching):
|
||||
if is_node_ready():
|
||||
if set_crouching and not crouched:
|
||||
$PlayerAnimationPlayer.play("crouch")
|
||||
crouched = set_crouching
|
||||
elif (not set_crouching and crouched) and not crouch_held:
|
||||
if can_stand_up():
|
||||
$PlayerAnimationPlayer.play("stand_up")
|
||||
crouch_toggled = false
|
||||
crouched = set_crouching
|
||||
var on_crouch_cooldown:bool = false
|
||||
|
||||
@onready var yaw: Node3D = $Yaw
|
||||
|
|
@ -79,6 +89,7 @@ func _ready():
|
|||
_handle_jitter(0)
|
||||
ui_prober.area_entered.connect(_on_ray_entered)
|
||||
ui_prober.area_exited.connect(_on_ray_exited)
|
||||
$CrouchDetector.area_exited.connect(exit_crouch)
|
||||
|
||||
func _process(_delta):
|
||||
|
||||
|
|
@ -209,6 +220,23 @@ func _input(event:InputEvent):
|
|||
if focus_ray.is_colliding():
|
||||
focus_ray.get_collider().handle(event)
|
||||
get_viewport().set_input_as_handled()
|
||||
|
||||
if event.is_action_pressed("crouch"):
|
||||
cround_start_time = Time.get_unix_time_from_system()
|
||||
crouch_held = true
|
||||
if crouch_toggled:
|
||||
crouched = false
|
||||
#crouch_toggled is being released by crouch setter
|
||||
else:
|
||||
crouched = true
|
||||
|
||||
if event.is_action_released("crouch"):
|
||||
crouch_held = false
|
||||
if Time.get_unix_time_from_system() > cround_start_time + 0.5:
|
||||
if crouched:
|
||||
crouched = false
|
||||
else:
|
||||
crouch_toggled = true
|
||||
|
||||
func play_scene(id: int, _repeat):
|
||||
if id == Scenes.id.YOUTH_DRAEVEN:
|
||||
|
|
@ -218,7 +246,11 @@ func scene_finished(_id, repeat: bool):
|
|||
if repeat:
|
||||
State.take_stage(self, true)
|
||||
|
||||
var crouch_held: bool = false
|
||||
var crouch_toggled: bool = false
|
||||
var cround_start_time: float = 0
|
||||
func _on_bed_enter(_body):
|
||||
return
|
||||
if not (crouched or on_crouch_cooldown):
|
||||
$PlayerAnimationPlayer.queue("crouch")
|
||||
var tween = create_tween()
|
||||
|
|
@ -226,6 +258,7 @@ func _on_bed_enter(_body):
|
|||
crouched = true
|
||||
|
||||
func _on_bed_exit(_body):
|
||||
return
|
||||
if crouched:
|
||||
crouched = false
|
||||
$PlayerAnimationPlayer.queue("stand_up")
|
||||
|
|
@ -235,3 +268,16 @@ func _on_bed_exit(_body):
|
|||
on_crouch_cooldown = true
|
||||
await get_tree().create_timer(1.0).timeout
|
||||
on_crouch_cooldown = false
|
||||
|
||||
var inside_crouch_volume: Array[CrouchVolume] = []
|
||||
|
||||
#returns true, if the player character can stand upright.
|
||||
func can_stand_up() -> bool:
|
||||
for area: Area3D in $CrouchDetector.get_overlapping_areas():
|
||||
if area is CrouchVolume:
|
||||
return false
|
||||
return true
|
||||
|
||||
func exit_crouch(body):
|
||||
if body is Area3D:
|
||||
crouched = false
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=9 format=3 uid="uid://mkccbig41bqb"]
|
||||
[gd_scene load_steps=10 format=3 uid="uid://mkccbig41bqb"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bk618uyhghswx" path="res://logic-scenes/player_controller/player_controller.gd" id="1_0b4mi"]
|
||||
|
||||
|
|
@ -8,8 +8,9 @@ friction = 0.0
|
|||
[sub_resource type="SeparationRayShape3D" id="SeparationRayShape3D_hpoj0"]
|
||||
length = 1.29801
|
||||
|
||||
[sub_resource type="SphereShape3D" id="8"]
|
||||
radius = 0.307047
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_hpoj0"]
|
||||
radius = 0.3
|
||||
height = 1.2
|
||||
|
||||
[sub_resource type="Animation" id="11"]
|
||||
length = 0.001
|
||||
|
|
@ -37,6 +38,42 @@ tracks/1/keys = {
|
|||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("PlayerCollision:shape:height")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [1.2]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("PlayerCollision:position")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0.6, 0)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath(".:max_speed")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [3.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="12"]
|
||||
resource_name = "crouch"
|
||||
|
|
@ -65,6 +102,42 @@ tracks/1/keys = {
|
|||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(-30, 0, -10), Vector3(-20, 0, 3), Vector3(0, 0, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("PlayerCollision:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 1.01),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0.6, 0), Vector3(0, 0.3, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("PlayerCollision:shape:height")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 1.01),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [1.2, 0.6]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath(".:max_speed")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0, 0.69),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [3.0, 1.5]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="14"]
|
||||
resource_name = "stand_up"
|
||||
|
|
@ -93,6 +166,42 @@ tracks/1/keys = {
|
|||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(-4.79133, 3.17287, -3.71499), Vector3(24.594, -3.154, -4.794), Vector3(0.103793, -1.69217, -1.78899), Vector3(0, 0, 0)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("PlayerCollision:position")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 1.01),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0.3, 0), Vector3(0, 0.6, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("PlayerCollision:shape:height")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0, 1.03333),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0.6, 1.2]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath(".:max_speed")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0.9, 2.2),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [1.5, 3.0]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_xbx3w"]
|
||||
_data = {
|
||||
|
|
@ -101,9 +210,10 @@ _data = {
|
|||
&"stand_up": SubResource("14")
|
||||
}
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_hpoj0"]
|
||||
radius = 0.3
|
||||
|
||||
[node name="PlayerController" type="RigidBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.26517, 1.19209e-07, 1.70185)
|
||||
collision_layer = 3
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_y = true
|
||||
axis_lock_angular_z = true
|
||||
|
|
@ -139,10 +249,18 @@ transform = Transform3D(-1, 0, -8.74229e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0,
|
|||
shape = SubResource("SeparationRayShape3D_hpoj0")
|
||||
|
||||
[node name="PlayerCollision" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0.322255, 0)
|
||||
shape = SubResource("8")
|
||||
transform = Transform3D(1, 0, 0, 0, -1, 8.74228e-08, 0, -8.74228e-08, -1, 0, 0.6, 0)
|
||||
shape = SubResource("CapsuleShape3D_hpoj0")
|
||||
|
||||
[node name="PlayerAnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_xbx3w")
|
||||
}
|
||||
|
||||
[node name="CrouchDetector" type="Area3D" parent="."]
|
||||
collision_layer = 3
|
||||
collision_mask = 3
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="CrouchDetector"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.35, 0)
|
||||
shape = SubResource("SphereShape3D_hpoj0")
|
||||
|
|
|
|||
|
|
@ -176,6 +176,13 @@ option_memento_ui={
|
|||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
crouch={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":7,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[internationalization]
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue