更新
This commit is contained in:
@@ -1,11 +1,150 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Cielonos.MainGame.Inventory;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Cielonos.MainGame.Characters
|
||||
{
|
||||
public class PlayerBackpack
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user