/// <summary> /// 生成宝石数据UI /// </summary> private void BuildGemDataUI() { m_emActiveGemType = GameCmd.GemType.GemType_None; if (null != mSecondsTabCreator) { //1、获取补一个不为空宝石类型 GameCmd.GemType nextActiveGemType = GameCmd.GemType.GemType_None; List <int> secondTabDatas = new List <int>(); UISecondTabCreatorBase.SecondsTabData data = null; GemInlayUpdateData updateData = null; for (int i = 0; i < mlstCanInlayGemType.Count; i++) { updateData = GetGemInlayUpdateData(mlstCanInlayGemType[i]); if (null == updateData) { continue; } secondTabDatas.Add(updateData.Count); if (updateData.Count != 0 && nextActiveGemType == GameCmd.GemType.GemType_None) { nextActiveGemType = mlstCanInlayGemType[i]; } } mSecondsTabCreator.CreateGrids(secondTabDatas); //2、展开当前活跃宝石列表,并生成UI SetActiveGemType(nextActiveGemType); } }
/// <summary> /// 卸下 /// </summary> /// <param name="index"></param> private void DoUnload(EquipManager.EquipGridIndexType index) { uint inlayBaseId = 0; if (!emgr.IsUnlockEquipGridIndex(index)) { TipsManager.Instance.ShowLocalFormatTips(LocalTextType.Gemstone_Commond_3, emgr.GetEquipGridUnlockLevel(index)); } else if (emgr.TryGetEquipGridInlayGem(m_emSelectInlayPos, index, out inlayBaseId)) { //卸下 emgr.GemUnload(m_emSelectInlayPos, index); } else { GemInlayUpdateData data = GetGemInlayUpdateData(); uint canInlayBaseId = 0; if (null != data && data.TryGetCanInlayGem(out canInlayBaseId)) { DoInlay(canInlayBaseId, index); } else { TipsManager.Instance.ShowLocalFormatTips(LocalTextType.Gemstone_Commond_4); } } }
public Dictionary <GameCmd.GemType, GemInlayUpdateData> StructGemInlayDatas(GameCmd.EquipPos pos) { //可镶嵌数据 if (null == mdicCanInlayDatas) { mdicCanInlayDatas = new Dictionary <GameCmd.GemType, GemInlayUpdateData>(); } //mdicCanInlayDatas.Clear(); //获取可镶嵌宝石列表 if (null == mlstCanInlayGemType) { mlstCanInlayGemType = new List <GameCmd.GemType>(); } mlstCanInlayGemType.Clear(); mlstCanInlayGemType.AddRange(emgr.GeCanInlaytGemTypeByPos(pos)); if (subTypes.Count == 0) { subTypes.Add((uint)ItemDefine.ItemMaterialSubType.Gem); } if (gemItemList == null) { gemItemList = new List <uint>(); gemItemList.AddRange(imgr.GetItemByType(GameCmd.ItemBaseType.ItemBaseType_Material, subTypes, GameCmd.PACKAGETYPE.PACKAGETYPE_MAIN)); gemQwThisIDsChanged = false; } else { if (gemQwThisIDsChanged) { gemItemList.Clear(); gemItemList.AddRange(imgr.GetItemByType(GameCmd.ItemBaseType.ItemBaseType_Material, subTypes, GameCmd.PACKAGETYPE.PACKAGETYPE_MAIN)); gemQwThisIDsChanged = false; } } GemInlayUpdateData gemInlayUpdateData = null; for (int i = 0; i < mlstCanInlayGemType.Count; i++) { if (mdicCanInlayDatas.ContainsKey(mlstCanInlayGemType[i])) { gemInlayUpdateData = mdicCanInlayDatas[mlstCanInlayGemType[i]]; if (null != gemInlayUpdateData) { if (!gemInlayUpdateData.m_lstGemQwThisIDList.Equals(gemItemList)) { gemInlayUpdateData.StructData(gemItemList); } } } else { gemInlayUpdateData = new GemInlayUpdateData(mlstCanInlayGemType[i]); mdicCanInlayDatas.Add(mlstCanInlayGemType[i], gemInlayUpdateData); } } return(mdicCanInlayDatas); }
/// <summary> /// 镶嵌格子数据刷新回调 /// </summary> /// <param name="grid"></param> /// <param name="index"></param> private void OnUpdateInlayGrid(UIGridBase grid, int index) { if (grid is UICtrTypeGrid) { UICtrTypeGrid ctg = grid as UICtrTypeGrid; if (mlstCanInlayGemType.Count > index) { GameCmd.GemType gemType = mlstCanInlayGemType[index]; GemInlayUpdateData updateData = GetGemInlayUpdateData(gemType); int num = (null != updateData) ? updateData.Count : 0; ctg.SetData(gemType, DataManager.Manager <TextManager>().GetGemNameByType(gemType), num); ctg.SetRedPointStatus(DataManager.Manager <ForgingManager>().HaveGemCanImprove(m_emSelectInlayPos, gemType)); } } else if (grid is UIEquipPosStatusGrid) { UIEquipPosStatusGrid posGrid = grid as UIEquipPosStatusGrid; GameCmd.EquipPos pos = GetEquipPosByIndex(index); bool isInlay = IsPanelMode(ForgingPanelMode.Inlay); posGrid.SetGridViewData(pos, isInlay); posGrid.SetHightLight(pos == m_emSelectInlayPos); if (isInlay) { Gem gem = null; uint inLayGemBaseId = 0; string inlayGemIconName = ""; bool inlay = false; bool unlock = false; for (EquipManager.EquipGridIndexType i = EquipManager.EquipGridIndexType.First; i < EquipManager.EquipGridIndexType.Max; i++) { inlayGemIconName = ""; inlay = false; unlock = false; if (i < 0) { continue; } if (emgr.TryGetEquipGridInlayGem(pos, i, out inLayGemBaseId)) { gem = DataManager.Manager <ItemManager>() .GetTempBaseItemByBaseID <Gem>(inLayGemBaseId, ItemDefine.ItemDataType.Gem); inlayGemIconName = gem.Icon; unlock = true; inlay = true; } else if (emgr.IsUnlockEquipGridIndex(i)) { unlock = true; } posGrid.SetInlayIcon(i, unlock, inlay, inlayGemIconName); } } } }
public bool JudgeEquipPosCanInlay(GameCmd.EquipPos pos, EquipManager.EquipGridIndexType index, GameCmd.GemType gemType) { uint inlayBaseId = 0; int matchNum = 0; if (!emgr.IsUnlockEquipGridIndex(index)) { return(false); } else if (emgr.TryGetEquipGridInlayGem(pos, index, out inlayBaseId)) { Gem InlayItem = DataManager.Manager <ItemManager>().GetTempBaseItemByBaseID <Gem>(inlayBaseId, ItemDefine.ItemDataType.Gem); //镶嵌的宝石小与背包的宝石? StructGemInlayDatas(pos); GemInlayUpdateData updateData = GetGemInlayUpdateData(gemType); if (null != updateData) { updateData.HaveGemCanInlay = false; uint canInlayBaseId = 0; if (null != updateData && updateData.TryGetCanInlayGem(out canInlayBaseId)) { Gem canInlayItem = DataManager.Manager <ItemManager>().GetTempBaseItemByBaseID <Gem>(canInlayBaseId, ItemDefine.ItemDataType.Gem); if (InlayItem != null && canInlayItem != null) { bool higher = canInlayItem.FightPowerNum > InlayItem.FightPowerNum; if (higher) { matchNum++; updateData.HaveGemCanInlay = true; } } } } } else { StructGemInlayDatas(pos); GemInlayUpdateData updateData = GetGemInlayUpdateData(gemType); if (null != updateData) { updateData.HaveGemCanInlay = false; uint canInlayBaseId = 0; if (null != updateData && updateData.TryGetCanInlayGem(out canInlayBaseId)) { matchNum++; updateData.HaveGemCanInlay = true; } } } return(matchNum > 0); }
/// <summary> /// 宝石二级页签数据刷新 /// </summary> /// <param name="gridBase"></param> /// <param name="id"></param> /// <param name="index"></param> private void OnUpdateSecondGemGrid(UIGridBase gridBase, object id, int index) { if (gridBase is UIGemGrid && id is GameCmd.GemType) { GameCmd.GemType gemType = (GameCmd.GemType)id; GemInlayUpdateData data = GetGemInlayUpdateData(gemType); uint gembaseId = 0; if (null != data && data.TryGetBaseIdByIndex(index, out gembaseId)) { UIGemGrid gemGrid = gridBase as UIGemGrid; gemGrid.SetGridData(gembaseId); bool show = DataManager.Manager <ForgingManager>().HaveGemCanImprove(m_emSelectInlayPos, gemType) && (gembaseId == data.PrefectGemID && data.PrefectGemID != 0); gemGrid.SetRedPointStatus(show); } } }
/// <summary> /// 设置展开的宝石类型 /// </summary> /// <param name="gType">目标宝石类型</param> /// <param name="instant">是否直接展开不需要过度</param> private void SetActiveGemType(GameCmd.GemType gType, bool instant = false) { if (gType == GameCmd.GemType.GemType_None) { return; } if (null != mSecondsTabCreator) { UICtrTypeGrid ctgGrid = mSecondsTabCreator.GetGrid <UICtrTypeGrid>(mlstCanInlayGemType.IndexOf(m_emActiveGemType)); GemInlayUpdateData gemCurUpdateData = GetGemInlayUpdateData(); GemInlayUpdateData gemNextUpdateData = GetGemInlayUpdateData(gType); if (m_emActiveGemType == gType) { if (!mSecondsTabCreator.IsOpen(mlstCanInlayGemType.IndexOf(m_emActiveGemType)) || gemCurUpdateData.Count == 0) { mSecondsTabCreator.Close(mlstCanInlayGemType.IndexOf(m_emActiveGemType), true); m_emActiveGemType = GameCmd.GemType.GemType_None; TipsManager.Instance.ShowLocalFormatTips(LocalTextType.Gemstone_Commond_2); } else { TipsManager.Instance.ShowLocalFormatTips(LocalTextType.Gemstone_Commond_1); } return; } if (null != gemCurUpdateData && (gemCurUpdateData.Count == 0 || gemNextUpdateData.Count != 0)) { mSecondsTabCreator.Close(mlstCanInlayGemType.IndexOf(m_emActiveGemType), true); } if (null != gemNextUpdateData) { if (gemNextUpdateData.Count != 0) { m_emActiveGemType = gType; mSecondsTabCreator.Open(mlstCanInlayGemType.IndexOf(m_emActiveGemType), instant); } else { TipsManager.Instance.ShowLocalFormatTips(LocalTextType.Gemstone_Commond_2); } } } }
/// <summary> /// 构建宝石镶嵌数据 /// </summary> private void StructGemInlayDatas() { //可镶嵌数据 if (null == mdicCanInlayDatas) { mdicCanInlayDatas = new Dictionary <GameCmd.GemType, GemInlayUpdateData>(); } mdicCanInlayDatas.Clear(); //获取可镶嵌宝石列表 if (null == mlstCanInlayGemType) { mlstCanInlayGemType = new List <GameCmd.GemType>(); } mlstCanInlayGemType.Clear(); mlstCanInlayGemType.AddRange(emgr.GeCanInlaytGemTypeByPos(m_emSelectInlayPos)); //获取宝石列表 List <uint> gemItemList = new List <uint>(); List <uint> subTypes = new List <uint>(); subTypes.Add((uint)ItemDefine.ItemMaterialSubType.Gem); gemItemList.AddRange(imgr.GetItemByType(GameCmd.ItemBaseType.ItemBaseType_Material, subTypes, GameCmd.PACKAGETYPE.PACKAGETYPE_MAIN)); GemInlayUpdateData gemInlayUpdateData = null; for (int i = 0; i < mlstCanInlayGemType.Count; i++) { if (!mdicCanInlayDatas.TryGetValue(mlstCanInlayGemType[i], out gemInlayUpdateData)) { gemInlayUpdateData = new GemInlayUpdateData(mlstCanInlayGemType[i]); mdicCanInlayDatas.Add(mlstCanInlayGemType[i], gemInlayUpdateData); } if (null != gemInlayUpdateData) { gemInlayUpdateData.StructData(gemItemList); } } }
/// <summary> /// 物品信息变更 /// </summary> /// <param name="passData"></param> private void OnInlayItemUpdate(ItemDefine.UpdateItemPassData passData) { BaseItem baseItem = DataManager.Manager <ItemManager>().GetTempBaseItemByBaseID <BaseItem>(passData.BaseId); if (baseItem.IsGem || baseItem.IsForgingEquip) { UpdateInlayPartList(); UpdateInlayInfo(); if (baseItem.IsGem) { Gem gem = DataManager.Manager <ItemManager>() .GetTempBaseItemByBaseID <Gem>(passData.BaseId, ItemDefine.ItemDataType.Gem); GemInlayUpdateData gemInlayUpdateData = null; if (mlstCanInlayGemType.Contains(gem.Type) && mdicCanInlayDatas.TryGetValue(gem.Type, out gemInlayUpdateData)) { int firstIndex = mlstCanInlayGemType.IndexOf(gem.Type); int secondIndex = -1; GemInlayUpdateData.GemInlayUpdateType updateType = gemInlayUpdateData.UpdateItem(passData.BaseId, out secondIndex); if (null != mSecondsTabCreator) { if (updateType == GemInlayUpdateData.GemInlayUpdateType.GIUT_Insert) { //数据新增 mSecondsTabCreator.InsertIndex(firstIndex, secondIndex); } else if (updateType == GemInlayUpdateData.GemInlayUpdateType.GIUT_Remove) { //数据删除 mSecondsTabCreator.RemoveIndex(firstIndex, secondIndex); } else if (updateType == GemInlayUpdateData.GemInlayUpdateType.GIUT_Update) { //数据更新 mSecondsTabCreator.UpdateIndex(firstIndex, secondIndex); } } } } } }