From e1a07fac86210cbdca24fc6b2d59c3e964277cac Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Wed, 6 Nov 2024 10:44:27 -0700 Subject: [PATCH] Player can cancel meters in shot setup --- src/player/physics_ball/physics_ball.tscn | 1 + src/player/shot_setup/shot_setup.gd | 19 ++++++++++--- src/player/shot_setup/shot_setup.tscn | 33 +++++++++++++++++++++-- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/player/physics_ball/physics_ball.tscn b/src/player/physics_ball/physics_ball.tscn index c7c01b4..5f2b5d7 100644 --- a/src/player/physics_ball/physics_ball.tscn +++ b/src/player/physics_ball/physics_ball.tscn @@ -4,6 +4,7 @@ [ext_resource type="Texture2D" uid="uid://btntjs7mbdigu" path="res://assets/textures/gfolfball/gfolfball_normal.png" id="2_mx7l6"] [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_2gatw"] +friction = 0.2 bounce = 0.5 [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xqofq"] diff --git a/src/player/shot_setup/shot_setup.gd b/src/player/shot_setup/shot_setup.gd index e2b02c4..5f30ae7 100644 --- a/src/player/shot_setup/shot_setup.gd +++ b/src/player/shot_setup/shot_setup.gd @@ -96,6 +96,8 @@ var _returning_free_camera := false @onready var nice_animation: AnimationPlayer = %NiceAnimation +@onready var ball_impulse_debug: Node3D = %BallImpulseDebug + @onready var camera_distance := camera.position.z: set = _set_camera_distance @@ -145,11 +147,15 @@ func take_shot() -> void: print("Power: ", power_bar.value) print("Curve: ", curve_bar.value) - var impulse := shot_ref.global_basis * Vector3.ONE * base_power * power_bar.value + var impulse := shot_ref.global_basis.z * base_power * power_bar.value print("Shot impulse: ", impulse) + ball_impulse_debug.transform = ( + Transform3D.IDENTITY.scaled(Vector3.ONE * impulse.length()).looking_at(impulse) + ) + physics_ball.freeze = false - physics_ball.apply_central_impulse(impulse.rotated(Vector3.UP, -PI / 2.0)) + physics_ball.apply_central_impulse(impulse) func insert_free_cam() -> void: @@ -224,7 +230,8 @@ func _on_club_change(new_club: T.Club) -> void: func _on_phase_change(new_phase: Phase) -> void: match new_phase: Phase.AIM: - arrow_animation.play("show") + if not arrow.visible: + arrow_animation.play("show") camera.make_current() power_bar.hide() curve_bar.hide() @@ -323,10 +330,16 @@ func _process(delta: float) -> void: if Input.is_action_just_pressed("shot_accept"): # TODO set power gauge parameters if needed power_animation.play("fill") + if Input.is_action_just_pressed("ui_cancel"): + power_animation.stop() + phase = Phase.AIM if Input.is_action_just_released("shot_accept") and power_bar.value > 0: power_animation.pause() phase = Phase.CURVE_ADJUST Phase.CURVE_ADJUST: + if Input.is_action_just_pressed("ui_cancel"): + curve_animation.stop() + phase = Phase.POWER_ADJUST if Input.is_action_just_pressed("shot_accept"): curve_animation.pause() phase = Phase.SHOT diff --git a/src/player/shot_setup/shot_setup.tscn b/src/player/shot_setup/shot_setup.tscn index 5827aca..e9c8627 100644 --- a/src/player/shot_setup/shot_setup.tscn +++ b/src/player/shot_setup/shot_setup.tscn @@ -1,10 +1,19 @@ -[gd_scene load_steps=22 format=3 uid="uid://cy7t2tc4y3b4"] +[gd_scene load_steps=24 format=3 uid="uid://cy7t2tc4y3b4"] [ext_resource type="Script" path="res://src/player/shot_setup/shot_setup.gd" id="1_r6ei4"] [ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/player/physics_ball/physics_ball.tscn" id="2_1i5j5"] [ext_resource type="PackedScene" uid="uid://c2k88ns0h5ie1" path="res://src/ui/arrow.tscn" id="2_s70wl"] [ext_resource type="PackedScene" uid="uid://445qd7m4qe2j" path="res://src/player/shot_setup/club_selector/club_selector.tscn" id="4_56ape"] +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lnol1"] +albedo_color = Color(0, 0.537255, 1, 1) + +[sub_resource type="CylinderMesh" id="CylinderMesh_ql2ui"] +material = SubResource("StandardMaterial3D_lnol1") +top_radius = 0.02 +bottom_radius = 0.02 +height = 1.0 + [sub_resource type="CapsuleMesh" id="CapsuleMesh_5uovl"] [sub_resource type="Animation" id="Animation_ug2a7"] @@ -387,6 +396,15 @@ unique_name_in_owner = true transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0) freeze = true +[node name="BallImpulseDebug" type="Node3D" parent="BallPoint"] +unique_name_in_owner = true +visible = false + +[node name="MeshInstance3D" type="MeshInstance3D" parent="BallPoint/BallImpulseDebug"] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, -0.5) +mesh = SubResource("CylinderMesh_ql2ui") +skeleton = NodePath("../..") + [node name="PlayerPivot" type="Node3D" parent="."] unique_name_in_owner = true @@ -407,9 +425,18 @@ collision_mask = 0 collide_with_bodies = false debug_shape_thickness = 4 +[node name="WedgeRef" type="RayCast3D" parent="Direction"] +unique_name_in_owner = true +transform = Transform3D(-0.7, -5.29972e-08, 3.0598e-08, 0, 0.35, 0.606218, -6.11959e-08, 0.606218, -0.35, 0, 0.2, 0) +enabled = false +target_position = Vector3(0, 0, 1) +collision_mask = 0 +collide_with_bodies = false +debug_shape_thickness = 4 + [node name="PuttRef" type="RayCast3D" parent="Direction"] unique_name_in_owner = true -transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0, 0.2, 0) +transform = Transform3D(-1, 0, -1.50996e-07, 0, 1, 0, 1.50996e-07, 0, -1, 0, 0.2, 0) enabled = false target_position = Vector3(0, 0, 1) collision_mask = 0 @@ -600,4 +627,6 @@ offset_bottom = 50.0 grow_horizontal = 1 grow_vertical = 1 +[node name="HUDAnimation" type="AnimationPlayer" parent="ShotUI"] + [connection signal="sleeping_state_changed" from="BallPoint/PhysicsBall" to="." method="_on_physics_ball_sleeping_state_changed"]