goalpost
This commit is contained in:
parent
e1b43c8bc5
commit
08712cf22c
11 changed files with 244 additions and 37 deletions
|
@ -1,3 +1,4 @@
|
|||
class_name Player
|
||||
extends CharacterBody3D
|
||||
|
||||
|
||||
|
@ -5,6 +6,8 @@ extends CharacterBody3D
|
|||
@export var power_sensitivity: float
|
||||
@export var power_threshold: float
|
||||
|
||||
@export var goal_animation_time: float = 1.0
|
||||
|
||||
@export_group("Movement")
|
||||
@export var gravity: float
|
||||
@export var friction: float
|
||||
|
@ -18,9 +21,10 @@ extends CharacterBody3D
|
|||
|
||||
@export_group("Node References")
|
||||
@export var state_chart: StateChart
|
||||
@export var graphics: Node3D
|
||||
@export var power_indicator: Node3D
|
||||
@export var camera_arm: SpringArm3D
|
||||
@export var wall_detector: PhysicsBody3D
|
||||
@export var collision_shape: CollisionShape3D
|
||||
|
||||
|
||||
var power: float = 0.0:
|
||||
|
@ -30,6 +34,8 @@ var power: float = 0.0:
|
|||
var charging_power: bool = false
|
||||
var prev_velocity: Vector3 = Vector3.ZERO
|
||||
|
||||
var _entered_goal: Node3D = self
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
|
@ -57,6 +63,13 @@ func _unhandled_input(event: InputEvent) -> void:
|
|||
camera_arm.rotation.x = clampf(camera_arm.rotation.x, -camera_high_angle, -camera_low_angle)
|
||||
|
||||
|
||||
#region Public Functions
|
||||
func enter_goal(goal: GoalPost) -> void:
|
||||
_entered_goal = goal
|
||||
state_chart.send_event(&"goal_entered")
|
||||
#endregion
|
||||
|
||||
|
||||
#region Charging
|
||||
func _start_charge() -> void:
|
||||
charging_power = true
|
||||
|
@ -115,3 +128,17 @@ func _bounce_on_walls(delta: float = 0.0) -> void:
|
|||
#velocity.x = h_vel.x
|
||||
#velocity.z = h_vel.z
|
||||
#endregion
|
||||
|
||||
|
||||
#region Winning
|
||||
func _start_winning() -> void:
|
||||
velocity = Vector3.ZERO
|
||||
prev_velocity = velocity
|
||||
collision_shape.disabled = true
|
||||
|
||||
var tween = create_tween()
|
||||
tween.set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
|
||||
tween.tween_property(graphics, ^"scale", Vector3.ZERO, goal_animation_time)
|
||||
tween.set_parallel(true)
|
||||
tween.tween_property(graphics, ^"global_position", _entered_goal.global_position, goal_animation_time)
|
||||
#endregion
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=15 format=3 uid="uid://cybm74xwbsivx"]
|
||||
[gd_scene load_steps=14 format=3 uid="uid://cybm74xwbsivx"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://3i17aqnrspma" path="res://assets/textures/player/canny.png" id="1_cp4br"]
|
||||
[ext_resource type="Script" path="res://objects/canny_cat.gd" id="1_twfq8"]
|
||||
|
@ -9,11 +9,8 @@
|
|||
[ext_resource type="Script" path="res://addons/godot_state_charts/transition.gd" id="7_epv8h"]
|
||||
[ext_resource type="Script" path="res://addons/godot_state_charts/expression_guard.gd" id="8_d5slg"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_0aipe"]
|
||||
height = 0.25
|
||||
radius = 0.55
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_4o01j"]
|
||||
radius = 0.45
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2xpb7"]
|
||||
shading_mode = 0
|
||||
|
@ -35,7 +32,7 @@ resource_name = "Not Moving"
|
|||
script = ExtResource("8_d5slg")
|
||||
expression = "velocity.is_zero_approx()"
|
||||
|
||||
[node name="CannyCat" type="CharacterBody3D" node_paths=PackedStringArray("state_chart", "power_indicator", "camera_arm", "wall_detector")]
|
||||
[node name="CannyCat" type="CharacterBody3D" node_paths=PackedStringArray("state_chart", "graphics", "power_indicator", "camera_arm", "collision_shape")]
|
||||
process_priority = -100
|
||||
process_physics_priority = -100
|
||||
collision_layer = 16
|
||||
|
@ -55,25 +52,31 @@ camera_high_angle = 1.0472
|
|||
camera_yaw_sensitivity = 0.00872665
|
||||
camera_pitch_sensitivity = 0.00872665
|
||||
state_chart = NodePath("StateChart")
|
||||
graphics = NodePath("Graphics")
|
||||
power_indicator = NodePath("PowerIndicator")
|
||||
camera_arm = NodePath("CameraArm")
|
||||
wall_detector = NodePath("WallDetector")
|
||||
|
||||
[node name="WallDetector" type="StaticBody3D" parent="."]
|
||||
collision_layer = 0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="WallDetector"]
|
||||
shape = SubResource("CylinderShape3D_0aipe")
|
||||
collision_shape = NodePath("CollisionShape3D")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("SphereShape3D_4o01j")
|
||||
|
||||
[node name="CannySprite" type="Sprite3D" parent="."]
|
||||
[node name="Graphics" type="Node3D" parent="."]
|
||||
|
||||
[node name="CannySprite" type="Sprite3D" parent="Graphics"]
|
||||
pixel_size = 0.0156
|
||||
billboard = 1
|
||||
texture_filter = 0
|
||||
texture = ExtResource("1_cp4br")
|
||||
|
||||
[node name="ShadowArm" type="SpringArm3D" parent="Graphics"]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, -0.25, 0)
|
||||
collision_mask = 7
|
||||
spring_length = 100.0
|
||||
|
||||
[node name="ShadowSprite" type="Sprite3D" parent="Graphics/ShadowArm"]
|
||||
pixel_size = 0.0313
|
||||
texture = ExtResource("2_fwt6m")
|
||||
|
||||
[node name="PowerIndicator" type="Node3D" parent="."]
|
||||
visible = false
|
||||
|
||||
|
@ -84,15 +87,6 @@ cast_shadow = 0
|
|||
gi_mode = 0
|
||||
mesh = SubResource("CylinderMesh_b16dl")
|
||||
|
||||
[node name="ShadowArm" type="SpringArm3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0)
|
||||
collision_mask = 7
|
||||
spring_length = 100.0
|
||||
|
||||
[node name="ShadowSprite" type="Sprite3D" parent="ShadowArm"]
|
||||
pixel_size = 0.0078
|
||||
texture = ExtResource("2_fwt6m")
|
||||
|
||||
[node name="CameraArm" type="SpringArm3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 0, 0, 0)
|
||||
spring_length = 8.0
|
||||
|
@ -111,6 +105,12 @@ initial_expression_properties = {
|
|||
script = ExtResource("5_ox6hb")
|
||||
initial_state = NodePath("Moving")
|
||||
|
||||
[node name="on GoalEntered" type="Node" parent="StateChart/Root"]
|
||||
script = ExtResource("7_epv8h")
|
||||
to = NodePath("../Winning")
|
||||
event = &"goal_entered"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="Idle" type="Node" parent="StateChart/Root"]
|
||||
script = ExtResource("6_bu01i")
|
||||
|
||||
|
@ -144,6 +144,9 @@ to = NodePath("../../Moving")
|
|||
event = &"charge_released"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="Winning" type="Node" parent="StateChart/Root"]
|
||||
script = ExtResource("6_bu01i")
|
||||
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Idle" to="." method="_apply_gravity"]
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_slow_to_stop"]
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_apply_gravity"]
|
||||
|
@ -151,3 +154,4 @@ delay_in_seconds = "0.0"
|
|||
[connection signal="state_entered" from="StateChart/Root/Charging" to="." method="_start_charge"]
|
||||
[connection signal="state_exited" from="StateChart/Root/Charging" to="." method="_end_charge"]
|
||||
[connection signal="state_physics_processing" from="StateChart/Root/Charging" to="." method="_update_charge"]
|
||||
[connection signal="state_entered" from="StateChart/Root/Winning" to="." method="_start_winning"]
|
||||
|
|
7
objects/goal_post.gd
Normal file
7
objects/goal_post.gd
Normal file
|
@ -0,0 +1,7 @@
|
|||
class_name GoalPost
|
||||
extends Node3D
|
||||
|
||||
|
||||
func _on_player_detector_body_entered(body: Node3D) -> void:
|
||||
if body is Player:
|
||||
body.enter_goal(self)
|
70
objects/goal_post.tscn
Normal file
70
objects/goal_post.tscn
Normal file
|
@ -0,0 +1,70 @@
|
|||
[gd_scene load_steps=9 format=3 uid="uid://cdpgby3r6xe4n"]
|
||||
|
||||
[ext_resource type="Script" path="res://objects/goal_post.gd" id="1_08x2x"]
|
||||
[ext_resource type="Shader" path="res://assets/shaders/flag.gdshader" id="2_xbid5"]
|
||||
[ext_resource type="Texture2D" uid="uid://cyxkbck2gs2wt" path="res://assets/textures/objects/goal_hole.png" id="3_yg6kd"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_e2vbu"]
|
||||
shading_mode = 2
|
||||
albedo_color = Color(0.196078, 0.235294, 0.223529, 1)
|
||||
metallic_specular = 0.0
|
||||
|
||||
[sub_resource type="CylinderMesh" id="CylinderMesh_i27ie"]
|
||||
material = SubResource("StandardMaterial3D_e2vbu")
|
||||
top_radius = 0.1
|
||||
bottom_radius = 0.1
|
||||
height = 4.0
|
||||
radial_segments = 6
|
||||
rings = 8
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_3urv4"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("2_xbid5")
|
||||
shader_parameter/color_bright = Color(1, 0.290196, 0.356863, 1)
|
||||
shader_parameter/color_dark = Color(0.870588, 0.156863, 0.223529, 1)
|
||||
shader_parameter/pivot = 2.0
|
||||
shader_parameter/pivot_speed = 1.0
|
||||
shader_parameter/waves = 6.0
|
||||
shader_parameter/wave_speed = 5.0
|
||||
shader_parameter/wave_scale = 0.25
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_mfpmh"]
|
||||
material = SubResource("ShaderMaterial_3urv4")
|
||||
size = Vector2(2, 1)
|
||||
subdivide_width = 6
|
||||
center_offset = Vector3(1, 0, 0)
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_eshe3"]
|
||||
height = 0.5
|
||||
|
||||
[node name="GoalPost" type="Node3D"]
|
||||
script = ExtResource("1_08x2x")
|
||||
|
||||
[node name="Graphics" type="Node3D" parent="."]
|
||||
|
||||
[node name="Pole" type="MeshInstance3D" parent="Graphics"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||
mesh = SubResource("CylinderMesh_i27ie")
|
||||
|
||||
[node name="Flag" type="MeshInstance3D" parent="Graphics"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.5, 0)
|
||||
mesh = SubResource("QuadMesh_mfpmh")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="Graphics"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.01, 0)
|
||||
pixel_size = 0.0313
|
||||
axis = 1
|
||||
alpha_cut = 2
|
||||
texture_filter = 0
|
||||
texture = ExtResource("3_yg6kd")
|
||||
|
||||
[node name="PlayerDetector" type="Area3D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 16
|
||||
monitorable = false
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetector"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0)
|
||||
shape = SubResource("CylinderShape3D_eshe3")
|
||||
|
||||
[connection signal="body_entered" from="PlayerDetector" to="." method="_on_player_detector_body_entered"]
|
Loading…
Add table
Add a link
Reference in a new issue