Browse Source

拍照优化

zhaoyang 3 years ago
parent
commit
eeaaf7cea9

+ 1 - 1
GameClient/Assets/Game/HotUpdate/Data/Cache/LuckyBoxBonusDataCache.cs

@@ -65,7 +65,7 @@ namespace GFGGame
             List<ItemData> bonusList = null;
             if (isGuide)
             {
-                List<ItemData> guideBonusList = ItemUtil.CreateItemDataList("10070*1;10071*1;10072*1");
+                List<ItemData> guideBonusList = ItemUtil.CreateItemDataList("10003*1;10004*1;10006*1;10007*1");
                 count = count - guideBonusList.Count;
                 bonusList = DropOutDataCache.GetDropItemDatas(_dropOutId, count);
                 while (guideBonusList.Count > 1)

+ 5 - 9
GameClient/Assets/Game/HotUpdate/DressUp/DressUpUtil.cs

@@ -15,7 +15,7 @@ namespace GFGGame
         private const string FORMAT_EFFECT_OBJ_NAME = "T{0}_eff";
         private const string FORMAT_LAYER_RES_NAME_WITH_T = "{0}_t";
 
-        public static void AddItem(int itemID, GameObject sceneObj, bool needSetMask = false, bool showAni = true, GameObject parentObj = null, int layerId = int.MinValue, int layer = int.MinValue)
+        public static void AddItem(int itemID, GameObject sceneObj, bool needSetMask = false, bool showAni = true, GameObject parentObj = null, int layerId = int.MinValue)
         {
             ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
             if (itemCfg != null)
@@ -36,20 +36,20 @@ namespace GFGGame
                 }
                 if (layerId > int.MinValue)
                 {
-                    updateLayerRes(itemCfg, parentObj, layerId, layerId == 2, needSetMask, showAni, layer);
+                    updateLayerRes(itemCfg, parentObj, layerId, layerId == 2, needSetMask, showAni);
                 }
                 else
                 {
                     //普通层
                     if (itemCfg.resLayer1 > 0)
                     {
-                        updateLayerRes(itemCfg, parentObj, 1, itemCfg.resLayer1 == 2, needSetMask, showAni, layer);
+                        updateLayerRes(itemCfg, parentObj, 1, itemCfg.resLayer1 == 2, needSetMask, showAni);
                     }
                     //特殊层
                     if (itemCfg.resLayer2 > 0)
                     {
 
-                        updateLayerRes(itemCfg, parentObj, 2, itemCfg.resLayer2 == 2, needSetMask, showAni, layer);
+                        updateLayerRes(itemCfg, parentObj, 2, itemCfg.resLayer2 == 2, needSetMask, showAni);
                     }
                 }
 
@@ -180,7 +180,7 @@ namespace GFGGame
             assetDisposer.resPath = resPath;
         }
 
-        private static void updateLayerRes(ItemCfg itemCfg, GameObject parentObj, int layerId, bool isT, bool needSetMask, bool showAni = true, int layer = int.MinValue)
+        private static void updateLayerRes(ItemCfg itemCfg, GameObject parentObj, int layerId, bool isT, bool needSetMask, bool showAni = true)
         {
 
             ItemTypeCfg typeCfg = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType);
@@ -191,10 +191,6 @@ namespace GFGGame
             {
                 sortingOrder = typeCfg.specialLayer;
             }
-            if (layer > int.MinValue)
-            {
-                sortingOrder = layer;
-            }
             if (isT)
             {
                 res = string.Format(FORMAT_LAYER_RES_NAME_WITH_T, res);

+ 23 - 61
GameClient/Assets/Game/HotUpdate/DressUp/SceneController.cs

@@ -169,31 +169,9 @@ namespace GFGGame
 
         }
 
-        public static void UpdatePhotographBgOrNpcOrBorder(GameObject sceneObj, EnumPhotographType type, int itemId, int maxlayer, out int maxLayer)
+        public static void UpdatePhotographBgOrNpcOrBorder(GameObject sceneObj, int itemId, Transform tf, string resPath)
         {
-            maxLayer = maxlayer;
-            string objName = "";
-            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
-            var resPath = ""; ResPathUtil.GetDressUpPath(itemCfg.res, ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType));
-            if (type == EnumPhotographType.BG)
-            {
-                objName = "Bg/BgRes";
-                resPath = ResPathUtil.GetDressUpPath(itemCfg.res, ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType));
-            }
-            else if (type == EnumPhotographType.NPC)
-            {
-                objName = "Scene/Npc/NpcRes";
-                resPath = ResPathUtil.GetNpcPicFPath(itemCfg.res);
-
-            }
-            else if (type == EnumPhotographType.BORDER)
-            {
-                objName = "Border/BorderRes";
-                resPath = ResPathUtil.GetDressUpPath(itemCfg.res, ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType));
-
-            }
-
-            Transform tf = sceneObj.transform.Find(objName);
+            // Transform tf = sceneObj.transform.Find(objName);
             tf.position = Vector3.zero;
             SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
             if (spr == null)
