443 lines
15 KiB
C#
443 lines
15 KiB
C#
using UnityEngine;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using GCGame.Table;
|
||
using UnityEngine.UI;
|
||
using Games.Item;
|
||
using Games.GlobeDefine;
|
||
|
||
public class FashionPanelCtr : MonoBehaviour {
|
||
|
||
public GameObject attrPanel;
|
||
public List<Text> attrNameList;
|
||
public List<Text> attrValueTetx;
|
||
public Text combatValue;
|
||
|
||
public void ShowFashionAttr(Tab_FashionItem Fashion,int classID)
|
||
{
|
||
attrPanel.SetActive(false);
|
||
if (Fashion == null)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if (Fashion.GetAttrIdbyIndex(0) == -1)
|
||
{
|
||
return;
|
||
}
|
||
attrPanel.SetActive(true);
|
||
for (int index = 0; index < attrNameList.Count; index++)
|
||
{
|
||
if(Fashion.getAttrIdCount() <= index)
|
||
{
|
||
attrNameList[index].gameObject.SetActive(false);
|
||
attrValueTetx[index].gameObject.SetActive(false);
|
||
continue;
|
||
}
|
||
if (Fashion.GetAttrIdbyIndex(index) != -1)
|
||
{
|
||
attrNameList[index].gameObject.SetActive(true);
|
||
attrValueTetx[index].gameObject.SetActive(true);
|
||
|
||
int strId = Fashion.GetAttrIdbyIndex(index) + 10000;
|
||
attrNameList[index].text = StrDictionary.GetClientDictionaryString("#{" + strId + "}") + ":";
|
||
attrValueTetx[index].text = Fashion.GetAttrValuebyIndex(index).ToString();
|
||
}
|
||
else
|
||
{
|
||
attrNameList[index].gameObject.SetActive(false);
|
||
attrValueTetx[index].gameObject.SetActive(false);
|
||
}
|
||
}
|
||
combatValue.text = Fashion.CombatPower.ToString();
|
||
}
|
||
|
||
#region
|
||
public UICameraTexture _UICameraTexture; //角色模型摄像机
|
||
|
||
public GameObject itemPrefab;
|
||
public Transform prefabParent;
|
||
|
||
public List<Image> markList;
|
||
public List<Text> btnDescList;
|
||
|
||
public FashionEquipItem[] fashionEquipItems;
|
||
#endregion
|
||
|
||
public static FashionPanelCtr Instance;
|
||
private void Awake()
|
||
{
|
||
Instance = this;
|
||
}
|
||
private void OnDestroy()
|
||
{
|
||
Instance = null;
|
||
GlobalData.IsSelectedWeaponFashion = false; //关闭或者切换当前页面的时候置为false(UICameraTexture中对武器时装进行特殊处理)
|
||
}
|
||
|
||
private void OnEnable()
|
||
{
|
||
LoadAllBackpackItemToList();
|
||
UpdatePalyerInfo(); //显示角色ModelTexture
|
||
LoadAllFashionItem(); //读取表中信息
|
||
ShowDefaultFirst(); //默认显示第一个
|
||
InitEquipItem();
|
||
}
|
||
|
||
//初始化装备的时装Item
|
||
public void InitEquipItem()
|
||
{
|
||
//武器
|
||
if (GameManager.gameManager.PlayerDataPool.WeaponFashionId != -1)
|
||
{
|
||
fashionEquipItems[1].gameObject.SetActive(true);
|
||
//需要判断当前的武器ID是不是时装...
|
||
int fashionItemId = GlobalData.GetFshionItemIdByDataId(GameManager.gameManager.PlayerDataPool.WeaponFashionId);
|
||
if(fashionItemId == -1)
|
||
{
|
||
fashionEquipItems[1].GetComponent<FashionEquipItem>().InitItem(-1);
|
||
}else
|
||
{
|
||
Tab_FashionItem fashionItem = TableManager.GetFashionItemByID(fashionItemId, 0);
|
||
if(fashionItem != null)
|
||
{
|
||
fashionEquipItems[1].GetComponent<FashionEquipItem>().InitItem(fashionItem.ShowWeaponId);
|
||
}
|
||
}
|
||
|
||
}else
|
||
{
|
||
fashionEquipItems[1].GetComponent<FashionEquipItem>().InitItem(-1);
|
||
}
|
||
|
||
bool hasFind = false;
|
||
if (GameManager.gameManager.PlayerDataPool.ModelVisualID != -1)
|
||
{
|
||
fashionEquipItems[0].gameObject.SetActive(true);
|
||
var fashionItemDic = TableManager.GetFashionItem().Values;
|
||
foreach(var item in fashionItemDic)
|
||
{
|
||
if(item.ItemVisualId == GameManager.gameManager.PlayerDataPool.ModelVisualID)
|
||
{
|
||
fashionEquipItems[0].GetComponent<FashionEquipItem>().InitItem(item.ShowItemId);
|
||
hasFind = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (!hasFind)
|
||
{
|
||
fashionEquipItems[0].GetComponent<FashionEquipItem>().InitItem(-1);
|
||
}
|
||
|
||
}
|
||
|
||
private List<GameItem> m_BackPackItemList = null;
|
||
void LoadAllBackpackItemToList()
|
||
{
|
||
m_BackPackItemList = ItemTool.ItemFilter(GameManager.gameManager.PlayerDataPool.BackPack, 0); //过滤背包中所有物品 存储在ItemList中
|
||
}
|
||
|
||
void ShowDefaultFirst()
|
||
{
|
||
lastClickIndex = -1;
|
||
//默认显示第一个
|
||
OnItemClick(0);
|
||
}
|
||
|
||
private int needShowCount = 0;
|
||
private int curSelectedClassId = -1;
|
||
void InitFashionItemByClassId(int classId)
|
||
{
|
||
curSelectedClassId = classId;
|
||
if (classId == 0) //初始化时装
|
||
{
|
||
needShowCount = fashionClothItemList.Count;
|
||
}
|
||
else //初始化武器
|
||
{
|
||
needShowCount = fashionWeaponItemList.Count;
|
||
}
|
||
|
||
if (needShowCount < itemPrefabList.Count)
|
||
{
|
||
//显示并初始化
|
||
for (int index = 0; index < needShowCount; index++)
|
||
{
|
||
itemPrefabList[index].gameObject.SetActive(true);
|
||
InitFashionItem(index, classId);
|
||
}
|
||
//隐藏多余的Item
|
||
for (int index = needShowCount; index < itemPrefabList.Count; index++)
|
||
{
|
||
if (itemPrefabList[index].activeInHierarchy)
|
||
{
|
||
itemPrefabList[index].SetActive(false);
|
||
}
|
||
}
|
||
|
||
} else
|
||
{
|
||
for (int index = 0; index < itemPrefabList.Count; index++)
|
||
{
|
||
itemPrefabList[index].SetActive(true);
|
||
InitFashionItem(index, classId);
|
||
}
|
||
//创建不足的Item
|
||
for (int index = itemPrefabList.Count; index < needShowCount; index++)
|
||
{
|
||
CraateItemPrefab();
|
||
InitFashionItem(index, classId);
|
||
}
|
||
}
|
||
}
|
||
|
||
private int curSelectedWeaponDatad; //是物品ID (可能情况; 在模型表可以找到,但是不能在EquipAttr中找到)
|
||
public int CurSelectedWeaponDataId
|
||
{
|
||
get { return curSelectedWeaponDatad; }
|
||
}
|
||
|
||
public void SetCurWeaponDataId(int id)
|
||
{
|
||
curSelectedWeaponDatad = id;
|
||
}
|
||
|
||
public void SetCurSelectedWeaponDataId(int id)
|
||
{
|
||
curSelectedWeaponDatad = id;
|
||
}
|
||
|
||
public void ShowSelectedBG(int _Index)
|
||
{
|
||
for(int index = 0; index < itemPrefabList.Count; index++)
|
||
{
|
||
if(_Index == index)
|
||
{
|
||
itemPrefabList[index].GetComponent<FashionItem>().markBG.gameObject.SetActive(true);
|
||
}else
|
||
{
|
||
itemPrefabList[index].GetComponent<FashionItem>().markBG.gameObject.SetActive(false);
|
||
}
|
||
}
|
||
JudgeIsHaveTheFashionItemOrNot(); //判断背包中时是否有对应的时装
|
||
}
|
||
|
||
void InitFashionItem(int index, int classId)
|
||
{
|
||
if (classId == 0) //时装
|
||
{
|
||
itemPrefabList[index].GetComponent<FashionItem>().InitItem(fashionClothItemList[index], index);
|
||
}
|
||
else //武器
|
||
{
|
||
itemPrefabList[index].GetComponent<FashionItem>().InitItem(fashionWeaponItemList[index], index);
|
||
}
|
||
ShowFashionAttr(fashionClothItemList[index], classId);
|
||
}
|
||
|
||
public enum FashionItemState
|
||
{
|
||
INVALID = -1,
|
||
OWN = 0, //拥有(未激活)
|
||
ISOFF = 1, //未穿戴
|
||
ISON = 2, //穿戴
|
||
OVERTIME, //过期
|
||
DONTOWN, //未拥有
|
||
}
|
||
|
||
public void JudgeIsHaveTheFashionItemOrNot()
|
||
{
|
||
FashionItemState curState = FashionItemState.INVALID;
|
||
var _BackPack = GameManager.gameManager.PlayerDataPool.BackPack;
|
||
if (curSelectedClassId == 0) //衣服
|
||
{
|
||
for(int index = 0; index < fashionClothItemList.Count; index++)
|
||
{
|
||
if(GameManager.gameManager.PlayerDataPool.PlerfaFashiuonDataCtr.CurFashionState.ContainsKey(fashionClothItemList[index].Id))
|
||
{
|
||
if(GameManager.gameManager.PlayerDataPool.PlerfaFashiuonDataCtr.CurFashionState[fashionClothItemList[index].Id] == 0)
|
||
{
|
||
curState = FashionItemState.OVERTIME;
|
||
}
|
||
else
|
||
{
|
||
curState = FashionItemState.OWN; //拥有
|
||
}
|
||
}else //没有使用过这个时装(有可能背包有)
|
||
{
|
||
bool hasFind = false;
|
||
//只用判断背包有没有对应道具
|
||
for (int itemIdIndex = 0; itemIdIndex < fashionClothItemList[index].getCommonitemIdCount(); itemIdIndex++)
|
||
{
|
||
if (_BackPack.GetItemCountByDataId(fashionClothItemList[index].GetCommonitemIdbyIndex(itemIdIndex)) > 0)
|
||
{
|
||
curState = FashionItemState.OWN; //拥有
|
||
hasFind = true;
|
||
break;
|
||
}
|
||
}
|
||
if (!hasFind)
|
||
{
|
||
curState = FashionItemState.DONTOWN;
|
||
}
|
||
}
|
||
itemPrefabList[index].GetComponent<FashionItem>().InitState(curState);
|
||
}
|
||
} else //武器
|
||
{
|
||
for (int index = 0; index < fashionWeaponItemList.Count; index++)
|
||
{
|
||
if (GameManager.gameManager.PlayerDataPool.PlerfaFashiuonDataCtr.CurFashionState.ContainsKey(fashionWeaponItemList[index].Id))
|
||
{
|
||
if (GameManager.gameManager.PlayerDataPool.PlerfaFashiuonDataCtr.CurFashionState[fashionWeaponItemList[index].Id] == 0)
|
||
{
|
||
curState = FashionItemState.OVERTIME;
|
||
}
|
||
else
|
||
{
|
||
curState = FashionItemState.OWN; //拥有
|
||
}
|
||
}
|
||
else //没有使用过这个时装(有可能背包有)
|
||
{
|
||
bool hasFind = false;
|
||
//只用判断背包有没有对应道具
|
||
for (int itemIdIndex = 0; itemIdIndex < fashionWeaponItemList[index].getCommonitemIdCount(); itemIdIndex++)
|
||
{
|
||
if (_BackPack.GetItemCountByDataId(fashionWeaponItemList[index].GetCommonitemIdbyIndex(itemIdIndex)) > 0)
|
||
{
|
||
curState = FashionItemState.OWN; //拥有
|
||
hasFind = true;
|
||
break;
|
||
}
|
||
}
|
||
if (!hasFind)
|
||
{
|
||
curState = FashionItemState.DONTOWN;
|
||
}
|
||
}
|
||
itemPrefabList[index].GetComponent<FashionItem>().InitState(curState);
|
||
}
|
||
}
|
||
}
|
||
|
||
private List<GameObject> itemPrefabList = new List<GameObject>();
|
||
void CraateItemPrefab()
|
||
{
|
||
GameObject item = GameObject.Instantiate(itemPrefab);
|
||
|
||
//设置位置
|
||
item.transform.SetParent(prefabParent);
|
||
item.transform.localPosition = Vector3.zero;
|
||
item.transform.localScale = Vector3.one;
|
||
item.transform.localRotation = Quaternion.Euler(Vector3.zero);
|
||
|
||
itemPrefabList.Add(item);
|
||
}
|
||
|
||
private List<Tab_FashionItem> fashionClothItemList = new List<Tab_FashionItem>();
|
||
private List<Tab_FashionItem> fashionWeaponItemList = new List<Tab_FashionItem>();
|
||
//初始化Item
|
||
void LoadAllFashionItem()
|
||
{
|
||
ClearAllList();
|
||
//按照类型进行分类
|
||
foreach(var item in TableManager.GetFashionItem().Values)
|
||
{
|
||
if (item.ClassId == 0)
|
||
{
|
||
fashionClothItemList.Add(item);
|
||
} else
|
||
{
|
||
fashionWeaponItemList.Add(item);
|
||
}
|
||
}
|
||
}
|
||
|
||
void ClearAllList()
|
||
{
|
||
fashionClothItemList.Clear();
|
||
fashionWeaponItemList.Clear();
|
||
}
|
||
|
||
|
||
public void UpdatePalyerInfo()
|
||
{
|
||
var mainPlayer = Singleton<ObjManager>.GetInstance().MainPlayer;
|
||
if(mainPlayer != null)
|
||
_UICameraTexture.InitPlayerModel(mainPlayer);
|
||
}
|
||
|
||
private int lastClickIndex = -1;
|
||
public void OnItemClick(int index)
|
||
{
|
||
if(index == lastClickIndex)
|
||
{
|
||
return;
|
||
}
|
||
for (int _Index = 0; _Index < markList.Count; _Index++)
|
||
{
|
||
markList[_Index].gameObject.SetActive(_Index == index);
|
||
}
|
||
|
||
//if(index == 0)
|
||
//{
|
||
// btnDescList[0].text = StrDictionary.GetClientDictionaryString("#{46220}");//"<color=#5B719AFF>外饰</color>";
|
||
// btnDescList[1].text = StrDictionary.GetClientDictionaryString("#{46221}");//"<color=#636D81FF>武器</color>";
|
||
//}
|
||
//else
|
||
//{
|
||
// btnDescList[0].text = StrDictionary.GetClientDictionaryString("#{46222}");//"<color=#636D81FF>外饰</color>";
|
||
// btnDescList[1].text = StrDictionary.GetClientDictionaryString("#{46223}");//"<color=#5B719AFF>武器</color>";
|
||
//}
|
||
InitFashionItemByClassId(index);
|
||
ShowSelectedBG(-1); //重置选择背景
|
||
}
|
||
|
||
|
||
|
||
public void ShowModelOnTexture(int modelVisualId, int classId, int fashionItemId, bool showAll = false)
|
||
{
|
||
StartCoroutine(ShowModel(modelVisualId, classId, fashionItemId, showAll));
|
||
}
|
||
|
||
IEnumerator ShowModel(int modelVisualId, int classId, int fashionItemId, bool showAll = false)
|
||
{
|
||
yield return new WaitForEndOfFrame();
|
||
var mainPlayer = Singleton<ObjManager>.GetInstance().MainPlayer;
|
||
if (showAll) //不再分类 全部显示
|
||
{
|
||
_UICameraTexture.InitPlayerModel(mainPlayer);
|
||
}
|
||
else
|
||
{
|
||
if (classId == 0) //试穿衣服
|
||
{
|
||
var fashionitem = TableManager.GetFashionItemByID(fashionItemId, 0);
|
||
if(fashionitem == null)
|
||
{
|
||
Module.Log.LogModule.ErrorLog("FashonItemTab is null : " + fashionItemId);
|
||
yield break;
|
||
}
|
||
_UICameraTexture.InitModel(mainPlayer.Profession,
|
||
GlobalData.GetCharModelId(mainPlayer.Profession, modelVisualId),
|
||
fashionitem.WeaponId != -1 ? fashionitem.WeaponId : mainPlayer.WeaponDataID, mainPlayer.WingModelAuraid,
|
||
mainPlayer.WeaponEffectGem, mainPlayer.EffectAuraId,
|
||
mainPlayer.AdcaneMountId);
|
||
}
|
||
else //试穿武器
|
||
{
|
||
_UICameraTexture.InitModel(mainPlayer.Profession, mainPlayer.ModelID, curSelectedWeaponDatad, mainPlayer.WingModelAuraid, mainPlayer.WeaponEffectGem, mainPlayer.EffectAuraId, mainPlayer.AdcaneMountId);
|
||
}
|
||
}
|
||
yield break;
|
||
}
|
||
|
||
private void OnDisable() //关闭或者切换页面的时候都为false
|
||
{
|
||
GlobalData.IsSelectedWeaponFashion = false;
|
||
}
|
||
|
||
}
|