diff options
author | cflip <cflip@cflip.net> | 2022-09-26 20:25:09 -0600 |
---|---|---|
committer | cflip <cflip@cflip.net> | 2022-09-26 20:25:09 -0600 |
commit | 51f0075b49e26a99df0d1ce34032330315a4c2d3 (patch) | |
tree | 353ed95d019d27fe2727c4b9335fb472eb0d49c6 | |
parent | 586a6d7d5f9f8ab6cfe9fccab8ee827b2aab172f (diff) |
Refactor basketball script and scene
This removes the OuterShape node from the basketball scene, and removes
a lot of redundant or unused variable in the script.
-rw-r--r-- | scenes/basketball.tscn | 12 | ||||
-rw-r--r-- | scripts/basketball.gd | 62 |
2 files changed, 21 insertions, 53 deletions
diff --git a/scenes/basketball.tscn b/scenes/basketball.tscn index b3519c3..cdf2b5d 100644 --- a/scenes/basketball.tscn +++ b/scenes/basketball.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://textures/basketball.png" type="Texture" id=1] [ext_resource path="res://scripts/basketball.gd" type="Script" id=2] @@ -9,9 +9,6 @@ bounce = 0.65 [sub_resource type="CircleShape2D" id=1] radius = 8.0 -[sub_resource type="CircleShape2D" id=3] -radius = 30.0 - [node name="Basketball" type="RigidBody2D"] physics_material_override = SubResource( 2 ) script = ExtResource( 2 ) @@ -30,17 +27,10 @@ texture = ExtResource( 1 ) [node name="Sprite" type="Sprite" parent="."] texture = ExtResource( 1 ) -[node name="OuterShape" type="Area2D" parent="."] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="OuterShape"] -shape = SubResource( 3 ) - [node name="InnerShape" type="Area2D" parent="."] [node name="CollisionShape2D2" type="CollisionShape2D" parent="InnerShape"] shape = SubResource( 1 ) -[connection signal="mouse_entered" from="OuterShape" to="." method="on_OuterShape_mouse_entered"] -[connection signal="mouse_exited" from="OuterShape" to="." method="_on_OuterShape_mouse_exited"] [connection signal="mouse_entered" from="InnerShape" to="." method="_on_InnerShape_mouse_entered"] [connection signal="mouse_exited" from="InnerShape" to="." method="_on_InnerShape_mouse_exited"] diff --git a/scripts/basketball.gd b/scripts/basketball.gd index 6171410..feed262 100644 --- a/scripts/basketball.gd +++ b/scripts/basketball.gd @@ -3,16 +3,12 @@ extends RigidBody2D export var spin_speed = -1 export var move_speed = 60 export var power_magnitude = 10 +export var drag_radius = 30 var start_position var is_dragging = false var waiting_for_shoot = true -var ready_to_shoot -var ready_to_hold -var power -var spin_rotation = 0 -var has_exited -var exit_position +var mouse_over_ball func _ready(): start_position = position @@ -20,7 +16,13 @@ func _ready(): func toggle_mode(): if waiting_for_shoot: waiting_for_shoot = false - shoot() + + var shoot_power = -$Sprite.position * power_magnitude + apply_impulse(Vector2(2, 2), shoot_power) + + is_dragging = false + $GhostSprite.visible = false + $Sprite.position = Vector2(0, 0) else: # Adds offset of ball's rotation to sprite AFTER the entire object has rotated from physics. # Done to keep appearance of same rotation to add consistency when resetting the ball. @@ -29,9 +31,6 @@ func toggle_mode(): waiting_for_shoot = true set_use_custom_integrator(waiting_for_shoot) -func shoot(): - apply_impulse(Vector2(2, 2), Vector2(power)) - # Override the default physics when we want to manually set the position and rotation. func _integrate_forces(state): if waiting_for_shoot: @@ -51,51 +50,30 @@ func _process(delta): start_position.x = clamp(start_position.x, 0, get_viewport_rect().size.x) func _input(event): - if event.is_action_pressed("shoot") and ready_to_hold and waiting_for_shoot: + if event.is_action_pressed("shoot") and mouse_over_ball and waiting_for_shoot: is_dragging = true - $GhostSprite.visible = true $Sprite.position = event.position - start_position + $GhostSprite.visible = true $GhostSprite.rotation = $Sprite.rotation if is_dragging and event is InputEventMouseMotion: $Sprite.position = event.position - start_position - if has_exited: + var hypot = sqrt(pow($Sprite.position.x, 2) + pow($Sprite.position.y, 2)) + if hypot > drag_radius: var angle = atan2($Sprite.position.y, $Sprite.position.x) - $Sprite.position = Vector2(cos(angle), sin(angle)) * $OuterShape/CollisionShape2D.shape.radius + $Sprite.position = Vector2(cos(angle), sin(angle)) * drag_radius if event.is_action_released("shoot"): - if !waiting_for_shoot: + if !waiting_for_shoot || is_dragging: toggle_mode() - if is_dragging and ready_to_shoot: - is_dragging = false - $GhostSprite.visible = false - $Sprite.position = Vector2() - var basketball_position - if has_exited: - basketball_position = exit_position - else: - basketball_position = event.position - power = (start_position - basketball_position) * power_magnitude - toggle_mode() - -func on_OuterShape_mouse_entered(): - ready_to_shoot = true - has_exited = false -func _on_OuterShape_mouse_exited(): - if is_dragging: - exit_position = get_global_mouse_position() - $Sprite.position = get_local_mouse_position() - has_exited = true - else: - ready_to_shoot = false func _on_InnerShape_mouse_entered(): - ready_to_hold = true + mouse_over_ball = true + func _on_InnerShape_mouse_exited(): - ready_to_hold = false + mouse_over_ball = false func position_changer(): - var clamp_minimum; var clamp_maximum - clamp_minimum = $OuterShape/CollisionShape2D.shape.radius + 0 - clamp_maximum = global_variables.hoop_position - 40 + var clamp_minimum = drag_radius + 0 + var clamp_maximum = global_variables.hoop_position - 40 if global_variables.score < 5: start_position.x -= 20 start_position.x = clamp(start_position.x, clamp_minimum, clamp_maximum) |