@@ -205,26 +183,10 @@ namespace GFGGame
             Sprite sp = GFGAsset.Load<Sprite>(resPath);
             spr.sprite = sp;
             spr.size = spr.sprite.bounds.size;//将节点设置为原图大小
-
-            if (type == EnumPhotographType.BG)
-            {
-                ItemTypeCfg typeCfg = ItemTypeCfgArray.Instance.GetCfg(ConstDressUpItemType.BEI_JING);
-                spr.sortingOrder = typeCfg.defaultLayer;
-
-            }
-            if (type == EnumPhotographType.NPC)
-            {
-                maxlayer++;
-                maxLayer = maxlayer;
-                spr.sortingOrder = maxLayer;
-            }
-            if (type != EnumPhotographType.BORDER)//边框不加碰撞盒
-            {
-
-                PhotographAddCollider(tf.gameObject);
-            }
+            ItemTypeCfg typeCfg = ItemTypeCfgArray.Instance.GetCfg(ConstDressUpItemType.BEI_JING);
 
         }
+
         //添加碰撞盒
         public static void PhotographAddCollider(GameObject gameObject)
         {
@@ -241,27 +203,27 @@ namespace GFGGame
 
 
         //场景添加单个道具
-        public static void AddItemToScene(GameObject sceneObj, int itemId, int index, int resLayer = int.MinValue)
+        public static void AddItemToScene(GameObject sceneObj, GameObject parentGameObj, int itemId, int layerId)
         {
             ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
-            //普通层
-            if (itemCfg.resLayer1 > 0)
-            {
-                var parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemId, index, itemCfg.resLayer1));
-                parentGameObj.transform.SetParent(sceneObj.transform.Find("Scene"), false);
-                DressUpUtil.AddItem(itemId, sceneObj, false, false, parentGameObj, itemCfg.resLayer1, resLayer);
-                SceneController.PhotographAddCollider(parentGameObj.transform.GetChild(0).gameObject);
-
-            }
-            //特殊层
-            if (itemCfg.resLayer2 > 0)
-            {
-                var parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemId, index, itemCfg.resLayer2));
-                parentGameObj.transform.SetParent(sceneObj.transform.Find("Scene"), false);
-                DressUpUtil.AddItem(itemId, sceneObj, false, false, parentGameObj, itemCfg.resLayer2, resLayer);
-                SceneController.PhotographAddCollider(parentGameObj.transform.GetChild(0).gameObject);
-
-            }
+            // //普通层
+            // if (itemCfg.resLayer1 > 0)
+            // {
+            //     var parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemId, index, itemCfg.resLayer1));
+            parentGameObj.transform.SetParent(sceneObj.transform.Find("Scene"), false);
+            DressUpUtil.AddItem(itemId, sceneObj, false, false, parentGameObj, layerId);
+            SceneController.PhotographAddCollider(parentGameObj.transform.GetChild(0).gameObject);
+
+            // }
+            // //特殊层
+            // if (itemCfg.resLayer2 > 0)
+            // {
+            //     var parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemId, index, itemCfg.resLayer2));
+            //     parentGameObj.transform.SetParent(sceneObj.transform.Find("Scene"), false);
+            //     DressUpUtil.AddItem(itemId, sceneObj, false, false, parentGameObj, itemCfg.resLayer2);
+            //     SceneController.PhotographAddCollider(parentGameObj.transform.GetChild(0).gameObject);
+
+            // }
 
         }
         //传入父物体,根据所有子物体大小计算父物体边框大小

+ 138 - 30
GameClient/Assets/Game/HotUpdate/Views/DressUp/PhotographView.cs

@@ -47,7 +47,7 @@ namespace GFGGame
         private PinchGesture pinchGesture;
         private RotationGesture rotationGesture;
 
