using System; using System.Linq; using Godot; using Godot.Collections; namespace Cirno.Scripts.Components.Actors; public partial class PlayerWeaponProvider : Node2D { public Array EquippedWeapons { get; set; } = new Array(); public int CurrentWeaponIndex { get; set; } = 0; private InventoryManager _inventoryManager; public Weapon EquippedWeapon { get; set; } //private PlayerMovement _parent; //public Vector2 FacingDirection public override void _Ready() { _inventoryManager = this.GetInventoryManager(); } public void Init(PlayerMovement parent) { //_parent = parent; } public void AddWeapon(Weapon weapon) { EquippedWeapons.Add(weapon); } public void EquipWeapon(string itemKey) { if (string.IsNullOrWhiteSpace(itemKey)) return; var weapon = EquippedWeapons.FirstOrDefault(x => x.WeaponData.ItemKey == itemKey); if (weapon is null) return; EquipWeapon(weapon); } // Triggered by event in inventorymanager public void EquipWeapon(Weapon weapon) { EquippedWeapon = weapon; CurrentWeaponIndex = EquippedWeapons.IndexOf(weapon); } public void NextWeapon() { CurrentWeaponIndex += 1; if (CurrentWeaponIndex > EquippedWeapons.Count - 1) { CurrentWeaponIndex = EquippedWeapons.Count - 1; } EquipWeapon(EquippedWeapons[CurrentWeaponIndex]); } public void PreviousWeapon() { CurrentWeaponIndex -= 1; if (CurrentWeaponIndex < 0) { CurrentWeaponIndex = 0; } EquipWeapon(EquippedWeapons[CurrentWeaponIndex]); } public void Shoot(Vector2 direction) { if (EquippedWeapon == null) return; EquippedWeapon.ShootDirection = direction; EquippedWeapon.Shoot(); } }