summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcflip <cflip@cflip.net>2022-09-26 20:25:09 -0600
committercflip <cflip@cflip.net>2022-09-26 20:25:09 -0600
commit51f0075b49e26a99df0d1ce34032330315a4c2d3 (patch)
tree353ed95d019d27fe2727c4b9335fb472eb0d49c6
parent586a6d7d5f9f8ab6cfe9fccab8ee827b2aab172f (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.tscn12
-rw-r--r--scripts/basketball.gd62
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)