diff options
Diffstat (limited to 'scripts/basketball.gd')
-rw-r--r-- | scripts/basketball.gd | 62 |
1 files changed, 20 insertions, 42 deletions
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) |