少年修仙传客户端代码仓库
Client_PangDeRong
2019-01-08 fe4ee1697e07fb6e5dda02754ad425ffefda54a1
5729 【前端】【1.5】时装功能开发
8个文件已添加
379 ■■■■■ 已修改文件
Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA520_tagCMCoatDecompose.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA520_tagCMCoatDecompose.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FashionDress/FashionDecomposeLineBeh.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FashionDress/FashionDecomposeLineBeh.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FashionDress/FashionDecomposeModel.cs 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FashionDress/FashionDecomposeModel.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FashionDress/FashiongDecomposeWin.cs 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FashionDress/FashiongDecomposeWin.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA520_tagCMCoatDecompose.cs
New file
@@ -0,0 +1,22 @@
using UnityEngine;
using System.Collections;
// A5 20 时装分解 #tagCMCoatDecompose
public class CA520_tagCMCoatDecompose : GameNetPackBasic {
    public byte Count;    //材料所在背包索引的数量
    public  ushort[] IndexList;    //材料所在背包索引列表
    public  uint[] ItemIDList;    //材料所在背包物品ID列表
    public CA520_tagCMCoatDecompose () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xA520;
    }
    public override void WriteToBytes () {
        WriteBytes (Count, NetDataType.BYTE);
        WriteBytes (IndexList, NetDataType.WORD, Count);
        WriteBytes (ItemIDList, NetDataType.DWORD, Count);
    }
}
Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA520_tagCMCoatDecompose.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: e9f99f58f066c144b8d82dd0e54660c5
timeCreated: 1546936247
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/FashionDress/FashionDecomposeLineBeh.cs
New file
@@ -0,0 +1,66 @@
using System;
using UnityEngine;
using UnityEngine.UI;
using EnhancedUI.EnhancedScroller;
using System.Collections.Generic;
namespace Snxxz.UI
{
    [XLua.Hotfix]
    public class FashionDecomposeLineBeh : ScrollerUI
    {
        [SerializeField] List<DecomposeItemBeh> itemBehs = new List<DecomposeItemBeh>();
        public override void Refresh(CellView cell)
        {
            var decomposeModel = FashionDecomposeModel.Instance;
            var decomposeGuids = decomposeModel.decomposeItemGuids;
            int length = itemBehs.Count;
            for(int i = 0; i < length; i++)
            {
                var itemBeh = itemBehs[i];
                int index = cell.index*length + i;
                if(decomposeGuids != null
                    && index < decomposeGuids.Count)
                {
                    var guid = decomposeGuids[index];
                    FashionDecomposeModel.DecomposeItem decomposeItem = null;
                    decomposeModel.TryGetDecomposeItem(guid,out decomposeItem);
                    itemBeh.SetDisplay(decomposeItem.itemModel);
                }
                else
                {
                    itemBeh.SetDisplay(null);
                }
            }
        }
        [Serializable]
        public class DecomposeItemBeh
        {
            [SerializeField] CommonItemBaisc itemBaisc;
            [SerializeField] GameObject selectObj;
            public void SetDisplay(ItemModel itemModel)
            {
                if (itemModel == null)
                {
                    itemBaisc.gameObject.SetActive(false);
                    selectObj.SetActive(false);
                }
                else
                {
                    var decomposeModel = FashionDecomposeModel.Instance;
                    itemBaisc.Init(itemModel);
                    itemBaisc.cellBtn.RemoveAllListeners();
                    itemBaisc.cellBtn.AddListener(()=>
                    {
                        decomposeModel.UpdateDecomposeItem(itemModel.itemInfo.ItemGUID, !selectObj.activeInHierarchy);
                        selectObj.SetActive(!selectObj.activeInHierarchy);
                    });
                }
            }
        }
    }
}
System/FashionDress/FashionDecomposeLineBeh.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 2bb54ddc8495e9540847635bd28036b3
timeCreated: 1546930677
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/FashionDress/FashionDecomposeModel.cs
New file
@@ -0,0 +1,131 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Snxxz.UI
{
    [XLua.LuaCallCSharp]
    [XLua.Hotfix]
    public class FashionDecomposeModel : Singleton<FashionDecomposeModel>
    {
        FashionDressModel model
        {
            get { return ModelCenter.Instance.GetModel<FashionDressModel>(); }
        }
        PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
        public Dictionary<string, DecomposeItem> decomposeItemDict = new Dictionary<string, DecomposeItem>();
        public List<string> decomposeItemGuids { get; private set; }
        public event Action UpdateDecomposeExpEvent;
        List<int> fashionMatIds = new List<int>();
        public void GetDecomposeItem()
        {
            decomposeItemGuids = null;
            decomposeItemDict.Clear();
            SinglePackModel singlePack = playerPack.GetSinglePackModel(PackType.rptItem);
            if (singlePack == null) return;
            fashionMatIds.Clear();
            model.TryGetSatisfyResolves(ref fashionMatIds);
            foreach(var matId in fashionMatIds)
            {
                List<ItemModel> itemModels = null;
                singlePack.GetItemCountByID(matId, out itemModels);
                if (itemModels != null)
                {
                    foreach (var model in itemModels)
                    {
                        var decomposeItem = new DecomposeItem();
                        decomposeItem.SetModel(model);
                        decomposeItemDict.Add(decomposeItem.guid, decomposeItem);
                    }
                }
            }
            decomposeItemGuids = decomposeItemDict.Keys.ToList();
        }
        public void UpdateDecomposeItem(string guid, bool _isSelect)
        {
            DecomposeItem decomposeItem = null;
            bool isItem = TryGetDecomposeItem(guid, out decomposeItem);
            if (isItem)
            {
                decomposeItem.SetIsSelect(_isSelect);
            }
        }
        public bool TryGetDecomposeItem(string guid,out DecomposeItem decomposeItem)
        {
            return decomposeItemDict.TryGetValue(guid,out decomposeItem);
        }
        public int GetSumDecomposeExp()
        {
            int sumExp = 0;
            foreach(var guid in decomposeItemDict.Keys)
            {
                var decomposeItem = decomposeItemDict[guid];
                if(decomposeItem.isSelect)
                {
                    sumExp += decomposeItem.decomposeExp;
                }
            }
            return sumExp;
        }
        public void GetSelectItemlist(out List<ushort> indexs,out List<uint> ids)
        {
            indexs = new List<ushort>();
            ids = new List<uint>();
            foreach(var item in decomposeItemDict.Values)
            {
                if(item.isSelect)
                {
                    indexs.Add((ushort)item.itemModel.itemInfo.ItemPlace);
                    ids.Add((uint)item.itemModel.itemId);
                }
            }
        }
        public void SendDecomposeFashion()
        {
            List<ushort> indexs = null;
            List<uint> ids = null;
            GetSelectItemlist(out indexs,out ids);
            CA520_tagCMCoatDecompose coatDecompose = new CA520_tagCMCoatDecompose();
            coatDecompose.Count = (byte)indexs.Count;
            coatDecompose.IndexList = indexs.ToArray();
            coatDecompose.ItemIDList = ids.ToArray();
            GameNetSystem.Instance.SendInfo(coatDecompose);
        }
        public class DecomposeItem
        {
            public string guid { get; private set; }
            public bool isSelect { get; private set; }
            public ItemModel itemModel { get; private set; }
            public int decomposeExp { get; private set; }
            public void SetModel(ItemModel _model)
            {
                guid = _model.itemInfo.ItemGUID;
                isSelect = true;
                itemModel = _model;
                if(itemModel.chinItemModel.Effect1 == 243)
                {
                    decomposeExp = itemModel.chinItemModel.EffectValueB1;
                }
                else
                {
                    decomposeExp = 0;
                }
            }
            public void SetIsSelect(bool _isSelect)
            {
                isSelect = _isSelect;
            }
        }
    }
}
System/FashionDress/FashionDecomposeModel.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d6722779fa42a274687159f4e8cf8270
timeCreated: 1546932457
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/FashionDress/FashiongDecomposeWin.cs
New file
@@ -0,0 +1,112 @@
using System;
using UnityEngine;
using UnityEngine.UI;
using TableConfig;
namespace Snxxz.UI
{
    [XLua.Hotfix]
    public class FashiongDecomposeWin : Window
    {
        [SerializeField] Button closeBtn;
        [SerializeField] Button decomposeBtn;
        [SerializeField] Text wardrobeLvText;
        [SerializeField] Text upgradeExpText;
        [SerializeField] Text getExpText;
        [SerializeField] ScrollerController lineCtrl;
        [SerializeField, Header("创建格子数")] int initGrid = 100;
        FashionDressModel model{ get { return ModelCenter.Instance.GetModel<FashionDressModel>(); }}
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            closeBtn.AddListener(CloseClick);
            decomposeBtn.AddListener(ClickDecompose);
        }
        protected override void OnPreOpen()
        {
            model.cabinetRefresh += UpdateCabinetLv;
            FashionDecomposeModel.Instance.UpdateDecomposeExpEvent += UpdateGetExp;
            SetDisplay();
        }
        protected override void OnAfterOpen()
        {
        }
        protected override void OnPreClose()
        {
            model.cabinetRefresh += UpdateCabinetLv;
            FashionDecomposeModel.Instance.UpdateDecomposeExpEvent -= UpdateGetExp;
        }
        protected override void OnAfterClose()
        {
        }
        #endregion
        private void SetDisplay()
        {
            FashionDecomposeModel.Instance.GetDecomposeItem();
            CreateLineCell();
            UpdateGetExp();
            UpdateCabinetLv();
        }
        private void CreateLineCell()
        {
            int line = initGrid / 5;
            lineCtrl.Refresh();
            for (int i = 0; i < line; i++)
            {
                lineCtrl.AddCell(ScrollerDataType.Header, i);
            }
            lineCtrl.Restart();
        }
        private void UpdateCabinetLv()
        {
            int wardrobeLv = model.cabinetLevel;
            wardrobeLvText.text = StringUtility.Contact(wardrobeLv, "级");
            int curWardrobeExp = model.cabinetExp;
            bool isCabinetMax = wardrobeLv >= model.cabinetMaxLevel ? true : false;
            int upgradeLv = isCabinetMax ? model.cabinetMaxLevel : wardrobeLv + 1;
            var cabinetConfig = Config.Instance.Get<FashionDressCabinetConfig>(upgradeLv);
            upgradeExpText.gameObject.SetActive(cabinetConfig != null);
            if (cabinetConfig != null)
            {
                int upgradeWardrobeExp = cabinetConfig.NeedExp;
                if (isCabinetMax)
                {
                    upgradeExpText.text = StringUtility.Contact("(已升至最高等级)");
                }
                else
                {
                    upgradeExpText.text = StringUtility.Contact("(", curWardrobeExp, "/", upgradeWardrobeExp, ")");
                }
            }
        }
        private void UpdateGetExp()
        {
            int getDecomposeExp = FashionDecomposeModel.Instance.GetSumDecomposeExp();
            getExpText.text = getDecomposeExp.ToString();
        }
        private void ClickDecompose()
        {
            int getDecomposeExp = FashionDecomposeModel.Instance.GetSumDecomposeExp();
            if(getDecomposeExp <= 0)
            {
                return;
            }
            FashionDecomposeModel.Instance.SendDecomposeFashion();
            CloseImmediately();
        }
    }
}
System/FashionDress/FashiongDecomposeWin.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: dcedad5cc63fa9a449a785ffa93d903c
timeCreated: 1546928860
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: