Files
Cielonos/Assets/Scripts/MainGame/Characters/Player/Inventory/PlayerBackpack.cs
SoulliesOfficial 33b1795c1f 更新
2026-01-03 18:19:39 -05:00

150 lines
4.6 KiB
C#

using System;
using System.Collections.Generic;
using Cielonos.MainGame.Inventory;
using UnityEngine;
namespace Cielonos.MainGame.Characters
{
public partial class PlayerBackpack
{
public List<MainWeaponBase> mainWeapons = new List<MainWeaponBase>();
public List<SupportEquipmentBase> supportEquipments = new List<SupportEquipmentBase>();
public List<PassiveEquipmentBase> passiveEquipments = new List<PassiveEquipmentBase>();
public List<ConsumableBase> consumables = new List<ConsumableBase>();
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);
}
}
}
}
}