76 lines
1.4 KiB
GDScript
76 lines
1.4 KiB
GDScript
extends KinematicBody2D
|
|
|
|
# How fast the player will move (pixels/sec).
|
|
export (int) var max_speed = 600
|
|
export (float) var start_acceleration = 0.075
|
|
export (float) var stop_friction = 0.03
|
|
|
|
# Size of the game window.
|
|
var screen_size
|
|
var speed = 0
|
|
|
|
# The click/touch position
|
|
var touch_point = Vector2()
|
|
var velocity = Vector2()
|
|
var released = true
|
|
|
|
# Signals
|
|
signal hit
|
|
|
|
|
|
func _ready():
|
|
# hide()
|
|
screen_size = get_viewport_rect().size
|
|
$Burst.hide()
|
|
|
|
func _process(delta):
|
|
if Input.is_action_pressed('click'):
|
|
released = false
|
|
touch_point = get_global_mouse_position()
|
|
if speed == 0:
|
|
speed = 1
|
|
|
|
speed += (speed * start_acceleration)
|
|
|
|
if speed >= max_speed:
|
|
speed = max_speed
|
|
|
|
$Burst.show()
|
|
$Burst.play('burst')
|
|
velocity = (touch_point - position).normalized() * speed
|
|
|
|
if released and speed > 0:
|
|
speed -= (speed * stop_friction)
|
|
|
|
if speed <= 0:
|
|
speed = 0
|
|
|
|
$Burst.play('cooldown')
|
|
velocity = velocity.normalized() * speed
|
|
|
|
|
|
func _input(event):
|
|
if event.is_action_released('click'):
|
|
released = true
|
|
|
|
func _physics_process(delta):
|
|
rotation = velocity.angle()
|
|
velocity = move_and_slide(velocity)
|
|
|
|
|
|
func _on_Player_body_entered(body):
|
|
hide()
|
|
emit_signal('hit')
|
|
$CollisionShape2D.set_deferred('disabled', true)
|
|
|
|
|
|
func start(pos):
|
|
position = pos
|
|
show()
|
|
$CollisionShape2D.disabled = false
|
|
|
|
|
|
func _on_Burst_animation_finished():
|
|
if $Burst.animation == 'cooldown':
|
|
$Burst.hide()
|