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 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; } /// /// 得到遗物奖励 /// /// public RemainsItem GetRemainsReward() { // 创建一个可用的奖励列表,过滤掉权重为 0 的项 List availableItems = new List(); 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]; } }