Files
JJBB/Assets/Project/Script/GUI/BackPack/FashionPanelCtr.cs

443 lines
15 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
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;
}
}