summaryrefslogtreecommitdiff
path: root/SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar
diff options
context:
space:
mode:
Diffstat (limited to 'SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar')
-rw-r--r--SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar/ItemWidget.cs118
-rw-r--r--SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar/PanelItemBar.cs70
2 files changed, 182 insertions, 6 deletions
diff --git a/SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar/ItemWidget.cs b/SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar/ItemWidget.cs
index 55898f2..552672a 100644
--- a/SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar/ItemWidget.cs
+++ b/SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar/ItemWidget.cs
@@ -1,9 +1,123 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
+using UnityEngine.UI;
-public class ItemWidget : MonoBehaviour
+public struct ItemWidgetParam
{
-
+ // 主动点击
+ public System.Action<ItemWidget> onSelected;
+ public ItemBase item;
+}
+
+public class ItemWidget : UIGridItemBase
+{
+ public Image Image_Icon;
+ public Image Image_SelectBg;
+
+ public Image Image_Use;
+
+ private System.Action<ItemWidget> onSelected;
+
+ public ItemBase item { get { return m_Item; } }
+ private ItemBase m_Item;
+
+ private Coroutine m_CoUse;
+
+ private int m_PendingUse = 0;
+
+ public void SetSelectBg(bool selected)
+ {
+ Image_SelectBg.gameObject.SetActive(selected);
+ }
+
+ public override void Set(object param)
+ {
+ ItemWidgetParam info = (ItemWidgetParam)param;
+ onSelected = info.onSelected;
+ m_Item = info.item;
+
+ Image_Icon.sprite = ResourceManager.Instance.Load<Sprite>(info.item.iconPath);
+
+ SetSelectBg(false);
+
+ Image_Use.gameObject.SetActive(false);
+ }
+
+ public void OnSelectCallback()
+ {
+ SetSelectBg(true);
+ }
+
+ public void OnDeselectCallback()
+ {
+ SetSelectBg(false);
+ }
+
+ public void OnUseCallback()
+ {
+ m_PendingUse++;
+ PlayUseAnimation();
+ }
+
+ private void PlayUseAnimation()
+ {
+ if (m_CoUse != null)
+ return;
+ Image_Use.gameObject.SetActive(true);
+ m_CoUse = StartCoroutine(CoUseAnimation());
+ }
+
+ IEnumerator CoUseAnimation()
+ {
+ float speed = 5f;
+
+ while(m_PendingUse > 0)
+ {
+ Image_Use.fillOrigin = (int)Image.OriginVertical.Bottom;
+ float t = 0;
+ while (true)
+ {
+ t += speed * Time.deltaTime;
+
+ if (t > 1)
+ break;
+
+ Image_Use.fillAmount = Mathf.Lerp(0, 1, t);
+
+ yield return null;
+ }
+
+ Image_Use.fillOrigin = (int)Image.OriginVertical.Top;
+ t = 0;
+ while (true)
+ {
+ t += speed * Time.deltaTime;
+
+ if (t > 1)
+ break;
+
+ Image_Use.fillAmount = Mathf.Lerp(1, 0, t);
+
+ yield return null;
+ }
+ m_PendingUse--;
+ }
+
+ Image_Use.gameObject.SetActive(false);
+
+ m_CoUse = null;
+
+ yield break;
+ }
+
+ private void StopUseAnimation()
+ {
+ if (m_CoUse != null)
+ {
+ StopCoroutine(m_CoUse);
+ }
+ Image_Use.gameObject.SetActive(false);
+ }
}
diff --git a/SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar/PanelItemBar.cs b/SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar/PanelItemBar.cs
index 00acafc..74f90c3 100644
--- a/SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar/PanelItemBar.cs
+++ b/SurvivalTest/Assets/Scripts/UI/Panel/PanelItemBar/PanelItemBar.cs
@@ -1,13 +1,31 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
+using UnityEngine.UI;
public class PanelItemBar : PanelBase
{
- /// <summary>
- /// 当前持有的Items
- /// </summary>
- public List<ItemWidget> m_Items = new List<ItemWidget>();
+ public ItemWidget m_ItemTempalte;
+
+ public UISimpleGrid m_ItemGrid;
+
+ public Text m_TextName;
+
+ // 当前持有的Items
+ private List<ItemWidget> m_Items = new List<ItemWidget>();
+
+ private int m_CurrentIndex = 0;
+
+ public override void Set(object param)
+ {
+ for(int i = 0; i < PlayerManager.Instance.items.Count; ++i)
+ {
+ ItemWidget widget = MakeItemWidget(PlayerManager.Instance.items[i]);
+ m_Items.Add(widget);
+ }
+
+ SelectItemWidget(0);
+ }
bool SwitchToLeft()
{
@@ -19,14 +37,58 @@ public class PanelItemBar : PanelBase
return Input.GetButtonDown("RightItem");
}
+ bool UseItem()
+ {
+ return Input.GetButtonDown("Fire3");
+ }
+
+ ItemWidget MakeItemWidget(ItemBase item)
+ {
+ ItemWidget widget = Instantiate<ItemWidget>(m_ItemTempalte);
+ widget.transform.SetParent(m_ItemGrid.transform);
+ widget.gameObject.SetActive(true);
+ widget.GetComponent<RectTransform>().anchoredPosition = new Vector2(0, 0);
+
+ ItemWidgetParam param = new ItemWidgetParam();
+ //param.onSelected = OnSelectItemWidget;
+ param.item = item;
+ widget.Set(param);
+ return widget;
+ }
+
protected override void Update()
{
if (SwitchToLeft())
{
+ int newIndex = Mathf.Clamp(m_CurrentIndex - 1, 0, m_Items.Count - 1);
+ SelectItemWidget(newIndex);
}
if (SwitchToRight())
{
+ int newIndex = Mathf.Clamp(m_CurrentIndex + 1, 0, m_Items.Count - 1);
+ SelectItemWidget(newIndex);
}
+ if (UseItem())
+ {
+ m_Items[m_CurrentIndex].OnUseCallback();
+ PlayerManager.Instance.UseCurrentItem();
+ }
+ }
+
+ void SelectItemWidget(int index)
+ {
+ if(index < 0 || index > m_Items.Count - 1)
+ {
+ return ;
+ }
+ m_Items[m_CurrentIndex].OnDeselectCallback();
+ m_Items[index].OnSelectCallback();
+
+ m_TextName.text = m_Items[index].item.name;
+
+ m_CurrentIndex = index;
+
+ PlayerManager.Instance.SetCurrentItem(m_Items[index].item);
}
}