Files
MisguidedLaunch/scripts/rocket.gd
Eric Vande Voort 7eb0dea424 init
2025-01-07 16:10:03 -06:00

75 lines
2.3 KiB
GDScript

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")