summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcflip <cflip@cflip.net>2022-09-24 14:39:59 -0600
committercflip <cflip@cflip.net>2022-09-24 14:39:59 -0600
commit2a8564b5b2576d34c91c5cc559ca40bb7db1d28e (patch)
tree1736fb63f7d2b16b29208f2edce769f29391d367
parentd5c6407dd82aaf5fee0c0a6f8d02ff1e9f41df23 (diff)
Refactor basketball script to disable physics while waiting for shoot
-rw-r--r--scenes/basketball.tscn1
-rw-r--r--scripts/basketball.gd45
2 files changed, 24 insertions, 22 deletions
diff --git a/scenes/basketball.tscn b/scenes/basketball.tscn
index a73bdd9..f49819d 100644
--- a/scenes/basketball.tscn
+++ b/scenes/basketball.tscn
@@ -11,7 +11,6 @@ radius = 40.0
[node name="Basketball" type="RigidBody2D"]
physics_material_override = SubResource( 2 )
-gravity_scale = 0.0
script = ExtResource( 2 )
__meta__ = {
"_edit_group_": true
diff --git a/scripts/basketball.gd b/scripts/basketball.gd
index 8eaa2ba..a2f724f 100644
--- a/scripts/basketball.gd
+++ b/scripts/basketball.gd
@@ -3,27 +3,40 @@ extends RigidBody2D
signal change_power
var start_position
-var do_reset = true
-var is_reset = true
+var waiting_for_shoot = true
var power = 100
+var spin_rotation = 0
+var spin_speed = -1
func _ready():
start_position = position
-# Override the default physics when we want to manually reset the position and rotation.
+func toggle_mode():
+ if waiting_for_shoot:
+ waiting_for_shoot = false
+ shoot()
+ else:
+ global_variables.has_scored = false
+ waiting_for_shoot = true
+ set_use_custom_integrator(waiting_for_shoot)
+
+func shoot():
+ var x_power = power * 5
+ var y_power = power * -8
+ apply_impulse(Vector2(10, 10), Vector2(x_power, y_power))
+
+# Override the default physics when we want to manually set the position and rotation.
func _integrate_forces(state):
- if do_reset:
- state.transform.origin = start_position
+ if waiting_for_shoot:
+ state.transform = Transform2D(spin_rotation, start_position)
state.linear_velocity = Vector2()
state.angular_velocity = 0
- set_angular_damp(0)
- apply_torque_impulse(-1000)
-
- do_reset = false
- is_reset = true
# Temporary controls to adjust power
func _process(delta):
+ if waiting_for_shoot:
+ spin_rotation += spin_speed * delta
+
if Input.is_action_pressed("ui_up"):
if power < 200:
power += 0.5
@@ -35,14 +48,4 @@ func _process(delta):
func _input(event):
if event.is_action_pressed("shoot"):
- if is_reset:
- set_angular_damp(-1)
- gravity_scale = 1
- var x_power = power * 5
- var y_power = power * -8
- apply_impulse(Vector2(10, 10), Vector2(x_power, y_power))
- is_reset = false
- else:
- global_variables.has_scored = false
- gravity_scale = 0
- do_reset = true
+ toggle_mode()