using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace SoftKitty.InventoryEngine
{
///
/// This module displays the total attributes of an InventoryHolder.
/// Attach this script to a UI panel, assign the necessary UI elements,
/// and call Initialize (InventoryHolder _equipHolder, Attribute[] _baseAttributes) to display the stats.
/// _baseAttributes represents the player's attributes without any equipment.
///
public class StatsUi : MonoBehaviour
{
#region Variables
public GameObject StatPrefab;
private InventoryHolder Holder;
private Dictionary BaseDic = new Dictionary();
private Dictionary StatList=new Dictionary();
private Color StatColor;
private bool Inited = false;
#endregion
#region MonoBehaviour
private void Update()
{
if (Holder == null || !Inited) return;
for (int i = 0; i < ItemManager.instance.itemAttributes.Count; i++)
{
if (ItemManager.instance.itemAttributes[i].visibleInStatsPanel && ItemManager.instance.itemAttributes[i].isNumber())
{
float _currentValue = GetValue(ItemManager.instance.itemAttributes[i].key);
if (StatList[ItemManager.instance.itemAttributes[i].key].mValue != _currentValue)
{
if (StatList[ItemManager.instance.itemAttributes[i].key].mValue < _currentValue)
{
StartCoroutine(PopStat(StatList[ItemManager.instance.itemAttributes[i].key].mTexts[1],Color.green));
}
else
{
StartCoroutine(PopStat(StatList[ItemManager.instance.itemAttributes[i].key].mTexts[1], Color.red));
}
StatList[ItemManager.instance.itemAttributes[i].key].mValue = _currentValue;
StatList[ItemManager.instance.itemAttributes[i].key].mTexts[1].text = _currentValue.ToString()+ ItemManager.instance.itemAttributes[i].suffixes;
}
}
}
}
#endregion
#region Internal Methods
IEnumerator PopStat(Text _stat, Color _popColor)
{
float t = 0F;
while (t<1F) {
t += Time.deltaTime * 10F;
_stat.color = Color.Lerp(StatColor, _popColor,t);
_stat.transform.localScale = Vector3.one * (1F + t * 0.3F);
yield return 1;
}
yield return new WaitForSeconds(0.5F);
while (t > 0F)
{
t -= Time.deltaTime*3F;
_stat.color = Color.Lerp(StatColor, _popColor, t);
_stat.transform.localScale = Vector3.one * (1F + t * 0.3F);
yield return 1;
}
_stat.color = StatColor;
_stat.transform.localScale = Vector3.one;
}
private float GetValue(string _key)
{
float _base = 0F;
if (BaseDic.ContainsKey(_key)) _base = BaseDic[_key].GetFloat();
return _base + Holder.GetAttributeValue(_key);
}
#endregion
///
/// Initialize to display the stats._baseAttributes represents the player's attributes without any equipment.
///
///
///
public void Init(InventoryHolder _equipHolder, Attribute[] _baseAttributes)
{
StatColor = StatPrefab.GetComponent().mTexts[1].color;
Holder = _equipHolder;
BaseDic.Clear();
if (_baseAttributes != null)
{
foreach (Attribute att in _baseAttributes)
{
if (ItemManager.instance.GetAtttibute(att.key) != null)
{
if (!ItemManager.instance.GetAtttibute(att.key).stringValue)
{
float _value = att.GetFloat();
Attribute _newAtt = ItemManager.instance.GetAtttibute(att.key).Copy();
_newAtt.UpdateValue(_value);
BaseDic.Add(att.key, _newAtt);
}
}
}
}
for(int i=0;i().mTexts[0].text = ItemManager.instance.itemAttributes[i].name+" : ";
_newStat.SetActive(true);
_newStat.GetComponent().mValue = GetValue(ItemManager.instance.itemAttributes[i].key);
_newStat.GetComponent().mTexts[1].text = GetValue(ItemManager.instance.itemAttributes[i].key).ToString()+ ItemManager.instance.itemAttributes[i].suffixes;
StatList.Add(ItemManager.instance.itemAttributes[i].key,_newStat.GetComponent());
}
}
Inited = true;
}
}
}