zhaoyang 3 jaren geleden
bovenliggende
commit
3a99a03565

+ 2 - 2
FGUIProject/assets/DressUp/ComChecked.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<component size="446,291" anchor="true">
+<component size="446,291" opaque="false">
   <displayList>
     <image id="n9_g3xa" name="imgBox" src="xmtl51" fileName="images/pz_bjkuang.png" xy="35,35" size="375,224">
       <relation target="" sidePair="width-width,height-height"/>
@@ -10,7 +10,7 @@
     <component id="n11_g3xa" name="btnFlip" src="g3xa4j" fileName="components/Button10.xml" xy="374,0">
       <relation target="" sidePair="right-right,top-top"/>
     </component>
-    <component id="n12_g3xa" name="btnSize" src="g3xa4k" fileName="components/Button11.xml" xy="374,219">
+    <component id="n12_g3xa" name="btnSize" src="g3xa4k" fileName="components/Button11.xml" xy="410,255" pivot="0.5,0.5" anchor="true">
       <relation target="" sidePair="right-right,bottom-bottom"/>
     </component>
   </displayList>

+ 14 - 7
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)
+        public static void AddItem(int itemID, GameObject sceneObj, bool needSetMask = false, bool showAni = true, GameObject parentObj = null, int layer = -1)
         {
             ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
             if (itemCfg != null)
@@ -34,16 +34,23 @@ namespace GFGGame
                         parentObj = role.gameObject;
                     }
                 }
-                //普通层
-                if (itemCfg.resLayer1 > 0)
+                if (layer > 0)
                 {
-                    updateLayerRes(itemCfg, parentObj, 1, itemCfg.resLayer1 == 2, needSetMask, showAni);
+                    updateLayerRes(itemCfg, parentObj, layer, itemCfg.resLayer1 == 2, needSetMask, showAni);
                 }
-                //特殊层
-                if (itemCfg.resLayer2 > 0)
+                else
                 {
+                    //普通层
+                    if (itemCfg.resLayer1 > 0)
+                    {
+                        updateLayerRes(itemCfg, parentObj, 1, itemCfg.resLayer1 == 2, needSetMask, showAni);
+                    }
+                    //特殊层
+                    if (itemCfg.resLayer2 > 0)
+                    {
 
-                    updateLayerRes(itemCfg, parentObj, 2, itemCfg.resLayer2 == 2, needSetMask, showAni);
+                        updateLayerRes(itemCfg, parentObj, 2, itemCfg.resLayer2 == 2, needSetMask, showAni);
+                    }
                 }
                 //特效
                 if (itemCfg.effLayer > 0 && showAni)

+ 37 - 18
GameClient/Assets/Game/HotUpdate/DressUp/SceneController.cs

@@ -182,7 +182,11 @@ namespace GFGGame
             Transform tf = sceneObj.transform.Find(objName);
             tf.position = Vector3.zero;
             SpriteRenderer spr = tf.GetComponent<SpriteRenderer>();
-
+            if (spr == null)
+            {
+                tf.gameObject.AddComponent<SpriteRenderer>();
+                spr = tf.GetComponent<SpriteRenderer>();
+            }
             DressUpUtil.ChangeAssetReleaser(tf.gameObject, resPath);
             Sprite sp = GFGAsset.Load<Sprite>(resPath);
             spr.sprite = sp;
@@ -202,13 +206,13 @@ namespace GFGGame
         //添加碰撞盒
         public static void PhotographAddCollider(GameObject gameObject)
         {
-            PolygonCollider2D polygonCollider2D = gameObject.GetComponent<PolygonCollider2D>();
+            BoxCollider2D polygonCollider2D = gameObject.GetComponent<BoxCollider2D>();
             if (polygonCollider2D != null)
             {
                 GameObject.Destroy(polygonCollider2D);
             }
 
-            polygonCollider2D = gameObject.AddComponent<PolygonCollider2D>();
+            polygonCollider2D = gameObject.AddComponent<BoxCollider2D>();
             polygonCollider2D.isTrigger = true;
 
         }
@@ -217,15 +221,35 @@ namespace GFGGame
         //场景添加单个道具
         public static void AddScene(GameObject sceneObj, int itemId, int index)
         {
-            var parentGameObj = new GameObject(string.Format("{0}_{1}", itemId, index));
-            parentGameObj.transform.SetParent(sceneObj.transform.Find("Scene"), false);
+            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);
+                SceneController.PhotographAddCollider(parentGameObj.transform.GetChild(0).gameObject);
 
-            DressUpUtil.AddItem(itemId, sceneObj, false, false, parentGameObj);
-            for (int i = 0; i < parentGameObj.transform.childCount; i++)
+            }
+            //特殊层
+            if (itemCfg.resLayer2 > 0)
             {
-                GameObject childGameObj = parentGameObj.transform.GetChild(i).gameObject;
-                SceneController.PhotographAddCollider(childGameObj);
+                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);
+
             }
