MayHeCome/Assets/仪式/C#/RemainsBag.cs
2024-12-18 17:55:34 +08:00

170 lines
4.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public struct RemainsMode
{
public string Rename;
public RemainsItem remains;
public int Count;
}
[CreateAssetMenu(fileName = "背包", menuName = "仪式/背包")]
public class RemainsBag : ScriptableObject
{
public List<RemainsMode> Items;
[Header("太阳神之眼")]
public GameObject SunRemains;
[Header("其他遗物")]
public GameObject OtherRemains;
public void AddItems(RemainsItem remainsItem, int count = 1)
{
for (int i = 0; i < Items.Count; i++)
{
if (remainsItem == Items[i].remains)
{
RemainsMode remainsMode = Items[i];
remainsMode.Count += count;
Items[i] = remainsMode;
return;
}
}
}
public void AddItems(string Itemname, int count = 1)
{
for (int i = 0; i < Items.Count; i++)
{
if (Itemname == Items[i].Rename)
{
RemainsMode remainsMode = Items[i];
remainsMode.Count += count;
Items[i] = remainsMode;
return;
}
}
}
public void CutItems(RemainsItem remainsItem, int count = 1)
{
for (int i = 0; i < Items.Count; i++)
{
if (remainsItem == Items[i].remains)
{
RemainsMode remainsMode = Items[i];
remainsMode.Count -= count;
if (remainsMode.Count <= 0)
{
Items.RemoveAt(i);
}
else
{
Items[i] = remainsMode;
}
return;
}
}
}
public void CutItems(string Itemname, int count = 1)
{
for (int i = 0; i < Items.Count; i++)
{
if (Itemname == Items[i].Rename)
{
RemainsMode remainsMode = Items[i];
remainsMode.Count -= count;
if (remainsMode.Count <= 0)
{
Items.RemoveAt(i);
}
else
{
Items[i] = remainsMode;
}
return;
}
}
}
public RemainsMode GetRemainsMode(string Itemname)
{
RemainsMode remainsMode = new RemainsMode();
for (int i = 0; i < Items.Count; i++)
{
if (Itemname == Items[i].Rename)
{
remainsMode = Items[i];
return remainsMode;
}
}
return remainsMode;
}
public RemainsItem GetRemainsItem(string Itemname)
{
RemainsMode remainsMode = new RemainsMode();
for (int i = 0; i < Items.Count; i++)
{
if (Itemname == Items[i].Rename)
{
remainsMode = Items[i];
return remainsMode.remains;
}
}
return remainsMode.remains;
}
public Sprite GetSprite(string Itemname)
{
RemainsMode remainsMode = GetRemainsMode(Itemname);
return remainsMode.remains.remainssprite;
}
/// <summary>
/// 得到遗物奖励
/// </summary>
/// <returns></returns>
public RemainsItem GetRemainsReward()
{
// 创建一个可用的奖励列表,过滤掉权重为 0 的项
List<RemainsItem> availableItems = new List<RemainsItem>();
foreach (var item in Items)
{
if (item.remains.WightNum > 0) // 过滤掉权重为0的项
{
availableItems.Add(item.remains);
}
}
// 计算所有权重的总和
int totalWeight = 0;
foreach (var item in availableItems)
{
totalWeight += item.WightNum;
}
// 如果没有有效的项,返回 null
if (totalWeight == 0)
{
Debug.LogWarning("没有可用的遗物项,所有项的权重都为 0");
return null;
}
// 在 0 到 totalWeight 之间生成一个随机数
int randomWeight = Random.Range(0, totalWeight);
// 遍历可用的项,根据权重找到对应的项
int cumulativeWeight = 0;
foreach (var item in availableItems)
{
cumulativeWeight += item.WightNum;
if (randomWeight < cumulativeWeight)
{
return item; // 找到符合的项,返回
}
}
return availableItems[0];
}
}