Comets.gd/scripts/ship.gd
2024-05-12 01:27:55 -04:00

56 lines
1.6 KiB
GDScript

extends CharacterBody2D
# TODO: Add the ability to "warp"
# TODO: Tweak speed and shoot time values
const BULLET = preload("res://scenes/bullet.tscn")
@export var accleration := 90.0
@export var max_speed := 350.0
@export var rotation_speed := 200.0
var can_shoot := true
func _physics_process(delta: float) -> void:
# Controls
var accleration_direction := Vector2(0, Input.get_axis("ui_up", "ui_down"))
var rotation_direction := Input.get_axis("ui_left", "ui_right")
if Input.is_action_pressed("ui_accept") and can_shoot:
fire_gun($Gun.global_position, self.global_rotation)
# Movement Logic
## Accleration
velocity += accleration_direction.rotated(rotation) * accleration * delta
velocity.limit_length(max_speed)
### Slowly stops movement if no accleration
if accleration_direction.y == 0:
velocity = velocity.move_toward(Vector2.ZERO, 1)
## Rotation
rotate(deg_to_rad(rotation_direction * rotation_speed * delta))
move_and_slide()
# Screen Wrap
var viewport_size := get_viewport_rect().size
position.x = wrap(position.x, 0, viewport_size.x)
position.y = wrap(position.y, 0,viewport_size.y)
func fire_gun(pos : Vector2, rot : float) -> void:
var bullet = BULLET.instantiate()
bullet.position = pos
bullet.rotation = rot
$Projectiles.add_child(bullet)
$ShootSounds.play()
can_shoot = false
$ShotCooldown.start()
func crash():
# TODO: Maybe emit a signal that the main game node listens for "game over" state
# TODO: Make some kind of crash animation or crashed sprite
$AnimationPlayer.play("crash")
func _on_shot_cooldown_timeout() -> void:
can_shoot = true