201 lines
6.2 KiB
C#
201 lines
6.2 KiB
C#
|
using System;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEngine;
|
|||
|
using UnityEngine.UI;
|
|||
|
using TMPro;
|
|||
|
using DG.Tweening;
|
|||
|
|
|||
|
public class BagControl : MonoSingleton<BagControl>
|
|||
|
{
|
|||
|
public RemainsBag bag;
|
|||
|
[Header("空精灵")]
|
|||
|
public Sprite Blocksprite;
|
|||
|
public Dictionary<string, RemainsMode> remainsModes = new Dictionary<string, RemainsMode>();//借出去的
|
|||
|
public Action InteractiveEvent;
|
|||
|
|
|||
|
public GameObject DragUI;
|
|||
|
[HideInInspector]
|
|||
|
public GraphicRaycaster graphicRaycaster;
|
|||
|
|
|||
|
private RectTransform rectTransform;
|
|||
|
private Vector2 AwakePos;//背包初始位置
|
|||
|
public GameObject Openbtn;
|
|||
|
public override void Awake()
|
|||
|
{
|
|||
|
base.Awake();
|
|||
|
graphicRaycaster = transform.parent.GetComponent<GraphicRaycaster>();
|
|||
|
rectTransform = GetComponent<RectTransform>();
|
|||
|
AwakePos = rectTransform.anchoredPosition;
|
|||
|
gameObject.SetActive(false);
|
|||
|
}
|
|||
|
|
|||
|
private void OnEnable()
|
|||
|
{
|
|||
|
Refresh();
|
|||
|
}
|
|||
|
|
|||
|
private void OnDestroy()
|
|||
|
{
|
|||
|
}
|
|||
|
public void OpenBag(GameObject obj)
|
|||
|
{
|
|||
|
RectTransform objRectTransform = obj.GetComponent<RectTransform>();
|
|||
|
bool isOpening = !gameObject.activeSelf;
|
|||
|
gameObject.SetActive(true); // 确保 UI 处于激活状态以显示动画
|
|||
|
|
|||
|
if (isOpening)
|
|||
|
{
|
|||
|
// 打开时,UI 向下移动,obj 向右移动 200 个单位
|
|||
|
rectTransform.DOAnchorPos(new Vector2(AwakePos.x, AwakePos.y - 600), 0.5f)
|
|||
|
.SetEase(Ease.OutQuad)
|
|||
|
.OnComplete(() => gameObject.SetActive(true));
|
|||
|
|
|||
|
objRectTransform.DOAnchorPos(new Vector2(objRectTransform.anchoredPosition.x, objRectTransform.anchoredPosition.y - 500), 0.5f)
|
|||
|
.SetEase(Ease.OutQuad);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// 关闭时,UI 和 obj 返回初始位置
|
|||
|
rectTransform.DOAnchorPos(AwakePos, 0.5f)
|
|||
|
.SetEase(Ease.OutQuad)
|
|||
|
.OnComplete(() => gameObject.SetActive(false));
|
|||
|
|
|||
|
objRectTransform.DOAnchorPos(new Vector2(objRectTransform.anchoredPosition.x, objRectTransform.anchoredPosition.y + 500), 0.5f)
|
|||
|
.SetEase(Ease.OutQuad);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public void CloseBagTwo()
|
|||
|
{
|
|||
|
YiShiUI.Instance.gameObject.SetActive(false);
|
|||
|
YiShiUI.Instance.BagActive(false);
|
|||
|
}
|
|||
|
public void Refresh()
|
|||
|
{
|
|||
|
Transform pa = transform.Find("背包/内容/遗物组");
|
|||
|
int childIndex = 0;
|
|||
|
for (int i = 0; i < pa.childCount; i++, childIndex++)
|
|||
|
{
|
|||
|
|
|||
|
if (bag.Items.Count > childIndex)
|
|||
|
{
|
|||
|
int RealCount = bag.Items[childIndex].Count;
|
|||
|
if (RealCount > 0)//背包有东西
|
|||
|
{
|
|||
|
if (remainsModes.TryGetValue(bag.Items[childIndex].Rename, out RemainsMode remainsMode))//---借出去的有该类
|
|||
|
{
|
|||
|
Debug.LogWarning("借出去的有该类");
|
|||
|
RealCount -= remainsMode.Count;
|
|||
|
if (RealCount == 0)
|
|||
|
{
|
|||
|
i--;
|
|||
|
continue;
|
|||
|
}
|
|||
|
}
|
|||
|
Transform child = pa.GetChild(i);
|
|||
|
child.GetComponent<UIItem>().AwkaeItem(bag.Items[childIndex].Rename, RealCount);
|
|||
|
}
|
|||
|
else i--;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Transform child = pa.GetChild(i);
|
|||
|
child.GetComponent<UIItem>().Refresh();
|
|||
|
}
|
|||
|
}
|
|||
|
MiaosuRemains("");
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 移出背包
|
|||
|
/// </summary>
|
|||
|
public void RemoveOut(string name, int count = 1)
|
|||
|
{
|
|||
|
RemainsMode remainsMode;
|
|||
|
Debug.LogWarning("移出背包");
|
|||
|
if (remainsModes.TryGetValue(name, out remainsMode))
|
|||
|
{
|
|||
|
remainsMode.Count += count;
|
|||
|
remainsModes[name] = remainsMode;
|
|||
|
Debug.LogWarning("移出背包" + name);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Debug.LogWarning("移出背包sss" + name);
|
|||
|
remainsMode = bag.GetRemainsMode(name);
|
|||
|
remainsMode.Count = 1;
|
|||
|
remainsModes.Add(name, remainsMode);
|
|||
|
}
|
|||
|
InteractiveEvent?.Invoke();
|
|||
|
}
|
|||
|
/// <summary>
|
|||
|
/// 移入背包
|
|||
|
/// </summary>
|
|||
|
public void RemoveIn(string Rename, int count = 1)
|
|||
|
{
|
|||
|
if (remainsModes.TryGetValue(Rename, out RemainsMode remainsbagmode))
|
|||
|
{
|
|||
|
remainsbagmode.Count -= count;
|
|||
|
if (remainsbagmode.Count <= 0)
|
|||
|
{
|
|||
|
remainsModes.Remove(remainsbagmode.Rename);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
remainsModes[Rename] = remainsbagmode;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public RectTransform ChangeDragUI(string Rename)
|
|||
|
{
|
|||
|
DragUI.gameObject.SetActive(true);
|
|||
|
DragUI.GetComponent<Image>().sprite = bag.GetSprite(Rename);
|
|||
|
return DragUI.GetComponent<RectTransform>();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 消耗遗物
|
|||
|
/// </summary>
|
|||
|
public void CutRemains()
|
|||
|
{
|
|||
|
foreach (KeyValuePair<string, RemainsMode> item in remainsModes)
|
|||
|
{
|
|||
|
bag.CutItems(item.Key, item.Value.Count);
|
|||
|
}
|
|||
|
remainsModes.Clear();
|
|||
|
Refresh();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 增加遗物
|
|||
|
/// </summary>
|
|||
|
public void AddRemains(RemainsItem remains)
|
|||
|
{
|
|||
|
bag.AddItems(remains);
|
|||
|
Refresh();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 描述遗物
|
|||
|
/// </summary>
|
|||
|
public void MiaosuRemains(string remainsName)
|
|||
|
{
|
|||
|
if (remainsName == "")
|
|||
|
{
|
|||
|
transform.Find("遗物描述").GetComponent<TextMeshProUGUI>().text = "";
|
|||
|
transform.Find("功能描述").GetComponent<TextMeshProUGUI>().text = "";
|
|||
|
transform.Find("内容描述").GetComponent<TextMeshProUGUI>().text = "";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
transform.Find("遗物描述").GetComponent<TextMeshProUGUI>().text = bag.GetRemainsItem(remainsName).Miaosu;
|
|||
|
transform.Find("功能描述").GetComponent<TextMeshProUGUI>().text = bag.GetRemainsItem(remainsName).BuffMiaosu;
|
|||
|
transform.Find("内容描述").GetComponent<TextMeshProUGUI>().text = bag.GetRemainsItem(remainsName).ContectMiaosu;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|