init
This commit is contained in:
74
scripts/rocket.gd
Normal file
74
scripts/rocket.gd
Normal file
@@ -0,0 +1,74 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user