+            // for (int i = 0; i < parentGameObj.transform.childCount; i++)
+            // {
+            //     var parentGameObj = new GameObject(string.Format("{0}_{1}", itemId, index));
+            //     parentGameObj.transform.SetParent(sceneObj.transform.Find("Scene"), false);
+
+            // DressUpUtil.AddItem(itemId, sceneObj, false, false, parentGameObj);
+
+            // GameObject childGameObj = parentGameObj.transform.GetChild(i).gameObject;
+            // SceneController.PhotographAddCollider(childGameObj);
+            // }
         }
         //传入父物体,根据所有子物体大小计算父物体边框大小
         public static Vector2 GetGameObjectSize(GameObject parentObj)
@@ -234,18 +258,13 @@ namespace GFGGame
             for (int i = 0; i < parentObj.transform.childCount; i++)
             {
                 GameObject childGameObj = parentObj.transform.GetChild(i).gameObject;
-                Vector2 childSize = childGameObj.GetComponent<SpriteRenderer>().size;
-
-                if (size.x <= childSize.x)
-                {
-                    size.x = childSize.x;
-                }
-                if (size.y <= childSize.y)
+                BoxCollider2D boxCollider2D = childGameObj.GetComponent<BoxCollider2D>();
+                if (boxCollider2D != null)
                 {
-                    size.y = childSize.y;
+                    return boxCollider2D.size * 100;
                 }
             }
-            return size * 100;
+            return Vector2.zero;
         }
         //设置物体中心点
         public static void SetGameObjectCenter(GameObject parentObj)

+ 65 - 6
GameClient/Assets/Game/HotUpdate/Views/DressUp/PhotographView.cs

@@ -30,7 +30,9 @@ namespace GFGGame
         private List<int> _listData = null;//当前选择的资源数据
         private List<int> _equipRoleData = new List<int>();//当前穿戴的角色数据
         private Dictionary<int, List<int>> _equipSceneData = new Dictionary<int, List<int>>();//当前穿戴的场景数据
-
+        private Dictionary<GameObject, Vector2> _equipPos = new Dictionary<GameObject, Vector2>();
+        private Dictionary<GameObject, Vector2> _mousePos = new Dictionary<GameObject, Vector2>();
+        private Dictionary<GameObject, float> _equipDistance = new Dictionary<GameObject, float>();
         // private GameObject hitGameObj;//当前选中的物体
         private GameObject hitParentGameObj;//当前选中的父物体(需要进行移动缩放旋转的物体)
         private GameObject memoryHitParentGameObj;//当前选中的父物体(需要进行移动缩放旋转的物体)
@@ -44,6 +46,9 @@ namespace GFGGame
         private SwipeGesture swipeGesture;
         private PinchGesture pinchGesture;
         private RotationGesture rotationGesture;
