diff options
author | cflip <cflip@cflip.net> | 2022-09-24 14:39:59 -0600 |
---|---|---|
committer | cflip <cflip@cflip.net> | 2022-09-24 14:39:59 -0600 |
commit | 2a8564b5b2576d34c91c5cc559ca40bb7db1d28e (patch) | |
tree | 1736fb63f7d2b16b29208f2edce769f29391d367 | |
parent | d5c6407dd82aaf5fee0c0a6f8d02ff1e9f41df23 (diff) |
Refactor basketball script to disable physics while waiting for shoot
-rw-r--r-- | scenes/basketball.tscn | 1 | ||||
-rw-r--r-- | scripts/basketball.gd | 45 |
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() |