starcheese/spaceship.gd
Elliot Stirling 7542472833 Event Bus
2024-10-03 18:12:33 +01:00

61 lines
1.7 KiB
GDScript

extends CharacterBody2D
@export var acceleration: float = 400.0
@export var max_speed: float = 1500.0
@export var rotation_speed: float = 3.0
@export var friction: float = 0.99
signal fire # Signal to start firing
signal stop_fire # Signal to stop firing
var weapons_system: WeaponsSystem
var event_bus: EventBus
func _ready():
weapons_system = get_node("/root/Main/WeaponsSystem")
event_bus = get_node("/root/Main/MainEventBus")
event_bus.subscribe_to(get_node("/root/Main/InputEventScope"), "KeyboardInputEvent", Callable(self, "handle_keyboard_input"))
func get_spaceship_orientation_vector() -> Vector2:
return -global_transform.y
func handle_movement(delta: float) -> void:
var thrust = Vector2.ZERO
if Input.is_action_pressed("ui_up"):
thrust = Vector2(0, -1).rotated(rotation) * acceleration * delta
velocity += thrust
if Input.is_action_pressed("ui_down"):
thrust = Vector2(0, 1).rotated(rotation) * acceleration * delta
velocity += thrust
if Input.is_action_pressed("ui_left"):
rotation -= rotation_speed * delta
if Input.is_action_pressed("ui_right"):
rotation += rotation_speed * delta
# Clamp velocity and apply friction
velocity = velocity.clamp(Vector2(-max_speed, -max_speed), Vector2(max_speed, max_speed))
velocity *= friction
var collision = move_and_collide(velocity * delta)
if collision:
print("Collided with: ", collision.get_collider().name)
var collision_normal = collision.get_normal()
velocity = velocity.slide(collision_normal)
func handle_keyboard_input(event: KeyboardInputEvent):
if( event.action == "ui_fire" ):
if( event.pressed ):
weapons_system.fire_all()
else:
weapons_system.cease_fire_all()
pass
func _process(delta: float) -> void:
handle_movement(delta)