mirror of
https://codeberg.org/Melon-Bread/Comets.gd.git
synced 2024-11-28 15:08:20 -05:00
68 lines
1.6 KiB
GDScript
68 lines
1.6 KiB
GDScript
extends Area2D
|
|
|
|
# TODO: Make a random spawner for invaders
|
|
# TODO: Give points if shot
|
|
|
|
signal shot
|
|
|
|
const BULLET = preload("res://scenes/bullet.tscn")
|
|
|
|
@export var move_speed := 100.0
|
|
var movement_direction := Vector2.ZERO
|
|
var random_position := Vector2.ZERO
|
|
var can_shoot := false
|
|
var viewport_size : Vector2
|
|
|
|
func _ready() -> void:
|
|
viewport_size = get_viewport_rect().size
|
|
|
|
# I am sorry to who has to make sense of this
|
|
random_position.x = randi_range(1, 2)
|
|
if random_position.x == 2:
|
|
random_position.x = viewport_size.x-1
|
|
movement_direction.x = -1
|
|
else:
|
|
movement_direction.x = 1
|
|
random_position.y = randi_range(32, viewport_size.y + 32)
|
|
position = random_position
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
position += move_speed * movement_direction * delta
|
|
|
|
if can_shoot:
|
|
# FIXME: Proper shoot angle and not able to sudoku
|
|
shoot($GunMarker.global_position, randf_range(90.0, 92.0))
|
|
|
|
# "Die", if off screen
|
|
if position.x > viewport_size.x or position.x < 0:
|
|
queue_free()
|
|
|
|
func _on_flying_tone_finished() -> void:
|
|
$FlyingTone.play()
|
|
|
|
func _on_body_entered(body: Node2D) -> void:
|
|
if body.is_in_group("ship"):
|
|
body.crash()
|
|
|
|
func _on_area_entered(area: Area2D) -> void:
|
|
if area.is_in_group("bullet"):
|
|
shot.emit()
|
|
crash()
|
|
|
|
func shoot(pos : Vector2, rot : float) -> void:
|
|
var bullet := BULLET.instantiate()
|
|
bullet.position = pos
|
|
bullet.rotation = rot
|
|
bullet.life_span = 0.3
|
|
$Projectiles.add_child(bullet)
|
|
$ShootSound.play()
|
|
can_shoot = false
|
|
$ShootTimer.start()
|
|
|
|
func crash() -> void:
|
|
$AnimationPlayer.play("crash")
|
|
|
|
func _on_shoot_timer_timeout() -> void:
|
|
can_shoot = true
|