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)