75 lines
2.3 KiB
GDScript
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")
|