using System.Collections.Generic; using FairyGUI; using UI.DressUp; using UnityEngine; namespace GFGGame { public enum EnumPhotographType { BG, NPC, SCENE, BORDER, EFFECT } public class PhotographDataManager : SingletonBase { public List _equipRoleData = new List();//当前穿戴的角色数据 public Dictionary> _equipSceneData = new Dictionary>();//当前穿戴的场景数据 public List listBgData = new List(); public List listNpcData = new List(); public List listSceneData = new List(); public List listBorderData = new List(); public List listEffectData = new List(); public void Clear() { listBgData.Clear(); listNpcData.Clear(); listSceneData.Clear(); listBorderData.Clear(); listEffectData.Clear(); } public void Add(int itemID) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID); if (itemCfg.itemType == ConstItemType.DRESS_UP) { if (itemCfg.subType == ConstDressUpItemType.BEI_JING) { if (listBgData.IndexOf(itemID) < 0) listBgData.Add(itemID); } else if (itemCfg.subType == ConstDressUpItemType.QIAN_JING || itemCfg.subType == ConstDressUpItemType.BEI_SHI || itemCfg.subType == ConstDressUpItemType.HUAN_JING) { if (listSceneData.IndexOf(itemID) < 0) listSceneData.Add(itemID); } } else if (itemCfg.itemType == ConstItemType.ITEM) { if (itemCfg.subType == ConstItemSubType.NPC) { if (listNpcData.IndexOf(itemID) < 0) listNpcData.Add(itemID); } else if (itemCfg.subType == ConstItemSubType.BOREDR) { if (listBorderData.IndexOf(itemID) < 0) listBorderData.Add(itemID); } else if (itemCfg.subType == ConstItemSubType.EFFECT) { if (listEffectData.IndexOf(itemID) < 0) listEffectData.Add(itemID); } } } //将穿戴数据分类 public void ClassifyEquipData() { _equipRoleData.Clear(); _equipSceneData.Clear(); for (int i = 0; i < EquipDataCache.cacher.equipDatas.Length; i++) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(EquipDataCache.cacher.equipDatas[i]); if (itemCfg.subType == ConstDressUpItemType.QIAN_JING || itemCfg.subType == ConstDressUpItemType.BEI_SHI || itemCfg.subType == ConstDressUpItemType.HUAN_JING || itemCfg.subType == ConstDressUpItemType.FEN_WEI) { PhotographDataManager.Instance.AddEquipItem(_equipSceneData, itemCfg.id, out _equipSceneData); } else { _equipRoleData.Add(EquipDataCache.cacher.equipDatas[i]); } } } public void AddEquipItem(Dictionary> _equipSceneData, int itemID, out Dictionary> equipSceneData) { if (!_equipSceneData.ContainsKey(itemID)) { _equipSceneData.Add(itemID, new List()); } _equipSceneData[itemID].Add(itemID); equipSceneData = _equipSceneData; } public List GetListData(EnumPhotographType index) { List _listData = null; switch (index) { case EnumPhotographType.BG: _listData = PhotographDataManager.Instance.listBgData; break; case EnumPhotographType.NPC: _listData = PhotographDataManager.Instance.listNpcData; break; case EnumPhotographType.SCENE: _listData = PhotographDataManager.Instance.listSceneData; break; case EnumPhotographType.BORDER: _listData = PhotographDataManager.Instance.listBorderData; break; case EnumPhotographType.EFFECT: _listData = PhotographDataManager.Instance.listEffectData; break; } return _listData; } //是否点击在UI上 public bool IsTouchUI(GComponent viewCom) { GObject obj = GRoot.inst.touchTarget; UI_PhotographUI _viewCom = UI_PhotographUI.Proxy(viewCom); return _viewCom.m_comSelectBox.m_btnSize.GetChild("icon").asLoader == obj || _viewCom.m_comSelectBox.m_btnDelete.GetChild("icon").asLoader == obj || _viewCom.m_comSelectBox.m_btnFlip.GetChild("icon").asLoader == obj || _viewCom.m_btnBack == obj || _viewCom.m_btnChoose.GetChild("icon").asLoader == obj || _viewCom.m_btnPhotograph.GetChild("icon").asLoader == obj || _viewCom.m_btnUp.GetChild("icon").asLoader == obj || _viewCom.m_btnDown.GetChild("icon").asLoader == obj; } public void SetLayer(GameObject parentObj, int layer, string state) { int count = 0; if (state == "up") { count = layer - GetMinLayer(parentObj); } else if (state == "down") { count = layer - GetMaxLayer(parentObj); } int maxLayer = int.MinValue; SpriteRenderer[] sps = parentObj.GetComponentsInChildren(); for (int i = 0; i < sps.Length; i++) { sps[i].sortingOrder = sps[i].sortingOrder + layer + count; if (maxLayer < sps[i].sortingOrder) { maxLayer = sps[i].sortingOrder; } } for (int i = 0; i < parentObj.transform.childCount; i++) { Transform tf = parentObj.transform.GetChild(i); string[] strs = tf.name.Split('_'); if (strs.Length > 1 && strs[1] == "eff")//子物体是特效 { DressUpUtil.SetParticleSortingOrder(tf.gameObject, maxLayer); } } } private int GetMaxLayer(GameObject parentObj) { int layer = int.MinValue; for (int i = 0; i < parentObj.transform.childCount; i++) { Transform tf = parentObj.transform.GetChild(i); SpriteRenderer sp = tf.GetComponent(); if (sp && layer < sp.sortingOrder) { layer = sp.sortingOrder; } } return layer; } public int GetMinLayer(GameObject parentObj) { int layer = int.MaxValue; for (int i = 0; i < parentObj.transform.childCount; i++) { Transform tf = parentObj.transform.GetChild(i); SpriteRenderer sp = tf.GetComponent(); if (sp && sp.sortingOrder < layer) { layer = sp.sortingOrder; } } return layer; } public void SetBgPos(GameObject hitGameObj, Vector2 uiSize) { Vector2 size = hitGameObj.GetComponent().size; float deviationWidth = (size.x - uiSize.x / 100) / 2; float deviationHeigh = (size.y - uiSize.y / 100) / 2; Vector2 pos = hitGameObj.transform.position; if (pos.x <= -deviationWidth) { hitGameObj.transform.position = new Vector2(-deviationWidth, hitGameObj.transform.position.y); } if (pos.x >= deviationWidth) { hitGameObj.transform.position = new Vector2(deviationWidth, hitGameObj.transform.position.y); } if (pos.y <= -deviationHeigh) { hitGameObj.transform.position = new Vector2(hitGameObj.transform.position.x, -deviationHeigh); } if (pos.y >= deviationHeigh) { hitGameObj.transform.position = new Vector2(hitGameObj.transform.position.x, deviationHeigh); } } } }