using System; using System.Collections.Generic; using Cielonos.MainGame.Characters.Inventory; using UnityEngine; namespace Cielonos.MainGame.Characters { public partial class PlayerBackpack { public List mainWeapons = new List(); public List supportEquipments = new List(); public List passiveEquipments = new List(); public List consumables = new List(); public void ObtainInitialItems() { mainWeapons.ForEach((item) => ObtainItem(item)); supportEquipments.ForEach((item) => ObtainItem(item)); passiveEquipments.ForEach((item) => ObtainItem(item)); consumables.ForEach((item) => ObtainItem(item, 0)); } } public partial class PlayerBackpack { public void ObtainItem(ItemBase item, int amount = -1) { item.Initialize(); if (item is MainWeaponBase mainWeapon) { ObtainMainWeapon(mainWeapon); } else if (item is SupportEquipmentBase supportEquipment) { ObtainSupportEquipment(supportEquipment); } else if (item is PassiveEquipmentBase passiveEquipment) { ObtainPassiveEquipment(passiveEquipment); } else if (item is ConsumableBase consumable) { ObtainConsumable(consumable, amount); } item.OnObtained(); } public void DiscardItem(ItemBase item, int amount = -1) { if (item is MainWeaponBase mainWeapon) { DiscardMainWeapon(mainWeapon); } else if (item is SupportEquipmentBase supportEquipment) { DiscardSupportEquipment(supportEquipment); } else if (item is PassiveEquipmentBase passiveEquipment) { DiscardPassiveEquipment(passiveEquipment); } else if (item is ConsumableBase consumable) { DiscardConsumable(consumable, amount); } item.OnDiscarded(); } } public partial class PlayerBackpack { private void ObtainMainWeapon(MainWeaponBase item) { if (!mainWeapons.Contains(item)) { mainWeapons.Add(item); } } private void DiscardMainWeapon(MainWeaponBase item) { if (mainWeapons.Contains(item)) { mainWeapons.Remove(item); } } private void ObtainSupportEquipment(SupportEquipmentBase item) { if (!supportEquipments.Contains(item)) { supportEquipments.Add(item); } } private void DiscardSupportEquipment(SupportEquipmentBase item) { if (supportEquipments.Contains(item)) { supportEquipments.Remove(item); } } private void ObtainPassiveEquipment(PassiveEquipmentBase item) { if (!passiveEquipments.Contains(item)) { passiveEquipments.Add(item); } } private void DiscardPassiveEquipment(PassiveEquipmentBase item) { if (passiveEquipments.Contains(item)) { passiveEquipments.Remove(item); } } private void ObtainConsumable(ConsumableBase item, int amount = -1) { if (!consumables.Contains(item)) { consumables.Add(item); } else { ConsumableBase existingItem = consumables.Find(consumable => consumable.GetType() == item.GetType()); int stack = amount == -1 ? item.stackAmount : amount; existingItem.AddStack(stack); } } private void DiscardConsumable(ConsumableBase item, int amount = -1) { if (consumables.Contains(item)) { ConsumableBase existingItem = consumables.Find(consumable => consumable.GetType() == item.GetType()); existingItem.stackAmount -= amount == -1 ? item.stackAmount : amount; // 如果amount为-1则丢弃全部 if (existingItem.stackAmount <= 0) { consumables.Remove(existingItem); } } } } }