|
@@ -4,26 +4,88 @@ using System.IO;
|
|
|
using FairyGUI;
|
|
|
using UnityEngine.Rendering;
|
|
|
using YooAsset;
|
|
|
+using System.Collections.Generic;
|
|
|
|
|
|
namespace GFGGame
|
|
|
{
|
|
|
public class DressUpUtil
|
|
|
{
|
|
|
- private const string HEAD_DEFAULT_RES_NAME = "head";
|
|
|
- private const string BODY_DEFAULT_RES_NAME = "body";
|
|
|
- private const string ROLE_OBJ_NAME = "Role";
|
|
|
- private const string HEAD_SPRITE_NAME = "Head";
|
|
|
- private const string BODY_SPRITE_NAME = "Body";
|
|
|
+ public const string HEAD_DEFAULT_RES_NAME = "head";
|
|
|
+ public const string BODY_DEFAULT_RES_NAME = "body";
|
|
|
+ public const string ROLE_OBJ_NAME = "Role";
|
|
|
+ public const string HEAD_SPRITE_NAME = "Head";
|
|
|
+ public const string BODY_SPRITE_NAME = "Body";
|
|
|
public const string BODY_ANIMATION_NAME = "Body_a";
|
|
|
- private const string BODY_EFFECT_OBJ_NAME = "Body_eff";
|
|
|
+ public const string BODY_EFFECT_OBJ_NAME = "Body_eff";
|
|
|
public const string FORMAT_SPRITE_NAME = "T{0}_s{1}";
|
|
|
- private const string FORMAT_ANIMATION_NAME = "T{0}_a{1}";
|
|
|
- private const string FORMAT_EFFECT_OBJ_NAME = "T{0}_e{1}";
|
|
|
+ public const string FORMAT_ANIMATION_NAME = "T{0}_a{1}";
|
|
|
+ public const string FORMAT_EFFECT_OBJ_NAME = "T{0}_e{1}";
|
|
|
|
|
|
- public static void AddItem(int itemID, GameObject sceneObj, bool needSetMask = false, bool showAni = true, GameObject parentObj = null, int resLayer = 0)
|
|
|
+ //public static void AddItem(int itemID, GameObject sceneObj, bool needSetMask = false, bool showAni = true, GameObject parentObj = null, int resLayer = 0)
|
|
|
+ //{
|
|
|
+ // ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
|
|
|
+ // if (itemCfg == null) return;
|
|
|
+
|
|
|
+ // if (parentObj == null)
|
|
|
+ // {
|
|
|
+ // if (itemCfg.subType == ConstDressUpItemType.BEI_JING || DressUpMenuItemCfg1Array.Instance.CheckIsSceneTypeBySubType(itemCfg.subType))
|
|
|
+ // {
|
|
|
+ // parentObj = sceneObj;
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // //角色
|
|
|
+ // Transform role = sceneObj.transform.Find(ROLE_OBJ_NAME);
|
|
|
+ // parentObj = role.gameObject;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // showAni = showAni || itemCfg.subType == ConstDressUpItemType.ZHUANG_RONG;
|
|
|
+ // if (resLayer > 0)
|
|
|
+ // {
|
|
|
+ // string layerName = "";
|
|
|
+ // switch (resLayer)
|
|
|
+ // {
|
|
|
+ // case 1:
|
|
|
+ // layerName = itemCfg.resLayer1;
|
|
|
+ // break;
|
|
|
+ // case 2:
|
|
|
+ // layerName = itemCfg.resLayer2;
|
|
|
+ // break;
|
|
|
+ // case 3:
|
|
|
+ // layerName = itemCfg.resLayer3;
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // if (!string.IsNullOrEmpty(layerName))
|
|
|
+ // {
|
|
|
+ // UpdateLayerRes(itemCfg, parentObj, resLayer, needSetMask, showAni);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // //普通层
|
|
|
+ // if (!string.IsNullOrEmpty(itemCfg.resLayer1))
|
|
|
+ // {
|
|
|
+ // UpdateLayerRes(itemCfg, parentObj, 1, needSetMask, showAni);
|
|
|
+ // }
|
|
|
+ // //第二层
|
|
|
+ // if (!string.IsNullOrEmpty(itemCfg.resLayer2))
|
|
|
+ // {
|
|
|
+
|
|
|
+ // UpdateLayerRes(itemCfg, parentObj, 2, needSetMask, showAni);
|
|
|
+ // }
|
|
|
+ // //第三层
|
|
|
+ // if (!string.IsNullOrEmpty(itemCfg.resLayer3))
|
|
|
+ // {
|
|
|
+
|
|
|
+ // UpdateLayerRes(itemCfg, parentObj, 3, needSetMask, showAni);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+
|
|
|
+ public static List<DressUpLayerOperation> AddItemAsync(int itemID, GameObject sceneObj, bool needSetMask = false, bool showAni = true, GameObject parentObj = null, int resLayer = 0)
|
|
|
{
|
|
|
ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
|
|
|
- if (itemCfg == null) return;
|
|
|
+ if (itemCfg == null) return null;
|
|
|
|
|
|
if (parentObj == null)
|
|
|
{
|
|
@@ -39,6 +101,8 @@ namespace GFGGame
|
|
|
}
|
|
|
}
|
|
|
showAni = showAni || itemCfg.subType == ConstDressUpItemType.ZHUANG_RONG;
|
|
|
+ List<DressUpLayerOperation> handlers = new List<DressUpLayerOperation>();
|
|
|
+ DressUpLayerOperation handler;
|
|
|
if (resLayer > 0)
|
|
|
{
|
|
|
string layerName = "";
|
|
@@ -56,7 +120,8 @@ namespace GFGGame
|
|
|
}
|
|
|
if (!string.IsNullOrEmpty(layerName))
|
|
|
{
|
|
|
- updateLayerRes(itemCfg, parentObj, resLayer, needSetMask, showAni);
|
|
|
+ handler = UpdateLayerResAsync(itemCfg, parentObj, resLayer, needSetMask, showAni);
|
|
|
+ if (handler != null) handlers.Add(handler);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -64,21 +129,29 @@ namespace GFGGame
|
|
|
//普通层
|
|
|
if (!string.IsNullOrEmpty(itemCfg.resLayer1))
|
|
|
{
|
|
|
- updateLayerRes(itemCfg, parentObj, 1, needSetMask, showAni);
|
|
|
+ handler = UpdateLayerResAsync(itemCfg, parentObj, 1, needSetMask, showAni);
|
|
|
+ if (handler != null) handlers.Add(handler);
|
|
|
}
|
|
|
//第二层
|
|
|
if (!string.IsNullOrEmpty(itemCfg.resLayer2))
|
|
|
{
|
|
|
|
|
|
- updateLayerRes(itemCfg, parentObj, 2, needSetMask, showAni);
|
|
|
+ handler = UpdateLayerResAsync(itemCfg, parentObj, 2, needSetMask, showAni);
|
|
|
+ if (handler != null) handlers.Add(handler);
|
|
|
}
|
|
|
//第三层
|
|
|
if (!string.IsNullOrEmpty(itemCfg.resLayer3))
|
|
|
{
|
|
|
|
|
|
- updateLayerRes(itemCfg, parentObj, 3, needSetMask, showAni);
|
|
|
+ handler = UpdateLayerResAsync(itemCfg, parentObj, 3, needSetMask, showAni);
|
|
|
+ if (handler != null) handlers.Add(handler);
|
|
|
}
|
|
|
}
|
|
|
+ if(handlers.Count > 0)
|
|
|
+ {
|
|
|
+ return handlers;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
public static void RemoveItem(int itemID, GameObject sceneObj, GameObject parentObj = null)
|
|
@@ -134,159 +207,268 @@ namespace GFGGame
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static void UpdateHead(bool show, GameObject sceneObj, bool needSetMask = false, GameObject parentObj = null)
|
|
|
+ public static DressUpRemoveOperation RemoveItemAsync(int itemID, GameObject sceneObj, GameObject parentObj = null)
|
|
|
+ {
|
|
|
+ var operation = new DressUpRemoveOperation(itemID, sceneObj, parentObj);
|
|
|
+ operation.Begin();
|
|
|
+ return operation;
|
|
|
+ }
|
|
|
+
|
|
|
+ //public static void UpdateHead(bool show, GameObject sceneObj, bool needSetMask = false, GameObject parentObj = null)
|
|
|
+ //{
|
|
|
+ // var roleTf = sceneObj.transform.Find(ROLE_OBJ_NAME);
|
|
|
+ // parentObj = parentObj == null ? roleTf.gameObject : parentObj;
|
|
|
+ // string resPath = ResPathUtil.GetDressUpPath(HEAD_DEFAULT_RES_NAME);
|
|
|
+
|
|
|
+ // Transform transform_t = parentObj.transform.Find(HEAD_SPRITE_NAME);
|
|
|
+ // if (show)
|
|
|
+ // {
|
|
|
+ // if (transform_t != null)
|
|
|
+ // {
|
|
|
+ // transform_t.gameObject.SetActive(true);
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ // AddSpriteObj(resPath, HEAD_SPRITE_NAME, parentObj, 1, needSetMask);
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // if (transform_t == null)
|
|
|
+ // {
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ // transform_t.gameObject.SetActive(false);
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+
|
|
|
+ public static DressUpLayerOperation UpdateHeadAsync(bool show, GameObject sceneObj, bool needSetMask = false, GameObject parentObj = null)
|
|
|
{
|
|
|
var roleTf = sceneObj.transform.Find(ROLE_OBJ_NAME);
|
|
|
parentObj = parentObj == null ? roleTf.gameObject : parentObj;
|
|
|
- string resPath = ResPathUtil.GetDressUpPath(HEAD_DEFAULT_RES_NAME);
|
|
|
-
|
|
|
- Transform transform_t = parentObj.transform.Find(HEAD_SPRITE_NAME);
|
|
|
- if (show)
|
|
|
- {
|
|
|
- if (transform_t != null)
|
|
|
- {
|
|
|
- transform_t.gameObject.SetActive(true);
|
|
|
- return;
|
|
|
- }
|
|
|
- AddSpriteObj(resPath, "png", HEAD_SPRITE_NAME, parentObj, 1, needSetMask);
|
|
|
- }
|
|
|
- else
|
|
|
+ string res = null;
|
|
|
+ string resPath = null;
|
|
|
+ if(show)
|
|
|
{
|
|
|
- if (transform_t == null)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- transform_t.gameObject.SetActive(false);
|
|
|
+ res = HEAD_DEFAULT_RES_NAME;
|
|
|
+ resPath = ResPathUtil.GetDressUpPath(res);
|
|
|
}
|
|
|
+ DressUpLayerOperation handler = new DressUpLayerOperation(parentObj, needSetMask, false, resPath, null);
|
|
|
+ handler.InitHead();
|
|
|
+ handler.Begin();
|
|
|
+ return handler;
|
|
|
}
|
|
|
|
|
|
- public static void UpdateBody(string actionRes, GameObject sceneObj, bool needSetMask = false, GameObject parentObj = null)
|
|
|
+ //public static void UpdateBody(string actionRes, GameObject sceneObj, bool needSetMask = false, GameObject parentObj = null)
|
|
|
+ //{
|
|
|
+ // //角色
|
|
|
+ // var roleTf = sceneObj.transform.Find(ROLE_OBJ_NAME);
|
|
|
+ // parentObj = parentObj == null ? roleTf.gameObject : parentObj;
|
|
|
+
|
|
|
+ // var extPng = "png";
|
|
|
+ // if (!string.IsNullOrEmpty(actionRes))
|
|
|
+ // {
|
|
|
+ // string resPath = ResPathUtil.GetDressUpAnimationPath(actionRes);
|
|
|
+ // if (GetGameObjExisted(parentObj, BODY_ANIMATION_NAME, resPath) != null)
|
|
|
+ // {
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // string resPath = ResPathUtil.GetDressUpPath(BODY_DEFAULT_RES_NAME, extPng);
|
|
|
+ // if (GetGameObjExisted(parentObj, BODY_SPRITE_NAME, resPath) != null)
|
|
|
+ // {
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ // var removeBodyAni = TryRemoveObj(parentObj, BODY_ANIMATION_NAME);
|
|
|
+ // TryRemoveObj(parentObj, BODY_EFFECT_OBJ_NAME);
|
|
|
+ // TryRemoveObj(parentObj, BODY_SPRITE_NAME);
|
|
|
+ // if (!string.IsNullOrEmpty(actionRes))
|
|
|
+ // {
|
|
|
+
|
|
|
+ // string aniResPath = ResPathUtil.GetDressUpAnimationPath(actionRes);
|
|
|
+ // var addAniObj = AddAnimationObj(aniResPath, BODY_ANIMATION_NAME, parentObj, 0);
|
|
|
+ // //特效
|
|
|
+ // var resPath = ResPathUtil.GetDressUpEffectPath(actionRes, addAniObj != null);
|
|
|
+ // TryAddEffectObj(resPath, BODY_EFFECT_OBJ_NAME, parentObj, 0);
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // AddSpriteObj(ResPathUtil.GetDressUpPath(BODY_DEFAULT_RES_NAME), BODY_SPRITE_NAME, parentObj, 0, needSetMask);
|
|
|
+ // if (removeBodyAni)
|
|
|
+ // {
|
|
|
+ // parentObj.transform.SetPositionAndRotation(new Vector3(), new Quaternion());
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+
|
|
|
+ public static DressUpLayerOperation UpdateBodyAsync(string actionRes, GameObject sceneObj, bool needSetMask = false, GameObject parentObj = null)
|
|
|
{
|
|
|
//角色
|
|
|
var roleTf = sceneObj.transform.Find(ROLE_OBJ_NAME);
|
|
|
parentObj = parentObj == null ? roleTf.gameObject : parentObj;
|
|
|
|
|
|
var extPng = "png";
|
|
|
- if (!string.IsNullOrEmpty(actionRes))
|
|
|
+ string resPath = null;
|
|
|
+ string effectResPath = null;
|
|
|
+ string objName;
|
|
|
+ bool showAni = !string.IsNullOrEmpty(actionRes);
|
|
|
+ string aniResPath = null;
|
|
|
+ if (showAni)
|
|
|
{
|
|
|
- string resPath = ResPathUtil.GetDressUpAnimationPath(actionRes);
|
|
|
- if (GetGameObjExisted(parentObj, BODY_ANIMATION_NAME, resPath) != null)
|
|
|
+ aniResPath = ResPathUtil.GetDressUpAnimationPath(actionRes);
|
|
|
+ if(!YooAssets.CheckResExist(aniResPath))
|
|
|
{
|
|
|
- return;
|
|
|
+ showAni = false;
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
+ if(showAni)
|
|
|
{
|
|
|
- string resPath = ResPathUtil.GetDressUpPath(BODY_DEFAULT_RES_NAME, extPng);
|
|
|
- if (GetGameObjExisted(parentObj, BODY_SPRITE_NAME, resPath) != null)
|
|
|
+ resPath = aniResPath;
|
|
|
+ objName = BODY_ANIMATION_NAME;
|
|
|
+ //特效
|
|
|
+ effectResPath = ResPathUtil.GetDressUpEffectPath(actionRes, true);
|
|
|
+ if (!YooAssets.CheckResExist(effectResPath))
|
|
|
{
|
|
|
- return;
|
|
|
+ effectResPath = null;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- var removeBodyAni = TryRemoveObj(parentObj, BODY_ANIMATION_NAME);
|
|
|
- TryRemoveObj(parentObj, BODY_EFFECT_OBJ_NAME);
|
|
|
- TryRemoveObj(parentObj, BODY_SPRITE_NAME);
|
|
|
- if (!string.IsNullOrEmpty(actionRes))
|
|
|
+ else
|
|
|
{
|
|
|
- var addAniObj = AddAnimationObj(actionRes, BODY_ANIMATION_NAME, parentObj, 0);
|
|
|
- //特效
|
|
|
- TryAddEffectObj(actionRes, BODY_EFFECT_OBJ_NAME, parentObj, 0, addAniObj != null);
|
|
|
+ resPath = ResPathUtil.GetDressUpPath(BODY_DEFAULT_RES_NAME, extPng);
|
|
|
+ objName = BODY_SPRITE_NAME;
|
|
|
}
|
|
|
- else
|
|
|
+ if (GetGameObjExisted(parentObj, objName, resPath) != null || !YooAssets.CheckResExist(resPath))
|
|
|
{
|
|
|
- AddSpriteObj(ResPathUtil.GetDressUpPath(BODY_DEFAULT_RES_NAME), extPng, BODY_SPRITE_NAME, parentObj, 0, needSetMask);
|
|
|
- if (removeBodyAni)
|
|
|
- {
|
|
|
- parentObj.transform.SetPositionAndRotation(new Vector3(), new Quaternion());
|
|
|
- }
|
|
|
+ return null;
|
|
|
}
|
|
|
+ DressUpLayerOperation handler = new DressUpLayerOperation(parentObj, needSetMask, showAni, resPath, effectResPath);
|
|
|
+ handler.InitBody();
|
|
|
+ handler.Begin();
|
|
|
+ return handler;
|
|
|
}
|
|
|
|
|
|
- private static void updateLayerRes(ItemCfg itemCfg, GameObject parentObj, int layerId, bool needSetMask, bool showAni = true)
|
|
|
- {
|
|
|
+ //private static void UpdateLayerRes(ItemCfg itemCfg, GameObject parentObj, int layerId, bool needSetMask, bool showAni = true)
|
|
|
+ //{
|
|
|
+ // string res = ResPathUtil.GetDressUpItemLayerRes(itemCfg, layerId);
|
|
|
+ // string resPath = ResPathUtil.GetDressUpPath(itemCfg, layerId);
|
|
|
+ // int sortingOrder = ItemTypeCfgArray.Instance.GetSortingOrder(itemCfg.subType, layerId);
|
|
|
+
|
|
|
+ // //清理旧的
|
|
|
+ // var spritObjName = string.Format(FORMAT_SPRITE_NAME, itemCfg.subType, layerId);
|
|
|
+ // TryRemoveObj(parentObj, spritObjName);
|
|
|
+ // var objName = string.Format(FORMAT_ANIMATION_NAME, itemCfg.subType, layerId);
|
|
|
+ // TryRemoveObj(parentObj, objName);
|
|
|
+ // string ext = ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType);
|
|
|
+ // GameObject spriteObj = null;
|
|
|
+ // if (DressUpMenuItemCfg1Array.Instance.CheckIsDefaultType(itemCfg.subType))
|
|
|
+ // {
|
|
|
+ // //默认类型的部件需要先添加静态图,防止加载动画有延迟,出现光头
|
|
|
+ // spriteObj = AddSpriteObj(resPath, spritObjName, parentObj, sortingOrder, needSetMask);
|
|
|
+ // }
|
|
|
|
|
|
- ItemTypeCfg typeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
|
|
|
+ // GameObject addAniObj = null;
|
|
|
+ // if (showAni)
|
|
|
+ // {
|
|
|
+ // string aniResPath = ResPathUtil.GetDressUpAnimationPath(res);
|
|
|
+ // addAniObj = AddAnimationObj(aniResPath, objName, parentObj, sortingOrder);
|
|
|
+ // if (addAniObj != null && spriteObj != null)
|
|
|
+ // {
|
|
|
+ // var dressUpPart = addAniObj.GetComponent<DressUpPart>();
|
|
|
+ // if (dressUpPart == null)
|
|
|
+ // {
|
|
|
+ // dressUpPart = addAniObj.AddComponent<DressUpPart>();
|
|
|
+ // }
|
|
|
+ // dressUpPart.OnTimer = (obj) =>
|
|
|
+ // {
|
|
|
+ // if (parentObj != null && parentObj.transform != null)
|
|
|
+ // {
|
|
|
+ // string resPath = ResPathUtil.GetDressUpPath(itemCfg, layerId);
|
|
|
+ // spriteObj = GetGameObjExisted(parentObj, spritObjName, resPath);
|
|
|
+ // if (spriteObj != null)
|
|
|
+ // {
|
|
|
+ // PrefabManager.Instance.Restore(spriteObj);
|
|
|
+ // }
|
|
|
|
|
|
+ // //Transform tf = parentObj.transform.Find(spritObjName);
|
|
|
+ // //if (tf != null && tf.gameObject != null && tf.gameObject.activeInHierarchy)
|
|
|
+ // //{
|
|
|
+ // // var assetDisposer = tf.gameObject.GetComponent<AssetReleaser>();
|
|
|
+ // // if (assetDisposer != null)
|
|
|
+ // // {
|
|
|
+ // // if (!string.IsNullOrEmpty(assetDisposer.resPath))
|
|
|
+ // // {
|
|
|
+ // // string resPath = ResPathUtil.GetDressUpPath(itemCfg, layerId);
|
|
|
+ // // if (assetDisposer.resPath == resPath)
|
|
|
+ // // {
|
|
|
+ // // TryRemoveObj(parentObj, spritObjName);
|
|
|
+ // // }
|
|
|
+ // // }
|
|
|
+ // // }
|
|
|
+ // //}
|
|
|
+ // }
|
|
|
+ // };
|
|
|
+ // Timers.inst.Add(0.03f, 1, dressUpPart.OnTimer);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // if (spriteObj == null && addAniObj == null)
|
|
|
+ // {
|
|
|
+ // //如果两个都没有,就添加静态图
|
|
|
+ // spriteObj = AddSpriteObj(resPath, spritObjName, parentObj, sortingOrder, needSetMask);
|
|
|
+ // }
|
|
|
+ // objName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType, layerId);
|
|
|
+ // TryRemoveObj(parentObj, objName);
|
|
|
+ // resPath = ResPathUtil.GetDressUpEffectPath(res, addAniObj != null);
|
|
|
+ // TryAddEffectObj(resPath, objName, parentObj, sortingOrder);
|
|
|
+ //}
|
|
|
+
|
|
|
+ private static DressUpLayerOperation UpdateLayerResAsync(ItemCfg itemCfg, GameObject parentObj, int layerId, bool needSetMask, bool showAni = true)
|
|
|
+ {
|
|
|
string res = ResPathUtil.GetDressUpItemLayerRes(itemCfg, layerId);
|
|
|
- string resPath = ResPathUtil.GetDressUpPath(itemCfg, layerId);
|
|
|
- int sortingOrder = typeCfg.defaultLayer;
|
|
|
- if (layerId == 2)
|
|
|
+ string resPath;
|
|
|
+ string aniResPath = null;
|
|
|
+ //根据资源存在与否再次检查是否播放动画
|
|
|
+ if (showAni)
|
|
|
{
|
|
|
- sortingOrder = typeCfg.specialLayer;
|
|
|
+ aniResPath = ResPathUtil.GetDressUpAnimationPath(res);
|
|
|
+ if(!YooAssets.CheckResExist(aniResPath))
|
|
|
+ {
|
|
|
+ showAni = false;
|
|
|
+ }
|
|
|
}
|
|
|
- else if (layerId == 3)
|
|
|
+
|
|
|
+ string objName;
|
|
|
+ if (showAni)
|
|
|
{
|
|
|
- sortingOrder = typeCfg.thirdlLayer;
|
|
|
+ resPath = aniResPath;
|
|
|
+ objName = string.Format(DressUpUtil.FORMAT_ANIMATION_NAME, itemCfg.subType, layerId);
|
|
|
}
|
|
|
-
|
|
|
- //清理旧的
|
|
|
- var spritObjName = string.Format(FORMAT_SPRITE_NAME, itemCfg.subType, layerId);
|
|
|
- TryRemoveObj(parentObj, spritObjName);
|
|
|
- var objName = string.Format(FORMAT_ANIMATION_NAME, itemCfg.subType, layerId);
|
|
|
- TryRemoveObj(parentObj, objName);
|
|
|
- string ext = ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType);
|
|
|
- GameObject spriteObj = null;
|
|
|
- if (DressUpMenuItemCfg1Array.Instance.CheckIsDefaultType(itemCfg.subType))
|
|
|
+ else
|
|
|
{
|
|
|
- //默认类型的部件需要先添加静态图,防止加载动画有延迟,出现光头
|
|
|
- spriteObj = AddSpriteObj(resPath, ext, spritObjName, parentObj, sortingOrder, needSetMask);
|
|
|
+ resPath = ResPathUtil.GetDressUpPath(itemCfg, layerId);
|
|
|
+ objName = string.Format(DressUpUtil.FORMAT_SPRITE_NAME, itemCfg.subType, layerId);
|
|
|
}
|
|
|
|
|
|
- GameObject addAniObj = null;
|
|
|
- if (showAni)
|
|
|
+ var gameObj = DressUpUtil.GetGameObjExisted(parentObj, objName, resPath);
|
|
|
+ if (gameObj != null || !YooAssets.CheckResExist(resPath))
|
|
|
{
|
|
|
- addAniObj = AddAnimationObj(res, objName, parentObj, sortingOrder);
|
|
|
- if (addAniObj != null && spriteObj != null)
|
|
|
- {
|
|
|
- var dressUpPart = addAniObj.GetComponent<DressUpPart>();
|
|
|
- if (dressUpPart == null)
|
|
|
- {
|
|
|
- dressUpPart = addAniObj.AddComponent<DressUpPart>();
|
|
|
- }
|
|
|
- dressUpPart.OnTimer = (obj) =>
|
|
|
- {
|
|
|
- if (parentObj != null && parentObj.transform != null)
|
|
|
- {
|
|
|
- string resPath = ResPathUtil.GetDressUpPath(itemCfg, layerId);
|
|
|
- spriteObj = GetGameObjExisted(parentObj, spritObjName, resPath);
|
|
|
- if(spriteObj != null)
|
|
|
- {
|
|
|
- PrefabManager.Instance.Restore(spriteObj);
|
|
|
- }
|
|
|
-
|
|
|
- //Transform tf = parentObj.transform.Find(spritObjName);
|
|
|
- //if (tf != null && tf.gameObject != null && tf.gameObject.activeInHierarchy)
|
|
|
- //{
|
|
|
- // var assetDisposer = tf.gameObject.GetComponent<AssetReleaser>();
|
|
|
- // if (assetDisposer != null)
|
|
|
- // {
|
|
|
- // if (!string.IsNullOrEmpty(assetDisposer.resPath))
|
|
|
- // {
|
|
|
- // string resPath = ResPathUtil.GetDressUpPath(itemCfg, layerId);
|
|
|
- // if (assetDisposer.resPath == resPath)
|
|
|
- // {
|
|
|
- // TryRemoveObj(parentObj, spritObjName);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- //}
|
|
|
- }
|
|
|
- };
|
|
|
- Timers.inst.Add(0.03f, 1, dressUpPart.OnTimer);
|
|
|
- }
|
|
|
+ return null;
|
|
|
}
|
|
|
- if (spriteObj == null && addAniObj == null)
|
|
|
+
|
|
|
+ //特效
|
|
|
+ string effectResPath = ResPathUtil.GetDressUpEffectPath(res, showAni);
|
|
|
+ if (!YooAssets.CheckResExist(effectResPath))
|
|
|
{
|
|
|
- //如果两个都没有,就添加静态图
|
|
|
- spriteObj = AddSpriteObj(resPath, ext, spritObjName, parentObj, sortingOrder, needSetMask);
|
|
|
+ effectResPath = null;
|
|
|
}
|
|
|
- objName = string.Format(FORMAT_EFFECT_OBJ_NAME, itemCfg.subType, layerId);
|
|
|
- TryRemoveObj(parentObj, objName);
|
|
|
- TryAddEffectObj(res, objName, parentObj, sortingOrder, addAniObj != null);
|
|
|
+ DressUpLayerOperation handler = new DressUpLayerOperation(parentObj, needSetMask, showAni, resPath, effectResPath);
|
|
|
+ handler.InitLayer(itemCfg, layerId);
|
|
|
+ handler.Begin();
|
|
|
+ return handler;
|
|
|
}
|
|
|
|
|
|
- private static GameObject AddSpriteObj(string resPath, string ext, string objName, GameObject parentObj, int sortingOrder, bool needSetMask)
|
|
|
+ public static GameObject AddSpriteObj(string resPath, string objName, GameObject parentObj, int sortingOrder, bool needSetMask)
|
|
|
{
|
|
|
if (!YooAssets.CheckResExist(resPath))
|
|
|
{
|
|
@@ -334,9 +516,8 @@ namespace GFGGame
|
|
|
return gameObj;
|
|
|
}
|
|
|
|
|
|
- private static GameObject AddAnimationObj(string res, string objName, GameObject parentObj, int sortingOrder)
|
|
|
+ public static GameObject AddAnimationObj(string resPath, string objName, GameObject parentObj, int sortingOrder)
|
|
|
{
|
|
|
- string resPath = ResPathUtil.GetDressUpAnimationPath(res);
|
|
|
var gameObj = GetGameObjExisted(parentObj, objName, resPath);
|
|
|
if (gameObj != null)
|
|
|
{
|
|
@@ -372,9 +553,8 @@ namespace GFGGame
|
|
|
return gameObj;
|
|
|
}
|
|
|
|
|
|
- private static GameObject TryAddEffectObj(string res, string objName, GameObject parentObj, int sortingOrder, bool inAniDir)
|
|
|
+ public static GameObject TryAddEffectObj(string resPath, string objName, GameObject parentObj, int sortingOrder)
|
|
|
{
|
|
|
- var resPath = ResPathUtil.GetDressUpEffectPath(res, inAniDir);
|
|
|
var gameObj = GetGameObjExisted(parentObj, objName, resPath);
|
|
|
if (gameObj != null)
|
|
|
{
|
|
@@ -396,7 +576,7 @@ namespace GFGGame
|
|
|
return gameObj;
|
|
|
}
|
|
|
|
|
|
- private static bool TryRemoveObj(GameObject parentObj, string objName)
|
|
|
+ public static bool TryRemoveObj(GameObject parentObj, string objName)
|
|
|
{
|
|
|
if (parentObj == null)
|
|
|
{
|
|
@@ -415,7 +595,7 @@ namespace GFGGame
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- private static GameObject GetGameObjExisted(GameObject parentObj, string objName, string resPath)
|
|
|
+ public static GameObject GetGameObjExisted(GameObject parentObj, string objName, string resPath)
|
|
|
{
|
|
|
if (parentObj == null)
|
|
|
{
|
|
@@ -478,7 +658,7 @@ namespace GFGGame
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static void SetRenderersOrder(GameObject gameObj, int sortingOrder, bool isAdd = false)
|
|
|
+ private static void SetRenderersOrder(GameObject gameObj, int sortingOrder, bool isAdd = false)
|
|
|
{
|
|
|
var meshRenderers = gameObj.transform.GetComponentsInChildren<MeshRenderer>();
|
|
|
for (int i = 0; i < meshRenderers.Length; i++)
|
|
@@ -514,23 +694,23 @@ namespace GFGGame
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- public static void SetSpriteRenderSortingOrder(GameObject gameObj, int sortingOrder, bool isAdd = false)
|
|
|
- {
|
|
|
- SpriteRenderer[] spriteRenders = gameObj.transform.GetComponentsInChildren<SpriteRenderer>();
|
|
|
- for (int i = 0; i < spriteRenders.Length; i++)
|
|
|
- {
|
|
|
+ //public static void SetSpriteRenderSortingOrder(GameObject gameObj, int sortingOrder, bool isAdd = false)
|
|
|
+ //{
|
|
|
+ // SpriteRenderer[] spriteRenders = gameObj.transform.GetComponentsInChildren<SpriteRenderer>();
|
|
|
+ // for (int i = 0; i < spriteRenders.Length; i++)
|
|
|
+ // {
|
|
|
|
|
|
- if (isAdd)
|
|
|
- {
|
|
|
- spriteRenders[i].sortingOrder = spriteRenders[i].sortingOrder + sortingOrder;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
+ // if (isAdd)
|
|
|
+ // {
|
|
|
+ // spriteRenders[i].sortingOrder = spriteRenders[i].sortingOrder + sortingOrder;
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
|
|
|
- spriteRenders[i].sortingOrder = sortingOrder;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ // spriteRenders[i].sortingOrder = sortingOrder;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //}
|
|
|
}
|
|
|
|
|
|
}
|