103 lines
2.8 KiB
GDScript
103 lines
2.8 KiB
GDScript
extends Area2D
|
|
|
|
# angle
|
|
@export var spawn_rotation = 0
|
|
@export var dies_on_screen_leave = false
|
|
@export var respawn_point: Vector2
|
|
@export var auto_respawn = false
|
|
|
|
@export var center_boost_cooldown = 10
|
|
@export var center_boost_force = 200
|
|
@export var center_boost_duration = 1
|
|
# can player boost?
|
|
var boostable = true
|
|
var boosting = false
|
|
@export var center_boost_disable = false
|
|
|
|
func _ready() -> void:
|
|
$AnimatedSprite2D.play(GlobalVariables.player_skin)
|
|
|
|
$VisibleOnScreenNotifier2D.screen_exited.connect(_on_screen_exited)
|
|
$VisibleOnScreenNotifier2D.screen_entered.connect(_on_screen_entered)
|
|
GlobalVariables.player_died.connect(player_dies)
|
|
rotation = spawn_rotation
|
|
|
|
# set boost cooldown
|
|
$boost_cooldown.wait_time = center_boost_cooldown
|
|
$boost_duration.wait_time = center_boost_duration
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
$AnimatedSprite2D.play(GlobalVariables.player_skin)
|
|
|
|
if(Input.is_action_just_pressed("escape") and not GlobalVariables.in_main_menu):
|
|
player_dies("You chose the easy way out")
|
|
|
|
if(GlobalVariables.target_planet_position):
|
|
# calculate movement
|
|
var radius = position.distance_to(GlobalVariables.target_planet_position)
|
|
var angle = (position-GlobalVariables.target_planet_position).angle()
|
|
|
|
var angular_speed = GlobalVariables.player_speed/radius
|
|
|
|
if GlobalVariables.player_clockwise:
|
|
angle += angular_speed*delta
|
|
else:
|
|
angle -= angular_speed*delta
|
|
|
|
if Input.is_action_just_pressed("center_boost") and boostable and not center_boost_disable:
|
|
boostable = false
|
|
boosting = true
|
|
$boost_duration.start()
|
|
$boost_cooldown.start()
|
|
|
|
if boosting:
|
|
radius -= delta*center_boost_force
|
|
|
|
position = GlobalVariables.target_planet_position+Vector2(cos(angle), sin(angle))*radius
|
|
|
|
|
|
#print(angle)
|
|
rotation = angle + deg_to_rad(180)
|
|
|
|
if boosting:
|
|
rotation *= 1.5
|
|
|
|
if GlobalVariables.player_clockwise:
|
|
rotation = angle + deg_to_rad(180)
|
|
if boosting:
|
|
rotation += 1
|
|
else:
|
|
rotation = angle
|
|
if boosting:
|
|
rotation -= 1
|
|
|
|
|
|
#Dummy function for player death:
|
|
func player_dies(death_message: String) -> void:
|
|
print(death_message)
|
|
if auto_respawn:
|
|
position = respawn_point
|
|
elif(GlobalVariables.target_planet_position or death_message == "You chose the easy way out"):
|
|
add_child(load("res://player/death_animation.tscn").instantiate())
|
|
$AnimatedSprite2D.visible = false
|
|
$CPUParticles2D.emitting = false
|
|
if(death_message != "You chose the easy way out"):
|
|
GlobalVariables.death_counter += 1
|
|
GlobalVariables.emit_game_over(death_message)
|
|
|
|
|
|
|
|
func _on_screen_exited():
|
|
if dies_on_screen_leave:
|
|
GlobalVariables.emit_player_died("You left the mission area")
|
|
|
|
func _on_screen_entered():
|
|
pass
|
|
|
|
|
|
func _on_boost_cooldown_timeout() -> void:
|
|
boostable = true
|
|
|
|
|
|
func _on_boost_duration_timeout() -> void:
|
|
boosting = false
|