class_name WeaponComponent extends Node @export var weapon_data: WeaponShot = null @export var available_weapons: Array[WeaponShot] = [] @export var weapon_change_flash: BaseEffect = null var _current_weapon_index: int = 0 @onready var effects_component: EffectComponent = %EffectsComponent func _ready() -> void: # Set the default weapon to be stock, i.e. index 1 if weapon_data and not available_weapons.is_empty(): for i in range(available_weapons.size()): if available_weapons[i] == weapon_data: _current_weapon_index = i return func _emit_weapon_changed() -> void: var ship: Sprite2D = get_parent().get_node("Ship") var sprite_size = ship.get_rect().size var origin_offset: int = weapon_data.origin if weapon_data else 0 EventBus.weapon_changed.emit(weapon_data.shot_name, get_parent(), sprite_size, origin_offset) func get_bullet_scene() -> PackedScene: return weapon_data.bullet_scene if weapon_data else null func get_weapon_resource() -> Resource: return weapon_data func select_weapon_by_name(weapon_name: String) -> bool: for i in range(available_weapons.size()): if available_weapons[i].shot_name == weapon_name: _current_weapon_index = i weapon_data = available_weapons[i] print("Switched to: ", weapon_name) _emit_weapon_changed() _trigger_change_flash() return true return false func _trigger_change_flash() -> void: if weapon_change_flash and effects_component: effects_component.apply_effect(weapon_change_flash) func cycle_weapon() -> void: # Used for testing weapon cycling if available_weapons.is_empty(): return _current_weapon_index = (_current_weapon_index + 1) % available_weapons.size() weapon_data = available_weapons[_current_weapon_index] print("Switched to: ", weapon_data.shot_name) _emit_weapon_changed() _trigger_change_flash()