-        private bool isTouchUI = false;//点击在m_comSelectBox按钮上
+        // private bool isTouchUI = false;//点击在m_comSelectBox按钮上
         private bool isTwoTouchPoint = false;
         private int maxLayer = int.MinValue;//最上层的层级数
         protected override void OnInit()
@@ -112,10 +112,11 @@ namespace GFGGame
             RefreshList(EnumPhotographType.BG);
             DisposeEquipData();
 
-            SceneController.UpdatePhotographBgOrNpcOrBorder(_sceneObject, EnumPhotographType.BG, equipDataCache.bgId, maxLayer, out maxLayer);
+            // SceneController.UpdatePhotographBgOrNpcOrBorder(_sceneObject, EnumPhotographType.BG, equipDataCache.bgId);
 
+            UpdateBg(ItemCfgArray.Instance.GetCfg(equipDataCache.bgId));
             UpdateBody();
-            UpdateScene();
+            AddEquipTiemToScene();
 
         }
         /************************************************************UI界面*********************************************************/
@@ -161,34 +162,54 @@ namespace GFGGame
         private void OnListItemClick(EventContext context)
         {
             int itemID = (int)((context.data as GObject).data);
+            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
+
             EnumPhotographType type = (EnumPhotographType)_ui.m_ComSelectRes.m_comBtnTab.m_c1.selectedIndex;
+
             switch (type)
             {
                 case EnumPhotographType.BG:
+                    UpdateBg(itemCfg);
+                    break;
+
                 case EnumPhotographType.BORDER:
+                    if (_listData.IndexOf(itemID) == 0)
+                    {
+                        Transform tf = _sceneObject.transform.Find("Border/BorderRes");
+                        SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
+                        if (spr != null)
+                        {
+                            GameObject.Destroy(spr);
+                        }
+                        return;
+                    }
+                    UpdateBorder(itemCfg);
+                    break;
+
                 case EnumPhotographType.NPC:
-                    SceneController.UpdatePhotographBgOrNpcOrBorder(_sceneObject, type, itemID, maxLayer, out maxLayer);
+
+                    UpdateNpc(itemCfg);
                     break;
 
                 case EnumPhotographType.SCENE:
 
-                    PhotographDataManager.Instance.AddEquipItem(_equipSceneData, itemID, out _equipSceneData);
-                    SceneController.AddItemToScene(_sceneObject, itemID, _equipSceneData[itemID].Count - 1, maxLayer + 1);
-                    maxLayer++;
+                    UpdateScene(itemCfg, false, maxLayer);
                     break;
                 case EnumPhotographType.EFFECT:
 
                     break;
             }
         }
