using System; using System.Collections.Generic; using System.Runtime.Remoting.Lifetime; using Games.GlobeDefine; using Games.LogicObj; using Games.SkillModle; using GCGame; using GCGame.Table; using Module.Log; using UnityEngine; using UnityEngine.UI; using System.Collections; using Games.MountModule; using Games.Fellow; using Games.Events; public class PetMainWnd : MonoBehaviour { #region static public static void ShowPetWin(string pageStr, string subPageStr) { int page = int.Parse(pageStr); int subPage = int.Parse(subPageStr); UIManager.ShowUI(UIInfo.PetMainWndPath, delegate (bool bSuccess, object param) { if (bSuccess && PetMainWnd.Instance != null) { PetMainWnd.Instance.ShowPage(page, PetMainWnd.CurrentSelectFellowId); if (page == 4) { if (subPage == 0) { var normalBtn = PetMainWnd.Instance.m_petInfoWnd.transform.Find("Btns/Common"); if (normalBtn == null) return; var toggle = normalBtn.GetComponentInChildren<Toggle>(); if (toggle == null) return; toggle.isOn = true; } else if (subPage == 1) { var godBtn = PetMainWnd.Instance.m_petInfoWnd.transform.Find("Btns/God"); if (godBtn == null) return; var toggle = godBtn.GetComponentInChildren<Toggle>(); if (toggle == null) return; toggle.isOn = true; } } } }); } #endregion public static PetMainWnd Instance; public UIContainerSelect m_Container; public PetMainAttrWnd m_petAttrWnd; //属性界面管理类 public PetXiuWuWnd m_petXiuWuWnd; //洗炼界面管理类 public PetSkillWnd m_petSkillWnd; //技能界面管理类 public PetClearOperaWnd m_petClearWnd; //修悟界面管理类 public PetsInfoWnd m_petInfoWnd; //宠物图鉴管理类 public PetGrowWnd m_petGrowWnd; //宠物成长 public UITagPanel _TagPanel; public AddPetFromBag PetsInBagWnd; //背包中的宠物物品 //弹出框 public GameObject PopWnd; public GameObject AddPetLimitWnd; public GameObject TipObj; public GameObject PetInfoObj; public UICameraTexture ModelTexture; //模型展示的RenderTexture //public Image PetQuilityIcon; public Image GodPetSign; public Text petName; //宠物名称 public UIImgText totlePower; //总战力 public GameObject SkillLimit; public GameObject XiuWuLimit; public GameObject GrowLimit; public GameObject SkillToggle; public GameObject XiuWuToggle; public GameObject GrowToggle; public static ulong CurrentSelectFellowId = GlobeVar.INVALID_GUID; public void Awake() { Instance = this; Hashtable calbackMoveparam1 = new Hashtable(); calbackMoveparam1["name"] = "UpdateFelllow"; MessageEventCallBack fun1 = UpdateFelllow; calbackMoveparam1.Add("callFun", fun1); Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.UpdatePetInfo, calbackMoveparam1); Hashtable calbackMoveparam2 = new Hashtable(); calbackMoveparam2["name"] = "AddHasFellowMax"; MessageEventCallBack fun2 = AddHasFellowMax; calbackMoveparam2.Add("callFun", fun2); Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.AddHasFellowMax, calbackMoveparam2); Hashtable calbackMoveparam3 = new Hashtable(); calbackMoveparam3["name"] = "AddNewFellow"; MessageEventCallBack fun3 = AddNewFellow; calbackMoveparam3.Add("callFun", fun3); Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.AddNewFellow, calbackMoveparam3); Hashtable calbackMoveparam4 = new Hashtable(); calbackMoveparam4["name"] = "LetPetFreeSuccess"; MessageEventCallBack fun4 = LetPetFreeSuccess; calbackMoveparam4.Add("callFun", fun4); Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.LetPetFree, calbackMoveparam4); Hashtable calbackMoveparam5 = new Hashtable(); calbackMoveparam5["name"] = "SelectFellowSuccess"; MessageEventCallBack fun5 = SelectFellowSuccess; calbackMoveparam5.Add("callFun", fun5); Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.SelectFellow, calbackMoveparam5); Games.Events.EventDispatcher.Instance.Add(Games.Events.EventId.UPDATA_PET_CALLFIGHTINFO, UpdateCallBtnList); Hashtable calbackMoveparam6 = new Hashtable(); calbackMoveparam6["name"] = "PetMainBags"; MessageEventCallBack fun6 = PayFresh; calbackMoveparam6.Add("callFun", fun6); Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.FRESHSAMEUSETIP, calbackMoveparam6); EventDispatcher.Instance.Add(Games.Events.EventId.UpFellowSkillLevel, UpSkillLevelSuccess); ModelTexture.isPreview = true; } public void PayFresh(Hashtable addparam, Hashtable sendparam) { FreshAddPetItem(); if (m_petInfoWnd.gameObject.activeInHierarchy) m_petInfoWnd.OnItemFresh(); } public void UpSkillLevelSuccess(object param) { Fellow pet = GameManager.gameManager.PlayerDataPool.FellowContainer.GetFellowByGuid(PetMainWnd.CurrentSelectFellowId); if (pet == null) return; totlePower.text = pet.CombatValue.ToString(); } public void OnDestroy() { PetMainWnd.CurrentSelectFellowId = GlobeVar.INVALID_GUID; Instance = null; Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.UpdatePetInfo, "UpdateFelllow"); Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.AddHasFellowMax, "AddHasFellowMax"); Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.AddNewFellow, "AddNewFellow"); Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.LetPetFree, "LetPetFreeSuccess"); Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.SelectFellow, "SelectFellowSuccess"); Games.Events.EventDispatcher.Instance.Remove(Games.Events.EventId.UPDATA_PET_CALLFIGHTINFO, UpdateCallBtnList); Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.FRESHSAMEUSETIP, "PetMainBags"); Games.Events.EventDispatcher.Instance.Remove(Games.Events.EventId.UpFellowSkillLevel, UpSkillLevelSuccess); } void OnEnable() { UIManager.ShowUI(UIInfo.MoneyInfoPanel); } private void OnDisable() { UIManager.CloseUI(UIInfo.MoneyInfoPanel); showTagPageWait = -1; showPageWait = -1; } private bool m_CurrClearState = true; public void ClearInfo(bool state) { //PetQuilityIcon.gameObject.SetActive(state); if(state==false) { ModelTexture.gameObject.SetActive(false); ModelTexture.DestroyObj(); petName.text = ""; } m_petAttrWnd.ClearInfo(state); m_petSkillWnd.ClearInfo(state); m_petXiuWuWnd.ClearInfo(state); m_petGrowWnd.ClearInfo(state); m_CurrClearState = state; SkillLimit.SetActive(state==false); SkillToggle.SetActive(state); XiuWuLimit.SetActive(state == false); XiuWuToggle.SetActive(state); CheckGrowLimit(); totlePower.text = ""; } public void UpdateCallBtnList(object obj) { if(m_Container!=null) { m_Container.RefreshItems(); } } public void LetPetFreeSuccess(Hashtable addparam, Hashtable sendparam) { Fellow pet = GameManager.gameManager.PlayerDataPool.FellowContainer.GetFellowByGuid(CurrentSelectFellowId); if (pet != null) { } PetMainWnd.CurrentSelectFellowId = GlobeVar.INVALID_GUID; InitPetList(); } public void AddNewFellow(Hashtable addparam, Hashtable sendparam) { InitPetList(); } public void AddHasFellowMax(Hashtable addparam, Hashtable sendparam) { InitPetList(); } public void UpdateFelllow(Hashtable addparam, Hashtable sendparam) { if (sendparam == null || sendparam.ContainsKey("guid") == false) return; m_Container.RefreshItems(sendparam); Fellow pet = GameManager.gameManager.PlayerDataPool.FellowContainer.GetFellowByGuid(CurrentSelectFellowId); if (pet == null) return; CheckLimitOpen(pet); petName.text = string.Format("Lv.{0} {1}", pet.Level, pet.Name); totlePower.text = pet.CombatValue.ToString(); if (m_petClearWnd != null && m_petClearWnd.gameObject.activeInHierarchy) m_petClearWnd.SetDate(pet); if (m_petGrowWnd != null && m_petGrowWnd.gameObject.activeInHierarchy) m_petGrowWnd.OnSelectPet(); if (m_petAttrWnd != null && m_petAttrWnd.gameObject.activeInHierarchy) m_petAttrWnd.FellowAttachInfo(); _TagPanel.ShowPage(openIndex); } public int openIndex = -1; public void ShowPage(int page,ulong selectId) { openIndex = page; showTagPageWait = 4; Debug.Log("ShowPage:" + page); if (selectId != Games.GlobeDefine.GlobeVar.INVALID_GUID) { PetMainWnd.CurrentSelectFellowId = selectId; } } public void OnClickPetItem(object param) { if(param==null) { return; } Fellow pet = param as Fellow; if (pet == null) return; if (pet.Guid == CurrentSelectFellowId && CurrentSelectFellowId != GlobeVar.INVALID_GUID) return; // 若宠物合法,通知服务器做出相应改变 if (pet.IsValid() && pet.Guid != GlobeVar.INVALID_GUID) { CG_SELECT_CUR_FELLOW send = (CG_SELECT_CUR_FELLOW)PacketDistributed.CreatePacket(MessageID.PACKET_CG_SELECT_CUR_FELLOW); send.SetFellowGuid(pet.Guid); send.SendPacket(); return; } // -1表示该槽尚未装备宠物,开启小界面,通知玩家选择背包中的宠物使用召唤 if(pet.DataId == -1) { if (PetsInBagWnd != null && PetsInBagWnd.gameObject.activeSelf == false) { PetsInBagWnd.gameObject.SetActive(true); Utils.SetObjInputPosition(PetsInBagWnd.m_TransPosition); } return; } // 用于提升槽上限 if(pet.DataId == -2) { OnClick_AddPetLimitWnd(); } } public void SelectFellowSuccess(Hashtable addparam, Hashtable sendparam) { Debug.Log("SelectFellowSuccess:"); if (sendparam == null) return; if (sendparam.ContainsKey("guid") == false) { return; } ulong uid = (ulong)sendparam["guid"]; int attackPower = (int)sendparam["AttackPower"]; Fellow pet = GameManager.gameManager.PlayerDataPool.FellowContainer.GetFellowByGuid(uid); if (pet == null) return; petName.text = string.Format("Lv.{0} {1}",pet.Level, pet.Name); totlePower.text = pet.CombatValue.ToString(); pet.CombatValue = attackPower; CurrentSelectFellowId = pet.Guid; List<Fellow> selects = new List<Fellow>(); selects.Add(pet); m_Container.SetSelect(selects); int pageOk = 0; CheckLimitOpen(pet); if (openIndex == 2) { int skillLevel = SystemParam.GetSystemParam_INT(35); if (pet.Level < skillLevel) { _TagPanel.ShowPage(0); openIndex = 0; showPageWait = 1; pageOk = 1; SkillLimitClick(); return; } } else if (openIndex == 5) { Debug.Log("select pet CurrentSelectFellowId:" + CurrentSelectFellowId); pageOk = 1; TagShowPage(5); } else if (m_lastShowPage == 3) { int XWLevel = SystemParam.GetSystemParam_INT(36); if (pet.Level < XWLevel) { _TagPanel.ShowPage(0); openIndex = 0; showPageWait = 1; pageOk = 1; XiuWuLimitClick(); return; } } if(pageOk ==0 ) { _TagPanel.ShowPage(m_lastShowPage); openIndex = m_lastShowPage; showPageWait = 1; } } void CheckGrowLimit() { int GrowLevel = SystemParam.GetSystemParam_INT(54); GrowLimit.SetActive(GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level < GrowLevel); GrowToggle.SetActive(GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level >= GrowLevel); } void CheckLimitOpen(Fellow pet) { int skillLevel = SystemParam.GetSystemParam_INT(35); SkillLimit.SetActive(pet!=null && pet.Level < skillLevel); SkillToggle.SetActive(pet == null || pet.Level >= skillLevel); int XWLevel = SystemParam.GetSystemParam_INT(36); XiuWuLimit.SetActive(pet!=null && pet.Level < XWLevel); XiuWuToggle.SetActive(pet == null || pet.Level >= XWLevel); } void ShowModelTexture(bool state) { if (state == false) { ModelTexture.gameObject.SetActive(false); return; } Fellow pet = GameManager.gameManager.PlayerDataPool.FellowContainer.GetFellowByGuid(CurrentSelectFellowId); if (pet == null) { ModelTexture.gameObject.SetActive(false); return; } int dataID = -1; if (pet.Called) dataID = GameManager.gameManager.PlayerDataPool.FellowBookData.FightPetBook; if (pet.Helped) dataID = GameManager.gameManager.PlayerDataPool.FellowBookData.HelpFightPetBook; var modelTab = pet.CharModel(dataID); if (modelTab != null) { ModelTexture.InitModelPath(modelTab.ResPath,modelTab, LoadAssetBundle.BUNDLE_PATH_PET, true,delegate() { ShowModel(); }); } if (state) { pet.SetGodPetSign(GodPetSign); } } private void ShowModel() { ModelTexture.gameObject.SetActive(true); } public void AddCanAddPetItem() { InitPetList(); } //显示拥有的宠物 public void InitPetList() { List<Fellow> selects = new List<Fellow>(); List<Fellow> showList = new List<Fellow>(GameManager.gameManager.PlayerDataPool.FellowContainer.ContainerSize); Fellow pet = GameManager.gameManager.PlayerDataPool.FellowContainer.GetFellowByGuid(CurrentSelectFellowId); if (pet != null && pet.IsValid()) { selects.Add(pet); } showList = FellowTool.FellowSort(GameManager.gameManager.PlayerDataPool.FellowContainer); if (showList == null) { if(m_CurrClearState == true) { ClearInfo(false); } return; } if(GameManager.gameManager.PlayerDataPool.FellowContainer.GetFellowCount() <= 0) { if (m_CurrClearState == true) { ClearInfo(false); } } else { if (m_CurrClearState == false) { ClearInfo(true); } } if(selects.Count <= 0 && showList.Count > 0) { if(showList[0].IsValid()) selects.Add(showList[0]); } // 在最后添加一个可解锁宠物上限提示 Fellow fellow1 = new Fellow(); fellow1.Guid = GlobeVar.INVALID_GUID; fellow1.DataId = -2; showList.Add(fellow1); m_Container.InitSelectContent(showList, selects, OnClickPetItem, null); TipObj.SetActive(showList.Count > 6); if (PetsInBagWnd.gameObject.activeSelf) { PetsInBagWnd.AddNewFellow(); } } public void HandBookInfo(RespHandbookFellowList info) { m_petInfoWnd.RespHandBookInfos(); ShowModelTexture(ModelTexture.gameObject.activeSelf); } public void OnClick_AddPopWnd_Cancle() { if (PopWnd != null) { PopWnd.SetActive(false); if (AddPetLimitWnd != null) { AddPetLimitWnd.SetActive(false); } } } //增加拥有宠物上限 public void OnClick_AddPopWnd_UnLock() { CG_OPEN_FELLOW_PACK send = (CG_OPEN_FELLOW_PACK)PacketDistributed.CreatePacket(MessageID.PACKET_CG_OPEN_FELLOW_PACK); send.Guid = Singleton<ObjManager>.Instance.MainPlayer.GUID; send.SendPacket(); OnClick_AddPopWnd_Cancle(); } public void FreshAddPetItem() { if(AddPetLimitWnd.activeInHierarchy) { Tab_AddFellowCarryNum cost = TableManager.GetAddFellowCarryNumByID(GameManager.gameManager.PlayerDataPool.FellowContainer.ContainerSize + 1, 0); if (cost == null) return; if (cost.DefaultOpen == 0 && cost.ConsumeType == 3) { Tab_CommonItem item = TableManager.GetCommonItemByID(cost.ConsumeSubType, 0); Transform IconText = AddPetLimitWnd.transform.Find("icon/Text"); if (IconText != null) { Text strText = IconText.gameObject.GetComponent<Text>(); if (strText != null) { int hasCount = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(cost.ConsumeSubType); if (hasCount < cost.ConsumeNum) { strText.text = string.Format("<color=#ff0000ff>{0}</color>/{1}", hasCount, cost.ConsumeNum); } else { strText.text = string.Format("<color=#00ff00ff>{0}</color>/{1}", hasCount, cost.ConsumeNum); } } } Transform tipText = AddPetLimitWnd.transform.Find("tip"); if (tipText != null) { Text strText = tipText.gameObject.GetComponent<Text>(); if (strText != null) { int hasCount = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(cost.ConsumeSubType); if (hasCount < cost.ConsumeNum) { strText.text = StrDictionary.GetClientDictionaryString("#{20131}", item.Name, "ff0000ff", hasCount, cost.ConsumeNum); } else { strText.text = StrDictionary.GetClientDictionaryString("#{20131}", item.Name, "00ff00ff", hasCount, cost.ConsumeNum); } } } Transform GetBtn = AddPetLimitWnd.transform.Find("icon/Get"); if (GetBtn != null) { int hasCount = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(cost.ConsumeSubType); if (hasCount < cost.ConsumeNum) { GetBtn.gameObject.SetActive(true); Button btn = GetBtn.GetComponent<Button>(); if (btn != null) { btn.onClick.AddListener(delegate () { ItemGetPathPopRoot.Show(item.Id, btn.transform.position); }); } } else { GetBtn.gameObject.SetActive(false); } } } } } //添加宠物上限 public void OnClick_AddPetLimitWnd() { if(PopWnd!=null) { if(AddPetLimitWnd != null) { Tab_AddFellowCarryNum cost = TableManager.GetAddFellowCarryNumByID(GameManager.gameManager.PlayerDataPool.FellowContainer.ContainerSize+1, 0); if(cost!=null) { if(cost.DefaultOpen==0 && cost.ConsumeType == 3) { Tab_CommonItem item = TableManager.GetCommonItemByID(cost.ConsumeSubType, 0); if (item != null) { Transform Icon = AddPetLimitWnd.transform.Find("icon"); if (Icon != null) { Image iconImage = Icon.gameObject.GetComponent<Image>(); if (iconImage != null) { LoadAssetBundle.Instance.SetImageSprite(iconImage, item.Icon); if (item.QualityEffect > 0) { CommonItemContainerItem.ShowQualityEffect(true, item.QualityEffect, iconImage.transform); } else { CommonItemContainerItem.ShowQualityEffect(false, item.QualityEffect, iconImage.transform); } } } Transform Quility = AddPetLimitWnd.transform.Find("Quility"); if (Quility != null) { Image QuilityImage = Quility.gameObject.GetComponent<Image>(); if (QuilityImage != null) { LoadAssetBundle.Instance.SetImageSprite(QuilityImage, Utils.GetItemQualityFrame(item)); } } Transform IconText = AddPetLimitWnd.transform.Find("icon/Text"); if (IconText != null) { Text strText = IconText.gameObject.GetComponent<Text>(); if (strText != null) { int hasCount = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(cost.ConsumeSubType); if (hasCount < cost.ConsumeNum) { strText.text = string.Format("<color=#ff0000ff>{0}</color>/{1}", hasCount, cost.ConsumeNum); } else { strText.text = string.Format("<color=#00ff00ff>{0}</color>/{1}", hasCount, cost.ConsumeNum); } } } Transform GetBtn = AddPetLimitWnd.transform.Find("icon/Get"); if (GetBtn != null) { int hasCount = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(cost.ConsumeSubType); if (hasCount < cost.ConsumeNum) { GetBtn.gameObject.SetActive(true); Button btn = GetBtn.GetComponent<Button>(); if(btn!=null) { btn.onClick.AddListener(delegate () { ItemTooltipsLogic.ShowItemTooltip(item.Id, ItemTooltipsLogic.ShowType.GetPath, GetBtn.position); }); } } else { GetBtn.gameObject.SetActive(false); } } Transform tipText = AddPetLimitWnd.transform.Find("tip"); if (tipText != null) { Text strText = tipText.gameObject.GetComponent<Text>(); if (strText != null) { int hasCount = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(cost.ConsumeSubType); if (hasCount < cost.ConsumeNum) { strText.text = StrDictionary.GetClientDictionaryString("#{20131}", item.Name,"82439cff", hasCount, cost.ConsumeNum); } else { strText.text = StrDictionary.GetClientDictionaryString("#{20131}", item.Name,"3c4c5cff", hasCount, cost.ConsumeNum); } } } PopWnd.SetActive(true); AddPetLimitWnd.SetActive(true); } } } else { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{1810}")); } } } } public void TagShowPageMain(int page) { if (showTagPageWait > 0) return; openIndex = page; showPageWait = 1; } int showTagPageWait = -1; int showPageWait = -1; private void Update() { if (showPageWait > 0) { showPageWait--; if (showPageWait == 0) { showPageWait = -1; TagShowPage(openIndex); } } if (showTagPageWait > 0) { showTagPageWait--; if(showTagPageWait==2) { InitPetList(); } if (showTagPageWait == 0) { showTagPageWait = -1; _TagPanel.ShowPage(openIndex); } } } int m_lastShowPage = 0; public void TagShowPage(int page, bool showIs = false) { Debug.Log("TagShowPage:" + page); if (page == 0) { m_petAttrWnd.OnSelectPet(); m_Container.gameObject.SetActive(true); PetInfoObj.SetActive(true); ShowModelTexture(true); } if (page == 1) { m_petClearWnd.OnSelectPet(); m_Container.gameObject.SetActive(true); PetInfoObj.SetActive(false); ShowModelTexture(false); } if (page == 2) { m_petSkillWnd.OnSelectPet(); m_Container.gameObject.SetActive(true); PetInfoObj.SetActive(false); ShowModelTexture(false); } if (page == 3) { m_Container.gameObject.SetActive(true); m_petXiuWuWnd.OnSelectPet(); PetInfoObj.SetActive(true); ShowModelTexture(true); } if (page == 4) { m_petInfoWnd.OnSelectPet(); PetInfoObj.SetActive(false); ShowModelTexture(false); m_Container.gameObject.SetActive(false); } if (page == 5) { m_petGrowWnd.OnSelectPet(); m_Container.gameObject.SetActive(true); PetInfoObj.SetActive(false); } m_lastShowPage = page; openIndex = page; } public void ChangeToggleState(int toggleIndex) { _TagPanel.ShowPage(toggleIndex); } public void OnClick_OPenPetsWnd() { UIManager.ShowUI(UIInfo.PetsInfoWndPath); } public void SkillLimitClick() { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{20145}", SystemParam.GetSystemParam_INT(35))); } public void XiuWuLimitClick() { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{20146}", SystemParam.GetSystemParam_INT(36))); } public void GrowLimitClick() { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{20179}", SystemParam.GetSystemParam_INT(54))); } public void OnClick_Close() { UIManager.CloseUI(UIInfo.PetMainWndPath); openIndex = -1; } }