using System.Collections; using UnityEngine; using UI.ClothingSynthetic; using UI.CommonGame; using FairyGUI; using System.Collections.Generic; using System; using ET; namespace GFGGame { public class ClothingSyntheticView : BaseWindow { private const int HEAD_Y = 942; private const int FA_XING_Y = 609; private const int UPPER_BODY_Y = 383; private const int LOWER_BODY_Y = 112; private const int SHOES_Y = -287; private const int BODY_Y = 289; private const float HEAD_SCALE = 3f; private const float FA_XING_SCALE = 2f; private const float UPPER_BODY_SCALE = 1.5f; private const float LOWER_BODY_SCALE = 1.4f; private const float SHOES_SCALE = 2.5f; private const float BODY_SCALE = 1f; private const float DURATION = 0.6f; private readonly int[] HEAD_Y_ARR = new int[] { ConstDressUpItemType.TOU_SHI, ConstDressUpItemType.ER_SHI, ConstDressUpItemType.JING_SHI, ConstDressUpItemType.ZHUANG_RONG }; private readonly int[] FA_XING_Y_ARR = new int[] { ConstDressUpItemType.FA_XING }; private readonly int[] UPPER_BODY_Y_ARR = new int[] { ConstDressUpItemType.NEI_DA, ConstDressUpItemType.SHANG_YI }; private readonly int[] LOWER_BODY_Y_ARR = new int[] { ConstDressUpItemType.XIA_ZHUANG, ConstDressUpItemType.SHOU_SHI }; private readonly int[] SHOES_Y_ARR = new int[] { ConstDressUpItemType.WA_ZI, ConstDressUpItemType.XIE_ZI }; private UI_ClothingSyntheticUI _ui; private GameObject _scenePrefab; private GameObject _sceneObject; private GoWrapper _wrapper; private DressUpObj _dressUpObj; private ValueBarController _valueBarController; private GImage _imgSelected; private int _suitId; private int _itemId; private int[] _items; private int _selectedItemId; private GComponent _selectedListItem; private List _materiarsOfSelectedItem; private UI_MateriasListItem listTypeItem_CloSynthetic; public override void Dispose() { if (_valueBarController != null) { _valueBarController.Dispose(); _valueBarController = null; } if (_sceneObject != null) { GameObject.Destroy(_sceneObject); _sceneObject = null; } if (_imgSelected != null) { _imgSelected.RemoveFromParent(); _imgSelected.Dispose(); } if (_dressUpObj != null) { _dressUpObj.Dispose(); _dressUpObj = null; } if (_wrapper != null) { _wrapper.Dispose(); _wrapper = null; } if (_ui != null) { _ui.Dispose(); _ui = null; } base.Dispose(); } protected override void OnInit() { base.OnInit(); packageName = UI_ClothingSyntheticListUI.PACKAGE_NAME; _ui = UI_ClothingSyntheticUI.Create(); this.viewCom = _ui.target; isfullScreen = true; this.clickBlankToClose = false; _valueBarController = new ValueBarController(_ui.m_valueBar); _scenePrefab = GFGAsset.Load(ResPathUtil.GetPrefabPath("SceneDressUpSynthetic")); _dressUpObj = new DressUpObj(); _imgSelected = new GImage(); _imgSelected = UIPackage.CreateObject(UI_ClothingSyntheticUI.PACKAGE_NAME, "hc_kuang_4").asImage; _ui.m_listClothing.itemRenderer = ListClothingItemRender; _ui.m_listClothing.onClickItem.Add(OnClickListClothingItem); _ui.m_listMaterias.itemRenderer = RenderListMateriasItem; _ui.m_listMaterias.onClickItem.Add(OnClickMateriasItemPlus); _ui.m_btnBack.onClick.Add(OnClickBtnBack); _ui.m_btnProduction.onClick.Add(OnClickBtnProcuction); _ui.m_btnHome.onClick.Add(OnClickBtnHome); } protected override void AddEventListener() { base.AddEventListener(); EventAgent.AddEventListener(ConstMessage.ITEM_CHANGED, OnItemNumChanged); } protected override void OnShown() { base.OnShown(); _suitId = (int)(this.viewData as object[])[0]; _selectedItemId = (this.viewData as object[]).Length > 1 ? (int)(this.viewData as object[])[1] : 0; _valueBarController.OnShown(); _ui.m_loaBg.url = ResPathUtil.GetBgImgPath("hc_bj_1"); UpdateClothingList(false); Timers.inst.AddUpdate(CheckGuide); } protected override void OnHide() { base.OnHide(); _valueBarController.OnHide(); if (_sceneObject != null) { GameObject.Destroy(_sceneObject); _sceneObject = null; } if (_wrapper != null) { _wrapper.wrapTarget = null; } _ui.m_listMaterias.selectedIndex = 0; Timers.inst.Remove(CheckGuide); } protected override void RemoveEventListener() { base.RemoveEventListener(); EventAgent.RemoveEventListener(ConstMessage.ITEM_CHANGED, OnItemNumChanged); } private void OnClickBtnBack() { ViewManager.GoBackFrom(ViewName.CLOTHING_SYNTHETIC_VIEW); } private void OnClickListClothingItem(EventContext context) { UpdateSelectedItemInfo(context.data as GComponent, true); } private async void OnClickBtnProcuction() { if (ItemDataManager.GetItemNum(_selectedItemId) > 0) { PromptController.Instance.ShowFloatTextPrompt("不能制作已经拥有的物品"); return; } ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_selectedItemId); //合成消耗判断 if (ItemDataManager.GetItemNum(itemCfg.syntheticCostID) < itemCfg.syntheticCostNum) { PromptController.Instance.ShowFloatTextPrompt("消耗不足", MessageType.WARNING); return; } //合成材料判断 _materiarsOfSelectedItem = ItemUtil.CreateItemDataList(itemCfg.syntheticMateriarsArr); int count = _materiarsOfSelectedItem.Count; for (int i = 0; i < count; i++) { ItemData itemData = _materiarsOfSelectedItem[i]; ItemCfg materialCfg = ItemCfgArray.Instance.GetCfg(itemData.id); bool isDressUp = materialCfg.itemType == ConstItemType.DRESS_UP; long numSynthetic = ItemDataManager.GetItemNum(itemData.id); if (numSynthetic < itemData.num) { PromptController.Instance.ShowFloatTextPrompt("材料不足", MessageType.WARNING); return; } } bool result = await ClothingSyntheticSProxy.ClothtingSynthetic(_selectedItemId); if (result) { _selectedItemId = 0; UpdateClothingList(true); LogServerHelper.SendPlayParticipationLog((int)PlayParticipationEnum.FU_ZHUANG_HE_CHENG, 2); } } private void ListClothingItemRender(int index, GObject item) { UI_ClothingListItem listItem = UI_ClothingListItem.Proxy(item); int itemId = _items[index]; listItem.target.data = itemId; ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId); listItem.m_loaderIcon.url = ResPathUtil.GetIconPath(itemCfg); string itemName = itemCfg.name; listItem.m_txtName.text = itemName; listItem.m_imgOwned.visible = ItemDataManager.GetItemNum(itemId) > 0; UI_ClothingListItem.ProxyEnd(); } private void UpdateRole(bool tween) { if (_sceneObject != null) { GameObject.Destroy(_sceneObject); _sceneObject = null; } _sceneObject = GameObject.Instantiate(_scenePrefab); int scale = 45; _sceneObject.transform.localScale = new Vector3(scale, scale, scale); _dressUpObj.setSceneObj(_sceneObject, true, true, null, false); _dressUpObj.PutOnDefaultDressUpData(); _dressUpObj.AddOrRemove(_selectedItemId, true); if (_wrapper == null) { _wrapper = new GoWrapper(_sceneObject); _ui.m_compHolder.m_compMover.m_holder.SetNativeObject(_wrapper); } else { _wrapper.wrapTarget = _sceneObject; } int type = ItemUtilCS.GetItemSubType(_selectedItemId); float duration = DURATION; if (!tween) { duration = 0; } if (Array.IndexOf(HEAD_Y_ARR, type) >= 0) { _ui.m_compHolder.m_compMover.target.TweenMoveY(HEAD_Y, duration); _ui.m_compHolder.m_compMover.target.TweenScale(new Vector2(HEAD_SCALE, HEAD_SCALE), duration); } else if (Array.IndexOf(FA_XING_Y_ARR, type) >= 0) { _ui.m_compHolder.m_compMover.target.TweenMoveY(FA_XING_Y, duration); _ui.m_compHolder.m_compMover.target.TweenScale(new Vector2(FA_XING_SCALE, FA_XING_SCALE), duration); } else if (Array.IndexOf(UPPER_BODY_Y_ARR, type) >= 0) { _ui.m_compHolder.m_compMover.target.TweenMoveY(UPPER_BODY_Y, duration); _ui.m_compHolder.m_compMover.target.TweenScale(new Vector2(UPPER_BODY_SCALE, UPPER_BODY_SCALE), duration); } else if (Array.IndexOf(LOWER_BODY_Y_ARR, type) >= 0) { _ui.m_compHolder.m_compMover.target.TweenMoveY(LOWER_BODY_Y, duration); _ui.m_compHolder.m_compMover.target.TweenScale(new Vector2(LOWER_BODY_SCALE, LOWER_BODY_SCALE), duration); } else if (Array.IndexOf(SHOES_Y_ARR, type) >= 0) { _ui.m_compHolder.m_compMover.target.TweenMoveY(SHOES_Y, duration); _ui.m_compHolder.m_compMover.target.TweenScale(new Vector2(SHOES_SCALE, SHOES_SCALE), duration); } else { _ui.m_compHolder.m_compMover.target.TweenMoveY(BODY_Y, duration); _ui.m_compHolder.m_compMover.target.TweenScale(new Vector2(BODY_SCALE, BODY_SCALE), duration); } } private void UpdateClothingList(bool tween) { //套装名称 SuitCfg suitCfg = SuitCfgArray.Instance.GetCfg(_suitId); _ui.m_txtSuitName.text = suitCfg.name; //进度条 UpdateSuitProgress(); //服装列表 _items = SuitCfgArray.Instance.GetSuitItems(_suitId).Clone() as int[]; ItemUtil.SortItemIdsByOwned(_items); _ui.m_listClothing.RemoveChildrenToPool(); _ui.m_listClothing.numItems = _items.Length; if (_ui.m_listClothing.numItems > 0) { UI_ClothingListItem listItem = null; int index = 0; if (_selectedItemId > 0) { int num = _ui.m_listClothing.numChildren; for (int i = 0; i < num; i++) { listItem = UI_ClothingListItem.Proxy(_ui.m_listClothing.GetChildAt(i)); int temp = (int)listItem.target.data; if (temp == _selectedItemId) { index = i; } UI_ClothingListItem.ProxyEnd(); } } _ui.m_listClothing.ScrollToView(index); _ui.m_listClothing.selectedIndex = index; UpdateSelectedItemInfo(_ui.m_listClothing.GetChildAt(index) as GComponent, tween); } } private void UpdateSelectedItemInfo(GComponent listItem, bool tween) { _selectedListItem = listItem; listItem.AddChildAt(_imgSelected, 1); _selectedItemId = (int)listItem.data; UpdateRole(tween); UpdateSelectedItemInfo(); } private void UpdateSelectedItemInfo() { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_selectedItemId); //属性展示 _ui.m_compItemInfo.m_txtName.text = itemCfg.name; RarityIconController.UpdateRarityIcon(_ui.m_compItemInfo.m_rarity, _selectedItemId, false); _ui.m_compItemInfo.m_txtGong.text = "" + itemCfg.score1; _ui.m_compItemInfo.m_txtShang.text = "" + itemCfg.score2; _ui.m_compItemInfo.m_txtJue.text = "" + itemCfg.score3; _ui.m_compItemInfo.m_txtZhi.text = "" + itemCfg.score4; UI_ClothingListItem selectedItem = UI_ClothingListItem.Proxy(_selectedListItem); selectedItem.m_imgOwned.visible = ItemDataManager.GetItemNum(_selectedItemId) > 0; UI_ClothingListItem.ProxyEnd(); //合成显示 ItemCfg clothingSyntheticCfg = ItemCfgArray.Instance.GetCfg(_selectedItemId); // string costName = ItemUtil.GetItemName(clothingSyntheticCfg.syntheticCostID); // _ui.m_txtCost.SetVar("v1", "" + clothingSyntheticCfg.syntheticCostNum).SetVar("v2", costName).FlushVars(); ItemUtil.SetItemNeedNum(_ui.m_comCostCurrency, clothingSyntheticCfg.syntheticCostID, clothingSyntheticCfg.syntheticCostNum); _materiarsOfSelectedItem = ItemUtil.CreateItemDataList(clothingSyntheticCfg.syntheticMateriarsArr); _ui.m_listMaterias.numItems = _materiarsOfSelectedItem.Count; _ui.m_listMaterias.selectedIndex = 0; _ui.m_btnProduction.grayed = ItemDataManager.GetItemNum(_selectedItemId) > 0; } private void RenderListMateriasItem(int index, GObject obj) { UI_MateriasListItem listItem = UI_MateriasListItem.Proxy(obj); ItemData itemData = _materiarsOfSelectedItem[index]; ItemCfg materiasItemCfg = ItemCfgArray.Instance.GetCfg(itemData.id); listItem.m_txtName.text = ItemUtil.GetItemName(itemData.id); listItem.m_loaderIcon.url = ResPathUtil.GetIconPath(materiasItemCfg); long num = ItemDataManager.GetItemNum(itemData.id); ItemCfg materialCfg = ItemCfgArray.Instance.GetCfg(itemData.id); bool isDressUp = materialCfg.itemType == ConstItemType.DRESS_UP; long numSynthetic = Math.Max(num, 0); listItem.m_txtProgess.text = numSynthetic + "/" + itemData.num; listItem.m_loaderIcon.visible = true; listItem.m_txtProgess.visible = true; // listItem.target.onClick.Clear(); // if (listItem.target.data == null) // { // listItem.target.onClick.Add(OnClickMateriasItemPlus); // } listItem.target.data = index; UI_MateriasListItem.ProxyEnd(); } private void OnClickMateriasItemPlus(EventContext context) { GuideCfg cfg = GuideCfgArray.Instance.GetCfg(ConstGuideId.CLOTHING_SYNTHETIC); if (GuideDataManager.currentGuideId == cfg.id) { return; } int index = (int)(context.data as GObject).data; _ui.m_listMaterias.selectedIndex = index; ItemData itemData = _materiarsOfSelectedItem[index]; object[] sourceDatas = new object[] { itemData.id, new object[] { ViewName.CLOTHING_SYNTHETIC_VIEW, new object[] { _suitId, _selectedItemId } }, itemData.num }; GoodsItemTipsController.ShowItemTips(itemData.id, sourceDatas); } private void OnItemNumChanged() { UpdateSuitProgress(); //列表选中项更新 UI_ClothingListItem selectedItem = UI_ClothingListItem.Proxy(_selectedListItem); selectedItem.m_imgOwned.visible = ItemDataManager.GetItemNum(_selectedItemId) > 0; UI_ClothingListItem.ProxyEnd(); UpdateSelectedItemInfo(); } private void UpdateSuitProgress() { //进度条 int count = 0; int totalCount = 0; DressUpMenuSuitDataManager.GetSuitProgressBySuitId(_suitId, out count, out totalCount); _ui.m_txtProgress.text = string.Format("{0}/{1}", count, totalCount); } private void OnClickBtnHome() { GameController.GoBackToMainView(); } private void CheckGuide(object param) { if (GuideDataManager.IsGuideFinish(ConstGuideId.CLOTHING_SYNTHETIC) <= 0) { UpdateToCheckGuide(null); } else { Timers.inst.Remove(CheckGuide); } } protected override void UpdateToCheckGuide(object param) { if (ViewManager.isViewOpen(typeof(GuideView).Name)) { ViewManager.GetUIView(typeof(GuideView).Name).viewCom.visible = !ViewManager.isViewOpen(typeof(GetSuitItemVIew).Name); } if (!ViewManager.CheckIsTopView(this.viewCom)) return; int itemId = 10044; int itemIndex = 0; for (int i = 0; i < _ui.m_listClothing.numItems; i++) { UI_ClothingListItem listItem = UI_ClothingListItem.Proxy(_ui.m_listClothing.GetChildAt(i)); int temp = (int)listItem.target.data; UI_ClothingListItem.ProxyEnd(); if (temp == itemId) { itemIndex = i; break; } } bool guide = GuideController.TryGuide(_ui.m_listClothing, ConstGuideId.CLOTHING_SYNTHETIC, 4, "找到需要合成的物品。", itemIndex); if (guide) _ui.m_listClothing.ScrollToView(itemIndex); GuideController.TryGuide(_ui.m_listMaterias, ConstGuideId.CLOTHING_SYNTHETIC, 5, "这里可以查看合成需要的材料,和材料的获取途径。", 0); UI_MateriasListItem.ProxyEnd(); GuideController.TryGuide(_ui.m_btnProduction, ConstGuideId.CLOTHING_SYNTHETIC, 6, "点击获得新的服饰。"); GuideController.TryGuide(_ui.m_btnHome, ConstGuideId.CLOTHING_SYNTHETIC, 7, "获得新衣服啦,继续通关主线剧情吧。"); } } }