-        /**************************  **********************************场景*********************************************************/
+        /************************************************************场景*********************************************************/
 
         private void OnTouchUIBegin(EventContext context)
         {
             context.CaptureTouch();
             if (_ui.m_ComSelectRes.target.visible == true) return;
-            if (Stage.inst.touchCount > 1 || context.inputEvent.touchId != 0 || isTwoTouchPoint) return;//只监听一根手指
-            if (isTouchUI) return;
+            //两根手指点击屏幕||两根手指点过屏幕
+            if (Stage.inst.touchCount > 1 || isTwoTouchPoint) return;//只监听一根手指
+
+            if (IsTouchUI) return;
 
             RaycastHit2D[] hit2Ds = Physics2D.RaycastAll(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
             if (hit2Ds.Length > 0)
@@ -229,7 +250,7 @@ namespace GFGGame
         {
             if (hitParentGameObj == null) return;//未选中任何物体
             if (Stage.inst.touchCount > 1 || context.inputEvent.touchId != 0 || isTwoTouchPoint) return; //只监听1根手指
-            if (isTouchUI) return;
+            if (IsTouchUI) return;
 
             Debug.Log("拖动");
             ControllerObjectPos();
@@ -293,7 +314,7 @@ namespace GFGGame
 
         private void OnTouchBtnSizeBegin(EventContext context)
         {
-            isTouchUI = true;
+            // isTouchUI = true;
 
             GameObject gameObject = _ui.m_comSelectBox.target.data as GameObject;
             InputEvent inputEvent = (InputEvent)context.data;
@@ -338,7 +359,7 @@ namespace GFGGame
         }
         private void OnTouchBtnSizeEnd(EventContext context)
         {
-            isTouchUI = false;
+            // isTouchUI = false;
             lastPos = Vector2.zero;
         }
 
@@ -347,17 +368,18 @@ namespace GFGGame
         //双指缩放
         private void OnPinch(EventContext context)
         {
-            if (hitParentGameObj == null) return;
-            if (hitParentGameObj.name == "BgRes") return;//背景不可以缩放、旋转
+            GameObject gameObject = _ui.m_comSelectBox.target.data as GameObject;
+            // if (hitParentGameObj == null) return;
+            if (gameObject.name == "BgRes") return;//背景不可以缩放、旋转
             isTwoTouchPoint = true;
 
-            GTween.Kill(hitParentGameObj);
+            GTween.Kill(gameObject);
 
             PinchGesture gesture = (PinchGesture)context.sender;
-            float newValue = Mathf.Clamp(hitParentGameObj.transform.localScale.x + gesture.delta, 0.3f, 2);
+            float newValue = Mathf.Clamp(gameObject.transform.localScale.x + gesture.delta, 0.3f, 2);
             Debug.Log("双指缩放:" + newValue);
 
-            ControllerScale(newValue, hitParentGameObj);
+            ControllerScale(newValue, gameObject);
         }
 
         private void ControllerScale(float value, GameObject gameObject)
@@ -371,17 +393,18 @@ namespace GFGGame
 
         private void OnRotate(EventContext context)
         {
-            if (hitParentGameObj == null) return;
-            if (hitParentGameObj.name == "BgRes") return;//背景不可以缩放、旋转
+            GameObject gameObject = _ui.m_comSelectBox.target.data as GameObject;
+            // if (hitParentGameObj == null) return;
+            if (gameObject.name == "BgRes") return;//背景不可以缩放、旋转
             isTwoTouchPoint = true;
 
 
-            GTween.Kill(hitParentGameObj.transform);
+            GTween.Kill(gameObject.transform);
 
             RotationGesture gesture = (RotationGesture)context.sender;
             Debug.Log("双指旋转:" + gesture.delta);
 
-            ControllerRotate(gesture.delta, hitParentGameObj);
+            ControllerRotate(gesture.delta, gameObject);
         }
         private void ControllerRotate(float value, GameObject gameObject)
         {
@@ -389,23 +412,100 @@ namespace GFGGame
             _ui.m_comSelectBox.target.rotation += value;
         }
 
+
+        private void UpdateBg(ItemCfg itemCfg)
+        {
+            Transform tf = _sceneObject.transform.Find("Bg/BgRes");
+            string resPath = ResPathUtil.GetDressUpPath(itemCfg.res, ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType));
+            SceneController.UpdatePhotographBgOrNpcOrBorder(_sceneObject, itemCfg == null ? equipDataCache.bgId : itemCfg.id, tf, resPath);
+            SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
+            spr.sortingOrder = ItemTypeCfgArray.Instance.GetCfg(ConstDressUpItemType.BEI_JING).defaultLayer;
+            SceneController.PhotographAddCollider(tf.gameObject);
+        }
+        private void UpdateNpc(ItemCfg itemCfg)
+        {
+            maxLayer++;
+            Transform tf = _sceneObject.transform.Find("Scene/Npc/NpcRes");
+            string resPath = ResPathUtil.GetNpcPicFPath(itemCfg.res);
+            SceneController.UpdatePhotographBgOrNpcOrBorder(_sceneObject, itemCfg.id, tf, resPath);
+            SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
+            spr.sortingOrder = maxLayer;
+            SceneController.PhotographAddCollider(tf.gameObject);
+        }
+        private void UpdateBorder(ItemCfg itemCfg)
+        {
+            Transform tf = _sceneObject.transform.Find("Border/BorderRes");
+            string resPath = ResPathUtil.GetPhotographFPath(itemCfg.res, ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType));
+            SceneController.UpdatePhotographBgOrNpcOrBorder(_sceneObject, itemCfg.id, tf, resPath);
+            SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
+            spr.sortingOrder = 1000;
+            // float width = UnityEngine.Screen.width / spr.bounds.size.x;
+            // float height = UnityEngine.Screen.height / spr.bounds.size.y;
+            // spr.size = new Vector2(spr.size.x * width, spr.size.y * height);
+
+        }
+        private void UpdateScene(ItemCfg itemCfg, bool isDefaultLayer, int layer)
+        {
+
+            maxLayer = layer < maxLayer ? maxLayer : layer;
+            if (!isDefaultLayer)
+            {
+                maxLayer = layer + 1;
+                layer = maxLayer;
+            }
+            int index = 0;
+
+            GameObject parentGameObj;
+            if (itemCfg.resLayer1 > 0)
+            {
+                if (!isDefaultLayer)
+                {
+                    PhotographDataManager.Instance.AddEquipItem(_equipSceneData, itemCfg.id, out _equipSceneData);
+                }
+                index = _equipSceneData[itemCfg.id].Count - 1;
+
+                parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemCfg.id, index, 0));
+                SceneController.AddItemToScene(_sceneObject, parentGameObj, itemCfg.id, itemCfg.resLayer1);
+                SpriteRenderer spr = parentGameObj.transform.GetChild(0).GetComponent<SpriteRenderer>();
+                spr.sortingOrder = layer;
+
+            }
+            if (itemCfg.resLayer2 > 0)
+            {
+                if (!isDefaultLayer)
+                {
+                    PhotographDataManager.Instance.AddEquipItem(_equipSceneData, itemCfg.id, out _equipSceneData);
+                }
+                index = _equipSceneData[itemCfg.id].Count - 1;
+                parentGameObj = new GameObject(string.Format("{0}_{1}_{2}", itemCfg.id, index, 1));
+                SceneController.AddItemToScene(_sceneObject, parentGameObj, itemCfg.id, itemCfg.resLayer2);
+                SpriteRenderer spr = parentGameObj.transform.GetChild(0).GetComponent<SpriteRenderer>();
+                spr.sortingOrder = layer;
+            }
+
+
+        }
         //主角
         private void UpdateBody()
         {
 
             SceneController.UpdatePhotographBody(_equipRoleData.ToArray(), _sceneObject, false, null, false, bodyParent);
+            int layer = _sceneObject.transform.Find("Scene/Role/Body").GetComponent<SpriteRenderer>().sortingOrder;
+            maxLayer = layer < maxLayer ? maxLayer : layer;
         }