+
+        private bool isTouchUI = false;
+
         protected override void OnInit()
         {
             base.OnInit();
@@ -56,6 +61,7 @@ namespace GFGGame
             _ui.m_btnChoose.onClick.Add(OnClickBtnChoose);
             _ui.m_btnBack.onClick.Add(OnClickBtnBack);
             _ui.m_comSelectBox.m_btnDelete.onClick.Add(OnClickBtnDelete);
+            _ui.m_comSelectBox.m_btnFlip.onClick.Add(OnClickBtnFlip);
             _ui.m_btnPhotograph.onClick.Add(OnClickBtnPhotograph);
 
             _ui.m_ComSelectRes.m_list.itemRenderer = RenderListItem;
@@ -179,7 +185,7 @@ namespace GFGGame
             context.CaptureTouch();
             if (_ui.m_ComSelectRes.target.visible == true) return;
             if (context.inputEvent.touchId != 0) return;
-
+            if (isTouchUI) return;
             RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
             if (hit.collider != null)
             {
@@ -187,6 +193,8 @@ namespace GFGGame
                 hitParentGameObj = hit.collider.name == "BgRes" ? hit.collider.gameObject : hit.collider.transform.parent.gameObject;
                 distance = Input.mousePosition - Camera.main.WorldToScreenPoint(hitParentGameObj.transform.position);
 
+
+
                 _ui.m_comSelectBox.target.visible = hitParentGameObj.transform.parent.gameObject == bgParent ? false : true;
                 if (_ui.m_comSelectBox.target.data == null || _ui.m_comSelectBox.target.data as GameObject != hitParentGameObj)
                 {
@@ -195,8 +203,14 @@ namespace GFGGame
                     _ui.m_comSelectBox.target.rotation = -hitParentGameObj.transform.eulerAngles.z;
                     _ui.m_comSelectBox.target.size = SceneController.GetGameObjectSize(hitParentGameObj);
                     _ui.m_comSelectBox.target.SetScale(hitParentGameObj.transform.localScale.x, hitParentGameObj.transform.localScale.y);
+
                 }
+                _ui.m_comSelectBox.m_btnDelete.visible = true;
+                if (hitParentGameObj == bodyParent)
+                {
+                    _ui.m_comSelectBox.m_btnDelete.visible = false;
 
+                }
                 _ui.m_comSelectBox.target.data = hitParentGameObj;
 
                 ControllerSelectBoxPos(hitParentGameObj);
@@ -208,7 +222,9 @@ namespace GFGGame
         {
             if (hitParentGameObj == null) return;//未选中任何物体
             if (Stage.inst.touchCount > 1) return;//只监听1根手指
+            if (isTouchUI) return;
 
+            Debug.Log("拖动");
             ControllerObjectPos(hitParentGameObj);
             ControllerSelectBoxPos(hitParentGameObj);
 
@@ -265,11 +281,26 @@ namespace GFGGame
 
         private void OnClickBtnSizeBegin(EventContext context)
         {
+            isTouchUI = true;
+
             GameObject gameObject = _ui.m_comSelectBox.target.data as GameObject;
             InputEvent inputEvent = (InputEvent)context.data;
 
-            Vector2 pt1 = _ui.m_comSelectBox.target.size;// this.viewCom.GlobalToLocal(screenPos); ;
-            _startDistance = Mathf.Sqrt(pt1.x * pt1.x + pt1.y * pt1.y) / 2;// Vector2.Distance(pt1, pt2);
+            Vector2 screenPos = this.viewCom.GlobalToLocal(_ui.m_comSelectBox.m_btnSize.LocalToGlobal(Vector2.zero));
+            Vector2 pt = new Vector2(screenPos.x, screenPos.y);
+            // Vector2 pt1 = this.viewCom.GlobalToLocal(new Vector2(inputEvent.x, inputEvent.y));
+            Vector2 pt2 = this.viewCom.GlobalToLocal(new Vector2(_ui.m_comSelectBox.target.x, _ui.m_comSelectBox.target.y));
+            // Debug.Log("pt1" + pt1 + "   pt2:" + pt2 + "   pt:" + pt);
+
+            if (!_equipDistance.ContainsKey(gameObject))
+            {
+                float distance = Vector2.Distance(pt, pt2);
+                _equipDistance.Add(gameObject, distance);
+            }
+            _startDistance = _equipDistance[gameObject];
+            // _startDistance = Vector2.Distance(pt1, pt2);
+            // Vector2 pt1 = _ui.m_comSelectBox.target.size;// this.viewCom.GlobalToLocal(screenPos); ;
+            // _startDistance = Vector2.Distance(pt, pt2);
             Debug.Log("_startDistance:" + _startDistance);
 
         }
@@ -293,13 +324,15 @@ namespace GFGGame
             Debug.Log("dist:" + dist);
 
             float ss = dist / _startDistance;
+            //   float local = _equipDistance[gameObject] * gameObject.transform.localScale.x * ss / _equipDistance[gameObject];
             float newValue = Mathf.Clamp(ss, 0.1f, 2);
             ControllerScale(newValue, gameObject);
 
         }
         private void OnClickBtnSizeEnd(EventContext context)
         {
-
+            isTouchUI = false;
+            lastPos = Vector2.zero;
         }
 
 
@@ -321,7 +354,9 @@ namespace GFGGame
         {
             if (value > MaxScale || value < MinScale) return;
             gameObject.transform.localScale = new Vector3(value, value, value);
-            _ui.m_comSelectBox.target.SetScale(value, value);
+
+            Vector2 size = SceneController.GetGameObjectSize(gameObject);
+            _ui.m_comSelectBox.target.SetSize(size.x * value, size.y * value);
         }
 
         private void OnRotate(EventContext context)
@@ -414,9 +449,33 @@ namespace GFGGame
             _ui.m_comSelectBox.target.visible = false;
             hitParentGameObj = null;
         }
+        private void OnClickBtnFlip()
+        {
+            GameObject gameObject = _ui.m_comSelectBox.target.data as GameObject;
+            gameObject.transform.GetChild(0).Rotate(Vector3.up, 180, Space.World);
+
+            // gameObject.transform.rotation.x = 180;
+        }
         private void OnClickBtnDelete()
         {
             GameObject gameObject = _ui.m_comSelectBox.target.data as GameObject;
+            if (gameObject.transform.gameObject == bodyParent)
+            {
+                return;
+            }
+            else if (gameObject.transform.gameObject == npcParent)
+            {
+                SpriteRenderer spriteRenderer = gameObject.transform.GetChild(0).GetComponent<SpriteRenderer>();
+                if (spriteRenderer != null)
+                {
+                    GameObject.Destroy(spriteRenderer);
+                }
+            }
+            else
+            {
+                GameObject.DestroyImmediate(gameObject);
+            }
+            _ui.m_comSelectBox.target.visible = false;
 
         }
         private void OnClickBtnPhotograph()

BIN
GameClient/Assets/ResIn/UI/DressUp/DressUp_fui.bytes