rundumdiewelten/rund-um-die-welten/player/player.gd
phantomvines d8eec1150e upload
2025-09-19 16:37:23 +02:00

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