-        //场景道具
-        private void UpdateScene()
+        //添加初始场景道具
+        private void AddEquipTiemToScene()
         {
             ICollection keys = _equipSceneData.Keys;
             foreach (int key in keys)
             {
                 for (int i = 0; i < _equipSceneData[key].Count; i++)
                 {
-                    SceneController.AddItemToScene(_sceneObject, key, i);
+                    //  SceneController.AddItemToScene(_sceneObject, key, i);
                     ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(key);
-                    PhotographDataManager.Instance.GetMaxLayer(maxLayer, false, itemCfg, out maxLayer);
+                    int defaultLayer = ItemTypeCfgArray.Instance.GetCfg(itemCfg.subType).defaultLayer;
+                    UpdateScene(itemCfg, true, defaultLayer);
+                    // PhotographDataManager.Instance.GetMaxLayer(maxLayer, false, itemCfg, out maxLayer);
                 }
             }
         }
@@ -416,7 +516,15 @@ namespace GFGGame
         {
 
         }
+        private bool IsTouchUI
+        {
+            get
+            {
+                GObject obj = GRoot.inst.touchTarget;
 
+                return _ui.m_comSelectBox.m_btnSize.GetChild("icon").asLoader == obj || _ui.m_comSelectBox.m_btnDelete.GetChild("icon").asLoader == obj || _ui.m_comSelectBox.m_btnFlip.GetChild("icon").asLoader == obj || _ui.m_btnBack == obj || _ui.m_btnChoose.GetChild("icon").asLoader == obj || _ui.m_btnPhotograph.GetChild("icon").asLoader == obj;
+            }
+        }
 
 
         private void DisposeEquipData()
@@ -449,7 +557,7 @@ namespace GFGGame
         }
         private void OnTouchBtnFlipBegin()
         {
-            isTouchUI = true;
+            // isTouchUI = true;
             Transform transform = (_ui.m_comSelectBox.target.data as GameObject).transform;
             for (int i = 0; i < transform.childCount; i++)
             {
@@ -458,12 +566,12 @@ namespace GFGGame
         }
         private void OnTouchBtnFlipEnd()
         {
-            isTouchUI = false;
+            // isTouchUI = false;
         }
 
         private void OnTouchBtnDeleteBegin()
         {
-            isTouchUI = true;
+            // isTouchUI = true;
             GameObject gameObject = _ui.m_comSelectBox.target.data as GameObject;
             if (gameObject.transform.gameObject == bodyParent)
             {
@@ -486,7 +594,7 @@ namespace GFGGame
         }
         private void OnTouchBtnDeleteEnd()
         {
-            isTouchUI = false;
+            // isTouchUI = false;
         }
         private void OnClickBtnPhotograph()
         {