extends CharacterBody2D class_name Rocket @onready var camera := %Camera2D @onready var sprite := %Sprite2D @onready var gpu_particles_2d_middle := $GPUParticles2DMiddle @onready var gpu_particles_2d_top := $GPUParticles2DTop @onready var gpu_particles_2d_bottom := $GPUParticles2DBottom var is_ejecting = false func _ready() -> void: DataHandler.current_rocket = self #velocity = DataHandler.initial_velocity() # Called every frame. 'delta' is the elapsed time since the previous frame. func _physics_process(delta: float) -> void: if Input.is_action_just_pressed("eject"): _handle_eject() var move_stick: Vector2 = Input.get_vector("move_left", "move_right", "move_up", "move_down") if DataHandler.has_fuel() and move_stick: var new_velocity := velocity.lerp(move_stick * delta * DataHandler.get_speed(), DataHandler.get_maneuverability()) var velocity_change := velocity - new_velocity velocity = new_velocity DataHandler.add_fuel(velocity_change.length() / -5.0, true) rotation = velocity.angle() _set_particles(velocity_change.length()) else: _stop_particles() var collisions := move_and_slide() if collisions: for i in get_slide_collision_count(): var collision := get_slide_collision(i) var collider := collision.get_collider() if collider.is_in_group("pickups"): collider.pickup(self) else: if DataHandler.has_fuel(): DataHandler.add_fuel(-5 * delta) else: _handle_eject() #fuel -= velocity.length() / 900.0 func _stop_particles() -> void: gpu_particles_2d_bottom.emitting = false gpu_particles_2d_middle.emitting = false gpu_particles_2d_top.emitting = false func _set_particles(intensity: float) -> void: gpu_particles_2d_bottom.emitting = true gpu_particles_2d_middle.emitting = true gpu_particles_2d_top.emitting = true gpu_particles_2d_bottom.lifetime = 5.0 * intensity gpu_particles_2d_middle.lifetime = 6.0 * intensity gpu_particles_2d_top.lifetime = 5.0 * intensity func _handle_eject() -> void: if not is_ejecting: is_ejecting = true if DataHandler.has_fuel_needed_for_eject(): DataHandler.move_cargo_to_inventory() else: var eject_percent = DataHandler.eject_fuel_percentage() var pod_position = position * (1 - eject_percent) DataHandler.create_cargo_pod(pod_position) DataHandler.save_game_data() get_tree().change_scene_to_file("res://scenes/launch_menu.tscn")