72 lines
1.5 KiB
GDScript
72 lines
1.5 KiB
GDScript
extends Area2D
|
|
|
|
@export var speed = 3 # How fast the player will move (pixels/sec).
|
|
@export var jump_speed = 4
|
|
@export var speed_inc = 0.3
|
|
|
|
signal start # The bird starts
|
|
signal passed # The bird passes a Tower
|
|
signal hit # The bird is hit/flies off screen
|
|
|
|
var tower_locations = []
|
|
|
|
var screen_size
|
|
var playing = false
|
|
|
|
var speed_y = 0
|
|
|
|
func start_game():
|
|
tower_locations = []
|
|
screen_size = get_viewport_rect().size
|
|
position = Vector2(0, screen_size.y / 2)
|
|
speed_y = 0
|
|
update_rotation()
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
screen_size = get_viewport_rect().size
|
|
|
|
# Called every frame
|
|
func _process(_delta):
|
|
if Input.is_action_just_pressed("ui_accept"):
|
|
if not playing:
|
|
start_game()
|
|
emit_signal("start")
|
|
speed_y = 0
|
|
playing = true
|
|
$CollisionShape2D.set_deferred("disabled", false)
|
|
speed_y = min(speed_y, 0) - 1 * jump_speed
|
|
|
|
if not playing:
|
|
return
|
|
|
|
# Adjust the birds position
|
|
speed_y += speed_inc
|
|
|
|
position += Vector2(speed, speed_y * speed)
|
|
|
|
var global = get_global_transform().get_origin()
|
|
while global.x > tower_locations[0]:
|
|
emit_signal("passed")
|
|
tower_locations.pop_front()
|
|
|
|
# Rotate the bird
|
|
update_rotation()
|
|
|
|
if position.y > screen_size.y:
|
|
emit_signal("hit")
|
|
playing = false
|
|
|
|
func update_rotation():
|
|
rotation = atan(speed_y / speed)
|
|
|
|
# Hit detection
|
|
func _on_Player_body_entered(_body):
|
|
playing = false
|
|
start_game()
|
|
|
|
emit_signal("hit")
|
|
$CollisionShape2D.set_deferred("disabled", true)
|
|
|
|
func _on_Tower_spawn(x):
|
|
tower_locations.append(x)
|