//**********************************************//
//作者:#AUTHOR#
//日期:#DATE#
//简述:#DESCRIPTION#
//*********************************************//
using UnityEngine;
using Thousandto.Code.Logic;
using Thousandto.Code.Center;
using Thousandto.Code.Global;
using Thousandto.Cfg.Data;
using Thousandto.Plugins.Common;
namespace Thousandto.GameUI.Form
{
///
/// 类UIItem说明
///
public class UIItem : UIIcon
{
#region //私有变量
public delegate void UIItemDelegate(UIItem item);
private UISprite _qualtySprite; //背景
private UISprite _iconBind; //是否绑定
private UILabel _numLabel; //数量
private UILabel _strenLv; //装备等级
private UISprite _effect; //装备特效
private ItemBase _showItem; //要显示的物品
private UIGrid _diamondGrid;//装备钻石
private UILabel _starNumLabel; //超过五星的用数字表示
private UISpriteAnimation _effectAni; // 帧动画
private UISpriteAnimation _effectAni2; // 帧动画2
private Transform _unUseEquipSprite; //装备不可穿戴图片
private Transform _upEquipSprite; // 更优装备
private Transform _xijiaBg;
private ItemTipsLocation _location;
private bool _isBindBagNum = false;
private string _bindBagNumFormatString = string.Empty;
private string _enoughColor = "[00ff00]";
private string _notEnoughColor = "[ff0000]";
private bool _isRegisterBagMsg = false;
private long _showNum = 0;
//private DeclarePeopleSoul _peopleSoulCfg = null;
#endregion
#region //属性
public bool isShowTips
{
get;
set;
}
public bool isShowGet
{
get;
set;
}
public bool IsBindBagNum
{
get
{
return _isBindBagNum;
}
}
public string BindBagNumFormatString
{
get
{
return _bindBagNumFormatString;
}
set
{
_bindBagNumFormatString = value;
}
}
public string EnoughColor
{
get
{
return _enoughColor;
}
set
{
_enoughColor = value;
}
}
public string NotEnoughColor
{
get
{
return _notEnoughColor;
}
set
{
_notEnoughColor = value;
}
}
public ItemBase ShowItem
{
get { return _showItem; }
}
public UIItemDelegate SingleClick
{ get; set; }
#endregion
#region//继承父类
protected override void OnInitialization()
{
base.OnInitialization();
var quaTrans = transform.Find("Quality");
if(quaTrans != null)
{
_qualtySprite = quaTrans.GetComponent();
}
Transform bindTran = transform.Find("Bind");
if (null != bindTran)
{
_iconBind = bindTran.GetComponent();
}
Transform numTran = transform.Find("Num");
if (null != numTran)
{
_numLabel = numTran.GetComponent();
}
numTran = transform.Find("Level");
if (null != numTran)
{
_strenLv = numTran.GetComponent();
}
numTran = transform.Find("Effect");
if(null != numTran)
{
_effect = numTran.GetComponent();
}
numTran = transform.Find("Effect1");
if (null != numTran)
{
_effectAni = numTran.RequireComponent();
_effectAni.namePrefix = "item_";
_effectAni.framesPerSecond = 10;
_effectAni.PrefixSnap = false;
}
numTran = transform.Find("Effect2");
if (null != numTran)
{
_effectAni2 = numTran.RequireComponent();
_effectAni2.namePrefix = "item1_";
_effectAni2.framesPerSecond = 10;
_effectAni2.PrefixSnap = false;
}
numTran = TransformInst.Find("StarNum");
if (numTran != null)
{
_starNumLabel = numTran.GetComponent();
}
_upEquipSprite = TransformInst.Find("up");
_unUseEquipSprite = TransformInst.Find("UnUseSprite");
_xijiaBg = TransformInst.Find("XJbg");
numTran = transform.Find("Grid");
if (null != numTran)
{
_diamondGrid = numTran.GetComponent();
}
_location = ItemTipsLocation.Defult;
UIButton button = TransformInst.RequireComponent();
button.onClick.Clear();
button.onClick.Add(new EventDelegate(OnBtnItemClick));
isShowTips = true;
}
private void Update()
{
}
#endregion
#region//公共接口
///
/// 通过物品或装备实例数据生成
///
///
public void InitializationWithIdAndNum(ItemBase itemInfo, long num, bool mastShowNum = false, bool isShowGetBtn = true, ItemTipsLocation location = ItemTipsLocation.Defult)
{
InitializationWithCheck();
if (_numLabel != null)
{
_numLabel.gameObject.SetActive(true);
}
if(_strenLv)
{
_strenLv.gameObject.SetActive(false);
}
if (_upEquipSprite != null)
{
_upEquipSprite.gameObject.SetActive(false);
}
if (_unUseEquipSprite != null)
_unUseEquipSprite.gameObject.SetActive(false);
if (_xijiaBg != null)
_xijiaBg.gameObject.SetActive(false);
_showItem = itemInfo;
isShowGet = isShowGetBtn;
_location = location;
if (null != _showItem && _showItem.IsValid())
{
int iconId = itemInfo.Icon;
string qualtyName = ItemBase.GetQualitySpriteName(_showItem.Quality);
OnSetDiamondSpr(_showItem.StarNum);
OnSetEffect(_showItem.Effect);
if (_showItem.Type == ItemType.Equip || _showItem.Type == ItemType.HolyEquip)
{
var equipItem = _showItem as Equipment;
if (_showItem.CheackOcc((int)GameCenter.GameSceneSystem.GetLocalPlayer().Occ) && _upEquipSprite != null)
{
_upEquipSprite.gameObject.SetActive(_showItem.CheckBetterThanDress());
}
if (_unUseEquipSprite != null)
{
_unUseEquipSprite.gameObject.SetActive(!_showItem.CheackOcc((int)GameCenter.GameSceneSystem.GetLocalPlayer().Occ));
}
if (_strenLv)
{
_strenLv.gameObject.SetActive(true);
_strenLv.text = DeclareMessageString.Format(DeclareMessageString.LEVEL_FOR_JIE, _showItem.Grade);
}
}
else if(_showItem.Type == ItemType.ImmortalEquip)
{
if (_xijiaBg != null)
_xijiaBg.gameObject.SetActive(true);
var equipItem = _showItem as ImmortalEquip;
if (equipItem.CheackOcc((int)GameCenter.GameSceneSystem.GetLocalPlayer().Occ) && _upEquipSprite != null)
{
_upEquipSprite.gameObject.SetActive(equipItem.CheckBetterThanDress());
}
if (_unUseEquipSprite != null)
{
_unUseEquipSprite.gameObject.SetActive(!equipItem.CheackOcc((int)GameCenter.GameSceneSystem.GetLocalPlayer().Occ));
}
if (_strenLv)
{
_strenLv.gameObject.SetActive(true);
_strenLv.text = "";
}
}
UpdateIcon(iconId);
if(_numLabel != null)
{
if (num > 1 || mastShowNum)
{
_numLabel.text = OnGetNumStr(num);
}
else
{
_numLabel.text = "";
}
}
if(_iconBind != null)
{
_iconBind.gameObject.SetActive(_showItem.IsBind);
}
if (_qualtySprite != null)
{
_qualtySprite.spriteName = qualtyName;
}
_showNum = num;
}
else
{
UpdateIcon(-1);
if(_iconBind != null)
{
_iconBind.gameObject.SetActive(false);
}
if (_qualtySprite != null)
{
_qualtySprite.gameObject.SetActive(false);
}
if(_numLabel != null)
{
_numLabel.text = "";
}
}
if (_numLabel != null)
{
_numLabel.color = Color.white;
}
}
///
/// 通过物品配置ID初始化item
///
///
public void InitializationWithIdAndNum(int itemID, long num, bool isBind = false, bool isShowGetBtn = true)
{
InitializationWithCheck();
if (_strenLv)
{
_strenLv.gameObject.SetActive(false);
}
if (_upEquipSprite != null)
{
_upEquipSprite.gameObject.SetActive(false);
}
if (_unUseEquipSprite != null)
_unUseEquipSprite.gameObject.SetActive(false);
if (_xijiaBg != null)
_xijiaBg.gameObject.SetActive(false);
_location = ItemTipsLocation.Defult;
isShowGet = isShowGetBtn;
_showItem = ItemContianerSystem.GetItemCfgWithID(itemID);
if (null != _showItem && _showItem.Type != ItemType.UnDefine)
{
_showItem.IsBind = isBind;
int iconId = _showItem.Icon;
string qualtyName = ItemBase.GetQualitySpriteName(_showItem.Quality);
OnSetEffect(_showItem.Effect);
OnSetDiamondSpr(_showItem.StarNum);
if (_showItem.Type == ItemType.Equip || _showItem.Type == ItemType.HolyEquip)
{
if (_showItem.CheackOcc((int)GameCenter.GameSceneSystem.GetLocalPlayer().Occ) && _upEquipSprite != null)
{
_upEquipSprite.gameObject.SetActive(_showItem.CheckBetterThanDress());
}
if (_strenLv)
{
_strenLv.gameObject.SetActive(true);
_strenLv.text = DeclareMessageString.Format(DeclareMessageString.LEVEL_FOR_JIE, _showItem.Grade);
}
}
else if (_showItem.Type == ItemType.ImmortalEquip)
{
if (_xijiaBg != null)
_xijiaBg.gameObject.SetActive(true);
var equipItem = _showItem as ImmortalEquip;
if (equipItem.CheackOcc((int)GameCenter.GameSceneSystem.GetLocalPlayer().Occ) && _upEquipSprite != null)
{
_upEquipSprite.gameObject.SetActive(equipItem.CheckBetterThanDress());
}
if (_unUseEquipSprite != null)
{
_unUseEquipSprite.gameObject.SetActive(!equipItem.CheackOcc((int)GameCenter.GameSceneSystem.GetLocalPlayer().Occ));
}
if (_strenLv)
{
_strenLv.gameObject.SetActive(true);
_strenLv.text = "";
}
}
UpdateIcon(iconId);
if(_numLabel != null)
{
if (num <= 1)
{
_numLabel.text = string.Empty;
}
else
{
_numLabel.text = OnGetNumStr(num);
}
}
if(_iconBind != null)
{
_iconBind.gameObject.SetActive(isBind);
}
if (_qualtySprite != null)
{
_qualtySprite.spriteName = qualtyName;
}
_showNum = num;
}
else
{
UpdateIcon(-1);
if(_iconBind != null)
{
_iconBind.gameObject.SetActive(false);
}
if (_qualtySprite != null)
{
_qualtySprite.gameObject.SetActive(false);
}
if(_numLabel != null)
{
_numLabel.text = "";
}
}
}
//绑定背包中的数量
public void BindBagNum(string formatString = "{0}/{1}")
{
_isBindBagNum = true;
_bindBagNumFormatString = formatString;
RegisterMsg();
UpdateBagNum();
}
//取消绑定背包中的数量
public void CanelBindBagNum()
{
_isBindBagNum = false;
UnRegisterMsg();
}
public void OnSetNum(string sTx)
{
if(_numLabel != null)
{
_numLabel.gameObject.SetActive(true);
_numLabel.text = sTx;
}
}
public void OnSetNumColor(Color col)
{
if (_numLabel != null)
{
_numLabel.color = col;
}
}
public void OnSetShowEffect(int effic)
{
OnSetEffect(effic);
if ( _xijiaBg != null)
{
_xijiaBg.gameObject.SetActive(effic == 3);
}
}
#endregion
#region //按钮事件
public void OnBtnItemClick()
{
if (isShowTips)
{
if(_showItem != null)
{
GameCenter.LuaSystem.Adaptor.ShowItemTips(_showItem, gameObject, _location, isShowGet);
}
//else if(_peopleSoulCfg != null)
//{
//GameCenter.PeopleSoulSystem.ShowTips(GameCenter.PeopleSoulSystem.CreateItemByCfg(_peopleSoulCfg), false);
//}
}
if (SingleClick != null)
SingleClick(this);
}
#endregion
#region//私有函数
private new void OnEnable()
{
if(_isBindBagNum)
{
RegisterMsg();
}
base.OnEnable();
}
private new void OnDisable()
{
if (_isBindBagNum)
{
UnRegisterMsg();
}
base.OnDisable();
}
private void OnDestroy()
{
if (_isBindBagNum)
{
UnRegisterMsg();
}
}
private void UpdateBagNum()
{
if (_showItem == null)
return;
if (!_isBindBagNum)
return;
var haveNum = GameCenter.ItemContianerSystem.GetItemCountFromCfgId(_showItem.CfgID);
var formatString = string.Empty;
if(haveNum >= _showNum)
{
formatString = string.Format("{0}{1}[-]", _enoughColor, _bindBagNumFormatString);
}
else
{
formatString = string.Format("{0}{1}[-]", _notEnoughColor, _bindBagNumFormatString);
}
OnSetNum(string.Format(formatString, OnGetNumStr(haveNum), OnGetNumStr(_showNum)));
}
private void OnBagItemChanged(object obj,object sender=null)
{
if (_showItem == null)
return;
if (!_isBindBagNum)
return;
var itemBase = obj as ItemBase;
if(itemBase != null && itemBase.CfgID == _showItem.CfgID)
{
UpdateBagNum();
}
}
private void RegisterMsg()
{
if (_isRegisterBagMsg)
return;
_isRegisterBagMsg = true;
GameCenter.RegFixEventHandle(LogicEventDefine.EVENT_BACKFORM_ITEM_UPDATE, OnBagItemChanged);
}
private void UnRegisterMsg()
{
if (!_isRegisterBagMsg)
return;
_isRegisterBagMsg = false;
GameCenter.UnRegFixEventHandle(LogicEventDefine.EVENT_BACKFORM_ITEM_UPDATE, OnBagItemChanged);
}
private void OnSetEffect(int effectID)
{
if (_effect != null)
_effect.gameObject.SetActive(false);
if (_effectAni != null)
_effectAni.gameObject.SetActive(false);
if (_effectAni2 != null)
_effectAni2.gameObject.SetActive(false);
if ((effectID == 1 || effectID == 3) && _effect != null)
{
_effect.gameObject.SetActive(true);
}
if ((effectID == 2 || effectID > 3) && _effectAni != null)
{
_effectAni.gameObject.SetActive(true);
if (effectID == 2)
_effectAni.namePrefix = "item_";
else if (effectID == 4)
_effectAni.namePrefix = "item3_";
else if (effectID == 5)
_effectAni.namePrefix = "item4_";
else if (effectID == 6)
_effectAni.namePrefix = "item5_";
else if (effectID == 7)
_effectAni.namePrefix = "item6_";
}
if (effectID == 3 && _effectAni2 != null)
{
_effectAni2.gameObject.SetActive(true);
}
}
//com_decbg_star_p
//com_decbg_zuanshi
private void OnSetDiamondSpr(int diaNum)
{
if (_diamondGrid == null)
return;
_diamondGrid.gameObject.SetActive(diaNum <= 5);
if(_starNumLabel != null)
_starNumLabel.gameObject.SetActive(diaNum > 5);
if (diaNum <= 5)
{
int oldIndex = 0;
int oldCount = _diamondGrid.transform.childCount;
if (oldCount == 0)
return;
for (int i = 0; i < oldCount; i++)
{
_diamondGrid.transform.GetChild(i).gameObject.SetActive(false);
}
if (diaNum > 0)
{
GameObject childGo = null;
if (oldIndex < oldCount)
childGo = _diamondGrid.transform.GetChild(oldIndex).gameObject;
oldIndex++;
childGo.SetActive(true);
for (; oldIndex < diaNum; oldIndex++)
{
if (oldIndex >= oldCount)
{
var insGo = NGUITools.AddChild(_diamondGrid.gameObject, childGo);
insGo.SetActive(true);
}
else
{
var child = _diamondGrid.transform.GetChild(oldIndex);
child.gameObject.SetActive(true);
}
}
_diamondGrid.repositionNow = true;
}
}
else
{
if(_starNumLabel != null)
{
_starNumLabel.text = diaNum.ToString();
}
}
}
private string OnGetNumStr(long num)
{
return CommonUtils.CovertToBigUnit(num, 4);
}
#endregion
}
}