diff --git a/client/player/Player.tscn b/client/player/Player.tscn index 4a70d6f..2b6c407 100644 --- a/client/player/Player.tscn +++ b/client/player/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=28 format=3 uid="uid://2lcnu3dy54lx"] +[gd_scene load_steps=29 format=3 uid="uid://2lcnu3dy54lx"] [ext_resource type="Script" path="res://player/Player.gd" id="1_8gebs"] [ext_resource type="PackedScene" uid="uid://c8j7t4yg7anb0" path="res://assets/female/Female.blend" id="2_8nah6"] @@ -8,6 +8,7 @@ [ext_resource type="PackedScene" uid="uid://cgqbkj8wbcatv" path="res://assets/hair/PonyTail.blend" id="3_umw6q"] [ext_resource type="FontFile" uid="uid://b7mov13kwi8u8" path="res://assets/font/ubuntu_nf_regular.ttf" id="4_76ehj"] [ext_resource type="Skin" uid="uid://bbqyiue1vj37f" path="res://assets/hoodie/Hoodie_Skin.tres" id="4_b1tg1"] +[ext_resource type="Resource" uid="uid://1vmnijk8ap6b" path="res://skill/thrust/thrust.tres" id="4_s8cf2"] [ext_resource type="ArrayMesh" uid="uid://dbmluwi2atit" path="res://assets/hoodie/Hoodie_Mesh.res" id="5_mkrgn"] [ext_resource type="PackedScene" uid="uid://6jpnl6c4fdvo" path="res://player/hud/HUDComponent.tscn" id="7_fwgtd"] [ext_resource type="PackedScene" uid="uid://qecdmrg6mbws" path="res://assets/swords/heirloom/Heirloom.blend" id="7_u8433"] @@ -35,7 +36,7 @@ height = 1.6 collision_layer = 512 collision_mask = 769 script = ExtResource("1_8gebs") -skills = Array[Resource("res://skill/Skill.gd")]([ExtResource("2_x58e1"), ExtResource("3_l76ly"), null, null]) +skills = Array[Resource("res://skill/Skill.gd")]([ExtResource("2_x58e1"), ExtResource("3_l76ly"), ExtResource("4_s8cf2"), null]) [node name="Model" type="Node3D" parent="."] diff --git a/client/player/audio/AudioComponent.gd b/client/player/audio/AudioComponent.gd index e013351..af9b800 100644 --- a/client/player/audio/AudioComponent.gd +++ b/client/player/audio/AudioComponent.gd @@ -4,49 +4,47 @@ extends Node @export var skeleton: Skeleton3D @export var movement: MovementComponent @export var footsteps: Array[AudioStream] -@export var raise_threshold := 0.25 -@export var step_threshold := 0.15 +@export var step_threshold := 0.1 -var feet_names := ["LeftFoot", "RightFoot"] -var feet := [] -var feet_audio := [] -var feet_raised := [] -var feet_position := [] +const feet_names := ["LeftFoot", "RightFoot"] + +var feet: Array[Foot] = [] func _ready(): for foot_name in feet_names: - var bone_id := skeleton.find_bone(foot_name) - var audio := get_node(foot_name) + var foot = Foot.new() + foot.bone_name = foot_name + foot.bone_id = skeleton.find_bone(foot_name) + foot.audio = get_node(foot_name) + foot.position = skeleton.to_global(skeleton.get_bone_global_pose(foot.bone_id).origin) + foot.attachment = BoneAttachment3D.new() + foot.attachment.bone_name = foot_name + foot.attachment.bone_idx = foot.bone_id + foot.audio.reparent(foot.attachment) + skeleton.add_child(foot.attachment) + feet.append(foot) - feet.append(bone_id) - feet_audio.append(audio) - feet_raised.append(false) - feet_position.append(Vector3.ZERO) +func _process(delta: float): + for foot in feet: + var old_position := foot.position + foot.position = skeleton.to_global(skeleton.get_bone_global_pose(foot.bone_id).origin) + foot.velocity = (foot.position - old_position) / delta - var attachment := BoneAttachment3D.new() - attachment.bone_name = foot_name - attachment.bone_idx = bone_id - audio.reparent(attachment) - skeleton.add_child(attachment) - -func _process(_delta): - print() - for i in range(feet.size()): - feet_position[i] = skeleton.get_bone_global_pose(feet[i]).origin - print(feet_position[i].y) - - if feet_position[i].y > raise_threshold: - feet_raised[i] = true - - if !movement.body.is_on_floor(): - return - - for i in range(feet.size()): - if feet_raised[i] && feet_position[i].y < step_threshold: - play(feet_audio[i]) - feet_raised[i] = false + if foot.position.y > step_threshold: + continue + + if foot.velocity.y > 0: + continue + + if foot.velocity.length_squared() < 1.0: + continue + + if foot.audio.playing && foot.audio.get_playback_position() < 0.3: + continue + + play(foot.audio) func play(audio_player: AudioStreamPlayer3D): audio_player.stream = footsteps[randi_range(0, footsteps.size()-1)] audio_player.pitch_scale = randf_range(0.9, 1.1) - audio_player.play() \ No newline at end of file + audio_player.play() diff --git a/client/player/audio/Foot.gd b/client/player/audio/Foot.gd new file mode 100644 index 0000000..05f1930 --- /dev/null +++ b/client/player/audio/Foot.gd @@ -0,0 +1,8 @@ +class_name Foot + +var bone_name: String +var bone_id: int +var audio: AudioStreamPlayer3D +var position: Vector3 +var velocity: Vector3 +var attachment: BoneAttachment3D \ No newline at end of file diff --git a/client/project.godot b/client/project.godot index 2701d63..feebdf9 100644 --- a/client/project.godot +++ b/client/project.godot @@ -31,7 +31,6 @@ gdscript/warnings/integer_division=0 window/size/viewport_width=1920 window/size/viewport_height=1080 -window/size/mode=3 window/size/window_width_override=960 window/size/window_height_override=540 window/stretch/mode="canvas_items" diff --git a/client/skill/thrust/thrust.gd b/client/skill/thrust/thrust.gd new file mode 100644 index 0000000..51ea417 --- /dev/null +++ b/client/skill/thrust/thrust.gd @@ -0,0 +1,6 @@ +extends SkillInstance + +func _ready(): + play_animation("human/thrust", 1.0, 2.0) + await melee_damage(0.5) + queue_free() \ No newline at end of file diff --git a/client/skill/thrust/thrust.tres b/client/skill/thrust/thrust.tres new file mode 100644 index 0000000..2626502 --- /dev/null +++ b/client/skill/thrust/thrust.tres @@ -0,0 +1,11 @@ +[gd_resource type="Resource" script_class="Skill" load_steps=3 format=3 uid="uid://1vmnijk8ap6b"] + +[ext_resource type="PackedScene" uid="uid://cgycghadwb27h" path="res://skill/thrust/thrust.tscn" id="1_o6s8i"] +[ext_resource type="Script" path="res://skill/Skill.gd" id="2_g7hw0"] + +[resource] +script = ExtResource("2_g7hw0") +id = "thrust" +name = "Thrust" +cooldown = 0.0 +scene = ExtResource("1_o6s8i") diff --git a/client/skill/thrust/thrust.tscn b/client/skill/thrust/thrust.tscn new file mode 100644 index 0000000..a08853d --- /dev/null +++ b/client/skill/thrust/thrust.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=4 format=3 uid="uid://cgycghadwb27h"] + +[ext_resource type="Script" path="res://skill/thrust/thrust.gd" id="1_jtbia"] +[ext_resource type="Script" path="res://skill/MeleeArea.gd" id="2_m3c5w"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_6if7n"] +radius = 0.7 +height = 3.0 + +[node name="Thrust" type="Node3D"] +script = ExtResource("1_jtbia") + +[node name="Area" type="Area3D" parent="."] +collision_layer = 0 +collision_mask = 256 +monitoring = false +monitorable = false +script = ExtResource("2_m3c5w") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Area"] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0.7, 1.8) +shape = SubResource("CapsuleShape3D_6if7n") + +[connection signal="body_entered" from="Area" to="Area" method="on_body_entered"]