Files
JJBB/Assets/Project/Script/GUI/Role/TitleNameViewCtr.cs

595 lines
20 KiB
C#
Raw Permalink Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using System;
using GCGame.Table;
using Games.TitleInvestitive;
using System.Linq;
public class TitleNameViewCtr : MonoBehaviour {
public static TitleNameViewCtr Instace;
private void Awake()
{
Instace = this;
}
private void OnDestroy()
{
Instace = null;
}
#region UI拖拽控件
public GameObject _TotalPropPanel; //属性总览界面
public GameObject _DescPanel; //称号描述界面
public GameObject res_menuItem; //菜单按钮Prefab
public GameObject res_titleNameItem; //子Item按钮
public Transform prefabParent;
public ToggleGroup menuItemToggleGroup;
public GameObject titleNameGO;
public Text titleNameText;
public Image titleNameImage;
private GameObject titleEffect;
public Text titleNameDescText;
public Text titlePropDescText;
public Text gainWayDescText;
public Button activiteActBtn;
public Button activiteCancelBtn;
public Button adornActBtn;
public Button adornCancelBtn;
//称号标记
public Text markDesc;
public Text limitDesc;
/// <summary>
/// 称号激活数量
/// </summary>
public int TitleNumber;
public int jiehun;
public int jiebai;
public int teshu;
public int paihang;
public int zhanchan;
public int keju;
#endregion
public List<GameSystemTitleInvestitive> m_AllOwnTileNameList = new List<GameSystemTitleInvestitive>();
private Dictionary<int, Toggle> menuToggleDic = new Dictionary<int, Toggle>();//菜单开关
private Dictionary<int, List<Toggle>> subItemToggleDic = new Dictionary<int, List<Toggle>>();
/// <summary>
/// 当前选择的ID
/// </summary>
public int CurSelectedClassId = -1;
[HideInInspector]
public bool hasOpenUI = false;
private void Start()
{
AddTypeToList();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.P))
{
for (int i = 0; i < m_AllOwnTileNameList.Count; i++)
{
var aaa = m_AllOwnTileNameList.Count;
Debug.LogError(aaa);
}
}
}
private void OnEnable()
{
AskForAllOwnTileNameList(); //请求已经拥有的全部称谓List
}
void RefreshTitleNameState()
{
for (int index = 0; index < subItemList.Count; index++)
{
subItemList[index].GetComponent<TitleNameItem>().RefreshTitleState(IsOwnTitle(subItemList[index].GetComponent<TitleNameItem>().titleId));
}
}
void ShowDefaultFirst()
{
//OnMenuItemClick(1); //选择第一个大菜单
menuToggleDic.First().Value.isOn = true; //第一个Menu设置为选中状态
//subItemToggleDic.First().Value[0].isOn = true; //第一个Menu的子Item设置为选中状态
//OnSubItemClick(subItemToggleDic.First().Value[0].GetComponentInParent<TitleNameItem>().titleId);
//curSelectedTileNameId = subItemToggleDic.First().Value[0].GetComponentInParent<TitleNameItem>().titleId;
ShowMarkIcon();
}
private void OnDisable()
{
hasOpenUI = false;
}
List<CG_ACTIVE_TITLE> allTitleList = new List<CG_ACTIVE_TITLE>();
//所有称号
void AskForAllOwnTileNameList()
{
CG_ACTIVE_TITLE ask = (CG_ACTIVE_TITLE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ACTIVE_TITLE);
ask.SetOptionType(4);
ask.SetTitleId(0);
ask.SendPacket();
TitleNumber++;
}
//所有标题
public void GetAllTitleNameList()
{
m_AllOwnTileNameList = GameManager.gameManager.PlayerDataPool.TitleInvestitive.AllTitleList;
RefreshTitleNameState();
ShowMarkIcon();
}
/// <summary>
/// 大菜單名字信息
/// </summary>
public Dictionary<int, string> menutItemTypeAndNameDic = new Dictionary<int, string>();
void AddAllTitleDataToList()
{
menutItemTypeAndNameDic = new Dictionary<int, string>();
menutItemTypeAndNameDic.Add(0, StrDictionary.GetClientDictionaryString("#{1977}"));//特殊类型(总览)
foreach (var title in TableManager.GetTitleData().Values)
{
if(!menutItemTypeAndNameDic.ContainsKey(title.TitileClass))
{
menutItemTypeAndNameDic.Add(title.TitileClass, title.TitleName);
Debug.LogError(title.TitleName+ " 菜單名字");
}
}
}
void AddTypeToList()
{
AddAllTitleDataToList(); //读取全部的配置
//根据大类创建子item
foreach(var title in menutItemTypeAndNameDic)
{
PushMenuItem(title.Key);
}
}
/// <summary>
/// 清空
/// </summary>
public void ClearAllPrefab()
{
for (int index = 0; index < menuItemList.Count; index++)
{
GameObject.Destroy(menuItemList[index].gameObject);
}
for(int index = 0; index < subItemList.Count; index++)
{
GameObject.Destroy(subItemList[index].gameObject);
}
menuItemList.Clear();
subItemList.Clear();
}
private List<GameObject> menuItemList = new List<GameObject>();
private List<GameObject> subItemList = new List<GameObject>();
/// <summary>
/// 子类列表
/// key所属菜单
/// </summary>
private Dictionary<int, List<GameObject>> subItemObjList = new Dictionary<int, List<GameObject>>();
void PushMenuItem(int type)
{
GameObject menuItemPrefab = GameObject.Instantiate(res_menuItem);//初始化菜单按钮
//设置缩放比位置
menuItemPrefab.transform.SetParent(prefabParent);
menuItemPrefab.transform.localPosition = Vector3.zero;
menuItemPrefab.transform.localScale = Vector3.one;
menuItemPrefab.transform.localRotation = Quaternion.Euler(Vector3.zero);
menuItemList.Add(menuItemPrefab);
int CurTypeClassId = type;//菜单类型
menuItemPrefab.GetComponent<TitleMenuItem>().InitMenuItem(type, GetTypeName(type));//获取菜单名
//设置Toggle父节点
menuItemPrefab.GetComponentInChildren<Toggle> ().group = menuItemToggleGroup; //实现点击高亮
menuItemPrefab.AddComponent<ToggleGroup>(); //添加ToggleGroup组件
var subItemToggleGroup = menuItemPrefab.GetComponent<ToggleGroup>();
//控制选中状态
if(menuToggleDic.ContainsKey(CurTypeClassId))
{
menuToggleDic[CurTypeClassId] = menuItemPrefab.GetComponentInChildren< Toggle > ();
}else
{
menuToggleDic.Add(CurTypeClassId, menuItemPrefab.GetComponentInChildren<Toggle>());
}
//创建子Item
foreach (var titleInfo in TableManager.GetTitleData().Values)
{
if (titleInfo.TitileClass == CurTypeClassId) //属于此Class的子类共22个子类
{
GameObject subItemPrefab = GameObject.Instantiate(res_titleNameItem);//初始化属于该菜单的子类菜单
//设置缩放比
subItemPrefab.transform.SetParent(prefabParent);
subItemPrefab.transform.localPosition = Vector3.zero;
subItemPrefab.transform.localScale = Vector3.one;
subItemPrefab.transform.localRotation = Quaternion.Euler(Vector3.zero);
subItemList.Add(subItemPrefab);
//设置子item的ToggleGroup
subItemPrefab.GetComponentInChildren<Toggle>().group = subItemToggleGroup;
//初始化信息(子类信息)
subItemPrefab.GetComponent<TitleNameItem>().InitTitleNmaeItem(titleInfo.Name, CurTypeClassId, titleInfo.Id, IsOwnTitle(titleInfo.Id));
//按类型存起来(所有子类)
if(subItemObjList.ContainsKey(CurTypeClassId))
{
subItemObjList[CurTypeClassId].Add(subItemPrefab);
}else
{
List<GameObject> objList = new List<GameObject>();
objList.Add(subItemPrefab);
subItemObjList.Add(CurTypeClassId, objList);
}
#region
if (titleInfo.TitileClass == 8)
{
}
if (titleInfo.TitileClass == 10)
{
}
if (titleInfo.TitileClass == 5)
{
}
if (titleInfo.TitileClass == 4)
{
}
if (titleInfo.TitileClass == 2)
{
}
if (titleInfo.TitileClass == 7)
{
}
#endregion
//隐藏所有子类
subItemPrefab.gameObject.SetActive(false);
if(subItemToggleDic.ContainsKey(CurTypeClassId))
{
subItemToggleDic[CurTypeClassId].Add(subItemPrefab.GetComponentInChildren<Toggle>());
}else
{
List<Toggle> subList = new List<Toggle>();
subList.Add(subItemPrefab.GetComponentInChildren<Toggle>());
subItemToggleDic.Add(CurTypeClassId, subList);
}
}
}
ShowDefaultFirst();
}
public void ClearSubItemList()
{
for(int index = 0; index < subItemList.Count; index++)
{
GameObject.Destroy(subItemList[index].gameObject);
}
subItemList.Clear();
}
//后期添加类型或者修改表的话只用在这里添加对应的大类型
string GetTypeName(int type)
{
if(menutItemTypeAndNameDic.ContainsKey(type))
{
return menutItemTypeAndNameDic[type];
}else
{
return "";
}
}
public int curSelectedTileNameId = -1; //当前佩戴的称谓ID
/// <summary>
/// 点击菜单
/// </summary>
/// <param name="classId"></param>
public void OnMenuItemClick(int classId)
{
if(classId == 0)
{
_TotalPropPanel.gameObject.SetActive(true);
_DescPanel.SetActive(false);
return;
}
_TotalPropPanel.gameObject.SetActive(false);
_DescPanel.SetActive(true);
if (CurSelectedClassId == classId) //关闭
{
classId = -1;
foreach (var subitemList in subItemObjList)
{
if (subitemList.Key == classId) //需要显示
{
for (int index = 0; index < subitemList.Value.Count; index++)
{
subitemList.Value[index].SetActive(true);
subitemList.Value[index].GetComponent<TitleNameItem>().RefreshSubItemState();
}
}
else
{
for (int index = 0; index < subitemList.Value.Count; index++)
{
subitemList.Value[index].SetActive(false);
}
}
}
CurSelectedClassId = classId;
}
else
{
foreach (var subitemList in subItemObjList)
{
if (subitemList.Key == classId) //需要显示
{
for (int index = 0; index < subitemList.Value.Count; index++)
{
subitemList.Value[index].SetActive(true);
}
}
else
{
for (int index = 0; index < subitemList.Value.Count; index++)
{
subitemList.Value[index].SetActive(false);
}
}
}
if (subItemToggleDic.ContainsKey(classId))
{
subItemToggleDic[classId][0].isOn = true; //第一个Menu的子Item设置为选中状态
OnSubItemClick(subItemToggleDic[classId][0].GetComponentInParent<TitleNameItem>().titleId);//获得点击菜单的id
}
CurSelectedClassId = classId;
}
}
public void OnSubItemClick(int titleId)
{
ShowTiltNameDescPanel(titleId);
}
public void ShowTiltNameDescPanel(int titleId)
{
curSelectedTileNameId = titleId;
Tab_TitleData titleData = TableManager.GetTitleDataByID(titleId, 0);
if (titleData != null)
{
titleNameText.text = titleData.Name;
titleNameDescText.text = titleData.InvestitiveDescription;
titlePropDescText.text = titleData.AttrDesc;
gainWayDescText.text = titleData.GetDesc;
if (string.IsNullOrEmpty(titleData.NameImage))
{
titleNameGO.SetActive(true);
titleNameImage.gameObject.SetActive(false);
//if (titleEffect != null)
//{
// GameObject.Destroy(titleEffect);
//}
}
else
{
titleNameGO.SetActive(false);
titleNameImage.gameObject.SetActive(true);
if (titleEffect != null)
{
GameObject.DestroyImmediate(titleEffect);
}
//LoadAssetBundle.Instance.SetImageSprite(titleNameImage, titleData.NameImage, delegate (bool isSucess, GameObject obj) { titleNameImage.SetNativeSize(); });
LoadAssetBundle.Instance.SetImageSprite(titleNameImage, titleData.NameImage, delegate (bool isSucess, GameObject obj)
{
titleNameImage.SetNativeSize();
//var effectData = TableManager.GetEffectByID(titleData.EffectId, 0);
//if (effectData != null)
// LoadAssetBundle.Instance.LoadGameObject(LoadAssetBundle.BUNDLE_PATH_EFFECT, effectData.Path, (string assetName, GameObject resObj, Hashtable hashParam) =>
// {
// if (resObj != null)
// {
// titleEffect = GameObject.Instantiate(resObj);
// titleEffect.transform.SetParent(titleNameImage.gameObject.transform);
// titleEffect.AddComponent<UIParticleSystem>();
// titleEffect.transform.localScale = Vector3.one;
// titleEffect.transform.localPosition = Vector3.zero;
// titleEffect.transform.localRotation = Quaternion.Euler(Vector3.zero);
// }
// }, null);
});
}
}
markDesc.text = (titleData.OwnerTime == -1 ? StrDictionary.GetClientDictionaryString("#{46205}") : StrDictionary.GetClientDictionaryString("#{46206}")); //"永久称号" : "限时称号");
//是否拥有当前称号
if(IsOwnTitle(titleId))
{
limitDesc.gameObject.SetActive(titleData.OwnerTime == -1 ? false : true);
if (limitDesc.gameObject.activeInHierarchy)
{
for (int index = 0; index < m_AllOwnTileNameList.Count; index++)
{
if (m_AllOwnTileNameList[index].TitleID == titleId)
{
if (m_AllOwnTileNameList[index].ValidTime <= 0)
{
limitDesc.gameObject.SetActive(false);
}
limitDesc.text = GetRemainTimeString(m_AllOwnTileNameList[index].ValidTime);
break;
}
}
}
}else
{
limitDesc.gameObject.SetActive(false);
}
ShowMarkIcon();
}
public bool IsOwnTitle(int titleId)
{
if(GameManager.gameManager.PlayerDataPool.TitleInvestitive.IsGainTitle(titleId))
{
return true;
}
return false;
}
private bool hasAdorned = false;
private bool hasActived = false;
public void ShowMarkIcon()
{
//佩戴 取消佩戴
if(GameManager.gameManager.PlayerDataPool.TitleInvestitive.IsGainTitle(curSelectedTileNameId))
{
if (GameManager.gameManager.PlayerDataPool.TitleInvestitive.GetCurrentTitleID() == curSelectedTileNameId)
{
hasAdorned = true;
adornActBtn.gameObject.SetActive(false);
adornCancelBtn.gameObject.SetActive(true);
}
else
{
hasAdorned = false;
adornActBtn.gameObject.SetActive(true);
adornCancelBtn.gameObject.SetActive(false);
}
}
else
{
adornActBtn.gameObject.SetActive(false);
adornCancelBtn.gameObject.SetActive(false);
}
// 激活 取消激活
//if (GameManager.gameManager.PlayerDataPool.TitleInvestitive.IsGainTitle(curSelectedTileNameId))
//{
// if (GameManager.gameManager.PlayerDataPool.TitleInvestitive.IsTitleActived(curSelectedTileNameId))
// {
// hasActived = true;
// activiteCancelBtn.gameObject.SetActive(true);
// activiteActBtn.gameObject.SetActive(false);
// }
// else
// {
// hasActived = false;
// activiteCancelBtn.gameObject.SetActive(false);
// activiteActBtn.gameObject.SetActive(true);
// }
//}
//else
{
activiteCancelBtn.gameObject.SetActive(false);
activiteActBtn.gameObject.SetActive(false);
}
for (int index = 0; index < subItemList.Count; index++)
{
if(subItemList[index].gameObject.activeInHierarchy)
{
subItemList[index].gameObject.GetComponent<TitleNameItem>().RefreshSubItemState();
}
}
}
public void OnCloseBtnClick()
{
if(RoleViewLogic.Instance() && RoleViewLogic.Instance().gameObject.activeInHierarchy)
{
if(RoleViewLogic.Instance().curSelectPage == 0)
{
RoleViewLogic.Instance().ReqSimpleAttr();
}
else
{
RoleViewLogic.Instance().ReqDetailAttr();
}
}
UIManager.CloseUI(UIInfo.TitleView);
}
public void OnActiviteBtnClick()
{
if (!hasActived)
{
CG_ACTIVE_TITLE ask = (CG_ACTIVE_TITLE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ACTIVE_TITLE);
ask.SetOptionType(2);
ask.SetTitleId(curSelectedTileNameId);
ask.SendPacket();
}else
{
CG_ACTIVE_TITLE ask = (CG_ACTIVE_TITLE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ACTIVE_TITLE);
ask.SetOptionType(2);
ask.SetTitleId(0);
ask.SendPacket();
}
}
public void OnAdornBtnClick()
{
if (!hasAdorned)
{
CG_ACTIVE_TITLE ask = (CG_ACTIVE_TITLE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ACTIVE_TITLE);
ask.SetOptionType(1);
ask.SetTitleId(curSelectedTileNameId);
ask.SendPacket();
}else
{
CG_ACTIVE_TITLE ask = (CG_ACTIVE_TITLE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ACTIVE_TITLE);
ask.SetOptionType(1);
ask.SetTitleId(0);
ask.SendPacket();
};
}
public string GetRemainTimeString(int remainTime)
{
System.DateTime startTime = new System.DateTime(1970, 1, 1).ToLocalTime();
DateTime endTime = startTime.AddSeconds(GlobalData.ServerAnsiTime + remainTime);
return StrDictionary.GetClientDictionaryString("#{46204}", endTime.Year, endTime.Month, endTime.Day, endTime.Hour, endTime.Minute);
//string.Format("注:有限期至{0}年{1}月{2}日{3}点{4}分", endTime.Year, endTime.Month, endTime.Day, endTime.Hour, endTime.Minute);
}
}