475 lines
16 KiB
C#
475 lines
16 KiB
C#
using UnityEngine;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using GCGame.Table;
|
||
using UnityEngine.UI;
|
||
|
||
public class EffectPanel : MonoBehaviour {
|
||
|
||
#region
|
||
public UICameraTexture cameraTexture;
|
||
public GameObject itemPrefab;
|
||
public Transform prefabParent;
|
||
|
||
public Sprite normalBtnImage;
|
||
public Sprite cantClickBtnImage;
|
||
|
||
public List<Image> markList;
|
||
public List<Text> btnDescList;
|
||
|
||
public Button saveBtn;
|
||
|
||
public Text panelDesc;
|
||
#endregion
|
||
|
||
public static EffectPanel Instance;
|
||
private void Awake()
|
||
{
|
||
Instance = this;
|
||
}
|
||
|
||
void OnEnable()
|
||
{
|
||
LoadAllItemToDic(); //读取配置表
|
||
ShowDefaultFirst(); //默认显示第一列
|
||
ShowDefaultModel();
|
||
}
|
||
|
||
private List<int> effectList = new List<int>();
|
||
private List<int> wingList = new List<int>();
|
||
|
||
private List<GameObject> effectItemList = new List<GameObject>();
|
||
private List<GameObject> wingItemList = new List<GameObject>();
|
||
void LoadAllItemToDic() //分成两类
|
||
{
|
||
effectList.Clear();
|
||
wingList.Clear();
|
||
var auraConfigDic = TableManager.GetAuraConfig().Values;
|
||
foreach (var item in auraConfigDic)
|
||
{
|
||
if(item.AuraType == 0)
|
||
{
|
||
effectList.Add(item.AuraID);
|
||
}else if (item.AuraType == 1)
|
||
{
|
||
wingList.Add(item.AuraID);
|
||
}
|
||
}
|
||
}
|
||
void ShowDefaultFirst()
|
||
{
|
||
ShowItemByClassId(0);
|
||
}
|
||
|
||
private int _LatClassId = -1;
|
||
public void ShowItemByClassId(int classID)
|
||
{
|
||
if(_LatClassId == classID)
|
||
{
|
||
return;
|
||
}
|
||
_LatClassId = classID;
|
||
|
||
ClearAllPrefabs();
|
||
curClassType = classID;
|
||
if(classID == 0)
|
||
{
|
||
for(int index = 0; index < effectList.Count; index++)
|
||
{
|
||
CreatePrefabs();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for(int index = 0; index < wingList.Count; index++)
|
||
{
|
||
CreatePrefabs();
|
||
}
|
||
}
|
||
|
||
var mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
|
||
if (mainPlayer == null)
|
||
{
|
||
return;
|
||
}
|
||
|
||
//预设体创建完毕 初始化Item
|
||
if (classID == 0)
|
||
{
|
||
effectItemList.Clear();
|
||
for(int index = 0; index < effectList.Count; index++)
|
||
{
|
||
prefabList[index].gameObject.GetComponent<EffectItem>().InitItem(effectList[index], classID, index);
|
||
effectItemList.Add(prefabList[index].gameObject);
|
||
effectItemList[index].GetComponent<EffectItem>().markIcon.SetActive(
|
||
effectList[index] == mainPlayer.EffectAuraId ? true : false);
|
||
effectItemList[index].GetComponent<EffectItem>().dressDesc.gameObject.SetActive(
|
||
effectList[index] == mainPlayer.EffectAuraId ? true : false);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
wingItemList.Clear();
|
||
for (int index = 0; index < wingList.Count; index++)
|
||
{
|
||
prefabList[index].gameObject.GetComponent<EffectItem>().InitItem(wingList[index], classID, index);
|
||
wingItemList.Add(prefabList[index].gameObject);
|
||
wingItemList[index].GetComponent<EffectItem>().markIcon.SetActive(
|
||
wingList[index] == mainPlayer.WingModelAuraid ? true : false);
|
||
wingItemList[index].GetComponent<EffectItem>().dressDesc.gameObject.SetActive(
|
||
wingList[index] == mainPlayer.WingModelAuraid ? true : false);
|
||
}
|
||
}
|
||
|
||
for (int _Index = 0; _Index < markList.Count; _Index++)
|
||
{
|
||
markList[_Index].gameObject.SetActive(_Index == classID);
|
||
}
|
||
|
||
//统一颜色 不再变色
|
||
panelDesc.text = classID == 0 ? StrDictionary.GetClientDictionaryString("#{42638}") : StrDictionary.GetClientDictionaryString("#{42641}");
|
||
|
||
RefreshBtnState(); //将当前穿戴的特效的IsOn设为True;
|
||
RefreshModelCamera(); //刷新当前的相机为当前穿戴的模型
|
||
}
|
||
|
||
void ClearAllPrefabs()
|
||
{
|
||
for(int index = 0; index < prefabList.Count; index++)
|
||
{
|
||
GameObject.Destroy(prefabList[index].gameObject);
|
||
}
|
||
prefabList.Clear();
|
||
}
|
||
|
||
private List<GameObject> prefabList = new List<GameObject>();
|
||
void CreatePrefabs()
|
||
{
|
||
GameObject item = GameObject.Instantiate(itemPrefab) as GameObject;
|
||
|
||
item.transform.SetParent(prefabParent);
|
||
item.transform.localPosition = Vector3.zero;
|
||
item.transform.localScale = Vector3.one;
|
||
item.transform.localRotation = Quaternion.Euler(Vector3.zero);
|
||
|
||
//item.GetComponentInChildren<Toggle>().group = m_ToggleGroup;
|
||
prefabList.Add(item);
|
||
}
|
||
|
||
public void ShowDefaultModel()
|
||
{
|
||
var mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
|
||
cameraTexture.InitPlayerModel(mainPlayer);
|
||
}
|
||
|
||
public void ShowItemMarkIcon(int _Index)
|
||
{
|
||
for(int index = 0; index < prefabList.Count; index++)
|
||
{
|
||
if(index == _Index && prefabList[index].gameObject.GetComponent<EffectItem>().markIcon.activeInHierarchy) //关闭打开的按钮
|
||
{
|
||
prefabList[index].gameObject.GetComponent<EffectItem>().markIcon.SetActive(false);
|
||
}else
|
||
{
|
||
prefabList[index].gameObject.GetComponent<EffectItem>().markIcon.SetActive(index == _Index ? true : false);
|
||
}
|
||
}
|
||
}
|
||
|
||
private int _CurSelectClassId = 0; //默认0
|
||
private int curSelectedIndex = -1;
|
||
private int CurAuraConfigId = -1;
|
||
public void SetEffectId(int classId, int auraConfigId, int selectedIndex)
|
||
{
|
||
_CurSelectClassId = classId;
|
||
var mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
|
||
if (mainPlayer == null)
|
||
{
|
||
return;
|
||
}
|
||
|
||
ShowItemMarkIcon(selectedIndex); //设置背景
|
||
saveBtn.interactable = false; //先设定保存按钮不能点击
|
||
if (classId == 0)
|
||
{
|
||
bool hasEffectItemOn = false;
|
||
for (int index = 0; index < effectItemList.Count; index++)
|
||
{
|
||
if (effectItemList[index].gameObject.GetComponent<EffectItem>().markIcon.activeInHierarchy)
|
||
{
|
||
curSelectedIndex = index;
|
||
hasEffectItemOn = true;
|
||
CurAuraConfigId = auraConfigId;
|
||
if (!effectItemList[index].GetComponent<EffectItem>().dressDesc.isActiveAndEnabled)
|
||
{
|
||
effectItemList[index].GetComponent<EffectItem>().dressDesc.gameObject.SetActive(true);
|
||
}
|
||
effectItemList[index].GetComponent<EffectItem>().dressDesc.gameObject.SetActive(true);
|
||
effectItemList[index].GetComponent<EffectItem>().dressDesc.text = effectList[index] ==
|
||
mainPlayer.EffectAuraId ? StrDictionary.GetClientDictionaryString("#{42642}") : StrDictionary.GetClientDictionaryString("#{42643}");
|
||
}else
|
||
{
|
||
effectItemList[index].GetComponent<EffectItem>().dressDesc.gameObject.SetActive(false);
|
||
}
|
||
}
|
||
if (!hasEffectItemOn)
|
||
{
|
||
curSelectedIndex = -1;
|
||
CurAuraConfigId = -1;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
bool hasWingItemOn = false;
|
||
for (int index = 0; index < wingItemList.Count; index++)
|
||
{
|
||
if (wingItemList[index].GetComponent<EffectItem>().markIcon.activeInHierarchy)
|
||
{
|
||
CurAuraConfigId = auraConfigId;
|
||
curSelectedIndex = index;
|
||
hasWingItemOn = true;
|
||
RefreshBtnState();
|
||
if (!wingItemList[index].GetComponent<EffectItem>().markIcon.activeInHierarchy)
|
||
{
|
||
wingItemList[index].GetComponent<EffectItem>().dressDesc.gameObject.SetActive(true);
|
||
}
|
||
wingItemList[index].GetComponent<EffectItem>().dressDesc.gameObject.SetActive(true);
|
||
wingItemList[index].GetComponent<EffectItem>().dressDesc.text = wingList[index] ==
|
||
mainPlayer.WingModelAuraid ? StrDictionary.GetClientDictionaryString("#{42642}") : StrDictionary.GetClientDictionaryString("#{42643}");
|
||
}
|
||
else
|
||
{
|
||
wingItemList[index].GetComponent<EffectItem>().dressDesc.gameObject.SetActive(false);
|
||
}
|
||
}
|
||
if (!hasWingItemOn)
|
||
{
|
||
curSelectedIndex = -1;
|
||
CurAuraConfigId = -1;
|
||
}
|
||
}
|
||
|
||
OnItemClick(classId, CurAuraConfigId);
|
||
}
|
||
|
||
private int curClassType = -1;
|
||
public void OnItemClick(int classId, int auraId)
|
||
{
|
||
curClassType = classId;
|
||
var mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
|
||
|
||
if (classId == 0)
|
||
{
|
||
cameraTexture.InitModel(mainPlayer.Profession, mainPlayer.ModelID, mainPlayer.WeaponDataID, mainPlayer.WingModelAuraid, mainPlayer.WeaponEffectGem, auraId, mainPlayer.IsShowWing ? mainPlayer.AdvanceWingId : -1);
|
||
}
|
||
else
|
||
{
|
||
cameraTexture.InitModel(mainPlayer.Profession, mainPlayer.ModelID, mainPlayer.WeaponDataID, auraId, mainPlayer.WeaponEffectGem, mainPlayer.EffectAuraId, mainPlayer.IsShowWing ? mainPlayer.AdvanceWingId : -1);
|
||
}
|
||
SetSaveBtnState(classId, curSelectedIndex);
|
||
}
|
||
|
||
public void RefreshBtnState()
|
||
{
|
||
var mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
|
||
if (curClassType == 0)
|
||
{
|
||
for (int index = 0; index < effectItemList.Count; index++)
|
||
{
|
||
var item = effectItemList[index].GetComponent<EffectItem>();
|
||
item.RefreshItemNameDesc();
|
||
if (item.markIcon.activeInHierarchy)
|
||
{
|
||
item.dressDesc.text = effectList[index] == mainPlayer.EffectAuraId
|
||
? StrDictionary.GetClientDictionaryString("#{42642}") : StrDictionary.GetClientDictionaryString("#{42643}");
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (int index = 0; index < wingItemList.Count; index++)
|
||
{
|
||
var item = wingItemList[index].GetComponent<EffectItem>();
|
||
item.RefreshItemNameDesc();
|
||
if (item.markIcon.activeInHierarchy)
|
||
{
|
||
item.dressDesc.text = wingList[index] == mainPlayer.WingModelAuraid
|
||
? StrDictionary.GetClientDictionaryString("#{42642}") : StrDictionary.GetClientDictionaryString("#{42643}");
|
||
}
|
||
}
|
||
}
|
||
SetSaveBtnState(_CurSelectClassId, curSelectedIndex);
|
||
}
|
||
|
||
public void SetSaveBtnState(int classId, int index)
|
||
{
|
||
var mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
|
||
if (index == -1)
|
||
{
|
||
saveBtn.interactable = true;
|
||
return;
|
||
}
|
||
|
||
if (classId == 0)
|
||
{
|
||
int auraId = effectList[index];
|
||
if(GameManager.gameManager.PlayerDataPool.PlerfaFashiuonDataCtr.CurOwnEffectInfo.ContainsKey(auraId)) //拥有 可点击
|
||
{
|
||
//当前是否穿戴
|
||
if(mainPlayer.EffectAuraId == auraId)
|
||
{
|
||
saveBtn.interactable = false;
|
||
}else
|
||
{
|
||
saveBtn.interactable = true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
saveBtn.interactable = false;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
int auraId = wingList[index];
|
||
if (GameManager.gameManager.PlayerDataPool.PlerfaFashiuonDataCtr.CurOwnEffectInfo.ContainsKey(auraId)) //拥有 可点击
|
||
{
|
||
//当前是否穿戴
|
||
if (mainPlayer .WingModelAuraid== auraId)
|
||
{
|
||
saveBtn.interactable = false;
|
||
}
|
||
else
|
||
{
|
||
saveBtn.interactable = true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
saveBtn.interactable = false;
|
||
}
|
||
}
|
||
}
|
||
|
||
private void OnDisable()
|
||
{
|
||
//prefabList.Clear();
|
||
_LatClassId = -1;
|
||
}
|
||
|
||
private void OnDestroy()
|
||
{
|
||
prefabList.Clear();
|
||
Instance = null;
|
||
}
|
||
|
||
public void OnSaveBtnClick()
|
||
{
|
||
var mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
|
||
if(mainPlayer == null)
|
||
{
|
||
return;
|
||
}
|
||
if (curClassType == 0)
|
||
{
|
||
bool hasToggleOn = false;
|
||
for(int index = 0; index < effectItemList.Count; index++)
|
||
{
|
||
if (effectItemList[index].GetComponent<EffectItem>().markIcon.activeInHierarchy )
|
||
{
|
||
hasToggleOn = true;
|
||
if (effectList[index] == mainPlayer.EffectAuraId)
|
||
{
|
||
break;
|
||
}else
|
||
{
|
||
//穿戴当前特效
|
||
CG_ASK_WEAR_AURA req = (CG_ASK_WEAR_AURA)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_WEAR_AURA);
|
||
req.SetAuraID(effectList[index]);
|
||
req.SendPacket();
|
||
}
|
||
}
|
||
}
|
||
|
||
if(!hasToggleOn)
|
||
{
|
||
if(mainPlayer.EffectAuraId != 0)
|
||
{
|
||
//脱下当前穿戴
|
||
CG_ASK_TAKEOFF_AURA takeOff = (CG_ASK_TAKEOFF_AURA)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_TAKEOFF_AURA);
|
||
takeOff.SetAuraType(curClassType);
|
||
takeOff.SendPacket();
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
bool hasToggleOn = false;
|
||
for (int index = 0; index < wingItemList.Count; index++)
|
||
{
|
||
if (wingItemList[index].GetComponent<EffectItem>().markIcon.activeInHierarchy)
|
||
{
|
||
hasToggleOn = true;
|
||
if (wingList[index] == mainPlayer.WingModelAuraid)
|
||
{
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
//穿戴当前特效
|
||
CG_ASK_WEAR_AURA req = (CG_ASK_WEAR_AURA)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_WEAR_AURA);
|
||
req.SetAuraID(wingList[index]);
|
||
req.SendPacket();
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!hasToggleOn)
|
||
{
|
||
if (mainPlayer.WingModelAuraid != 0)
|
||
{
|
||
//脱下当前穿戴
|
||
CG_ASK_TAKEOFF_AURA takeOff = (CG_ASK_TAKEOFF_AURA)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_TAKEOFF_AURA);
|
||
takeOff.SetAuraType(curClassType);
|
||
takeOff.SendPacket();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
public void RefreshModelCamera()
|
||
{
|
||
var mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
|
||
cameraTexture.InitPlayerModel(mainPlayer);
|
||
|
||
RefreshItemState();
|
||
}
|
||
|
||
public void RefreshItemState()
|
||
{
|
||
var mainPlayer = Singleton<ObjManager>.Instance.MainPlayer;
|
||
if (mainPlayer == null)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if (curClassType == 0)
|
||
{
|
||
for (int index = 0; index < effectList.Count; index++)
|
||
{
|
||
effectItemList[index].GetComponent<EffectItem>().dressDesc.gameObject.SetActive(
|
||
effectList[index] == mainPlayer.EffectAuraId ? true : false);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (int index = 0; index < wingList.Count; index++)
|
||
{
|
||
wingItemList[index].GetComponent<EffectItem>().dressDesc.gameObject.SetActive(
|
||
wingList[index] == mainPlayer.WingModelAuraid ? true : false);
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|