extends CharacterBody2D # TODO: Add the ability to "warp" # FIXME: Tweak speed and shoot time values # FIXME: Tweak Ship's scale signal crashed 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) $ShootSound.play() can_shoot = false $ShotCooldown.start() func crash(): # TODO: Make some kind of crash animation or crashed sprite crashed.emit() $AnimationPlayer.play("crash") func _on_shot_cooldown_timeout() -> void: can_shoot = true