2024-05-12 00:07:06 -04:00
|
|
|
extends CharacterBody2D
|
2024-05-09 22:42:55 -04:00
|
|
|
|
2024-05-13 17:49:17 -04:00
|
|
|
# FIXME: Tweak speed and floatyness4
|
2024-05-12 01:17:58 -04:00
|
|
|
|
2024-05-12 22:37:25 -04:00
|
|
|
signal crashed
|
|
|
|
|
2024-05-10 20:42:22 -04:00
|
|
|
const BULLET = preload("res://scenes/bullet.tscn")
|
2024-05-09 22:42:55 -04:00
|
|
|
|
2024-05-12 00:07:06 -04:00
|
|
|
@export var accleration := 90.0
|
|
|
|
@export var max_speed := 350.0
|
|
|
|
@export var rotation_speed := 200.0
|
2024-05-09 22:42:55 -04:00
|
|
|
|
2024-05-13 20:31:41 -04:00
|
|
|
var viewport_size : Vector2
|
|
|
|
|
2024-05-12 00:07:06 -04:00
|
|
|
var can_shoot := true
|
2024-05-13 20:31:41 -04:00
|
|
|
var can_warp := true
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
viewport_size = get_viewport_rect().size
|
2024-05-12 00:07:06 -04:00
|
|
|
|
|
|
|
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)
|
|
|
|
|
2024-05-13 20:31:41 -04:00
|
|
|
if Input.is_action_pressed("ui_cancel") and can_warp:
|
|
|
|
warp()
|
|
|
|
|
2024-05-12 00:07:06 -04:00
|
|
|
# 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
|
|
|
|
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:
|
2024-05-10 20:42:22 -04:00
|
|
|
var bullet = BULLET.instantiate()
|
|
|
|
bullet.position = pos
|
|
|
|
bullet.rotation = rot
|
2024-05-12 00:07:06 -04:00
|
|
|
$Projectiles.add_child(bullet)
|
2024-05-12 18:54:18 -04:00
|
|
|
$ShootSound.play()
|
2024-05-10 20:42:22 -04:00
|
|
|
can_shoot = false
|
|
|
|
$ShotCooldown.start()
|
2024-05-09 22:42:55 -04:00
|
|
|
|
2024-05-13 20:31:41 -04:00
|
|
|
func warp() -> void:
|
|
|
|
var random_position := Vector2.ZERO
|
|
|
|
random_position.x = randf_range(0, viewport_size.x)
|
|
|
|
random_position.y = randf_range(0, viewport_size.y)
|
|
|
|
position = random_position
|
|
|
|
can_warp = false
|
|
|
|
$WarpCooldown.start()
|
|
|
|
|
|
|
|
func crash() -> void:
|
2024-05-12 01:27:55 -04:00
|
|
|
# TODO: Make some kind of crash animation or crashed sprite
|
2024-05-12 22:37:25 -04:00
|
|
|
crashed.emit()
|
2024-05-12 01:03:18 -04:00
|
|
|
$AnimationPlayer.play("crash")
|
|
|
|
|
|
|
|
|
2024-05-10 20:42:22 -04:00
|
|
|
func _on_shot_cooldown_timeout() -> void:
|
|
|
|
can_shoot = true
|
2024-05-13 20:31:41 -04:00
|
|
|
|
|
|
|
func _on_warp_cooldown_timeout() -> void:
|
|
|
|
can_warp = true
|