static void drawPackedTexture(Iso2DObject _Iso2D, float _fMaxWidth)
        {
            if (_Iso2D == null)
            {
                return;
            }

            // Vector2 GUIPoint = EditorGUIUtility.GUIToScreenPoint(new Vector2(_rt.x, _rt.y));
            // Rect __rt = new Rect(_rt.xMin + GUIPoint.x, _rt.yMin + GUIPoint.y, _rt.xMax + GUIPoint.x, _rt.yMax + GUIPoint.y);

            // EditorGUI.DrawRect(__rt, Color.gray);
            EditorGUILayout.BeginVertical();
            //GUILayout.BeginArea(_rt);
            EditorGUI.indentLevel = 0;

            EditorGUILayout.LabelField("[Sprite]", EditorStyles.boldLabel, GUILayout.MaxWidth(_fMaxWidth));
            GUILayoutOption[] _options = new GUILayoutOption[] {
                GUILayout.MinWidth(20), GUILayout.Width(_fMaxWidth),
                GUILayout.MinHeight(20), GUILayout.Height(_fMaxWidth)
            };
            DrawSideSprite(EditorGUILayout.GetControlRect(_options), _Iso2D, false, false);
            EditorGUILayout.Separator();

            Util.CustomEditorGUI.ShowPackInfo(_Iso2D.sprr.sprite, GUILayout.MaxWidth(_fMaxWidth));
            EditorGUILayout.Separator();
            //GUILayout.EndArea();
            EditorGUILayout.EndVertical();
        }
 static void Undo_Iso2DSpriteField(Iso2DObject _obj, Color _color)
 {
     using (new GUIBackgroundColorScope(_color))
     {
         using (var result = new EditorGUI.ChangeCheckScope())
         {
             Sprite _newSprite = (Sprite)EditorGUILayout.ObjectField(_obj.sprr.sprite,
                                                                     typeof(Sprite), allowSceneObjects: false);
             if (result.changed)
             {
                 _obj.ChangeSprite(_newSprite);
                 EditorUtility.SetDirty(Selection.activeObject);
             }
         }
     }
 }
        public static void DrawSideSprite(Rect _FullRect, Iso2DObject _Iso2D,
                                          bool _bSquare, bool _bSimpleDraw)
        {
            if (_Iso2D == null || _Iso2D.sprr.sprite == null)
            {
                return;
            }

            Rect _rt = _FullRect.Divid_TileSide(_Iso2D._Type);

            if (_Iso2D.transform.localScale.x < 0)
            {
                _rt.x     += _rt.width;
                _rt.width *= -1f;
            }
            if (_Iso2D.transform.localScale.y < 0)
            {
                _rt.y      += _rt.height;
                _rt.height *= -1f;
            }
            Util.CustomEditorGUI.DrawSprite(_rt, _Iso2D.sprr.sprite, _Iso2D.sprr.color, _bSquare, _bSimpleDraw);
        }
        public static void Iso2DObjectField(SerializedObject _Iso2DSerializedObject)
        {
            _Iso2DSerializedObject.Update();

            SerializedProperty vScaler  = _Iso2DSerializedObject.FindProperty("localScale");
            SerializedProperty vRotator = _Iso2DSerializedObject.FindProperty("localRotation");

            Iso2DObject    _Iso2D      = (Iso2DObject)_Iso2DSerializedObject.targetObject;
            IsoTile        _parentTile = _Iso2D.GetComponentInParent <IsoTile>();
            SpriteRenderer sprr        = _Iso2D.GetComponent <SpriteRenderer>();

            //_Iso2D._Type = (Iso2DObject.Type) EditorGUILayout.EnumPopup("Type", _Iso2D._Type);

            EditorGUI.indentLevel = 0;
            Undo_Iso2DSpriteField(_Iso2D, Color.cyan);
            EditorGUILayout.LabelField("Type : " + _Iso2D._Type);

            float iWidth = EditorGUIUtility.currentViewWidth / 2 - 4;

            EditorGUILayout.BeginHorizontal();
            using (new EditorGUILayout.VerticalScope(
                       GUILayout.MaxWidth(iWidth)))
            {
                GUILayout.Space(5);

                Iso2DObjectEditor.Max_Slider = Mathf.Max(new float[] { 1f, vScaler.vector3Value.x, vScaler.vector3Value.y,
                                                                       EditorGUILayout.FloatField("Cap of Scale Slider", Iso2DObjectEditor.Max_Slider) });

                vScaler.vector3Value = Vector3Slider(vScaler.vector3Value, Vector3.one, "[Scale]",
                                                     -Iso2DObjectEditor.Max_Slider * Vector3.one, Iso2DObjectEditor.Max_Slider * Vector3.one, iWidth);
                // vScaler.vector3Value = EditorGUILayout.Vector3Field("",vScaler.vector3Value, GUILayout.MaxWidth(iWidth));
                using (new EditorGUILayout.HorizontalScope())
                {
                    EditorGUILayout.LabelField("Flip", GUILayout.MaxWidth(iWidth * 0.3f));
                    if (GUILayout.Button("X", EditorStyles.miniButton, GUILayout.MaxWidth(iWidth * 0.3f)))
                    {
                        vScaler.vector3Value = Vector3.Scale(vScaler.vector3Value, new Vector3(-1, 1, 1));
                    }
                    if (GUILayout.Button("Y", EditorStyles.miniButton, GUILayout.MaxWidth(iWidth * 0.3f)))
                    {
                        vScaler.vector3Value = Vector3.Scale(vScaler.vector3Value, new Vector3(1, -1, 1));
                    }
                }
                EditorGUI.BeginChangeCheck();
                EditorGUILayout.ToggleLeft(
                    string.Format("Use Global PPU Scale(x{0:0.00})", _Iso2D.PPURefScale),
                    _Iso2D.bApplyPPUScale, GUILayout.MaxWidth(iWidth));
                if (EditorGUI.EndChangeCheck())
                {
                    _Iso2D.Toggle_ApplyPPUScale();
                }
                EditorGUI.indentLevel++;
                EditorGUILayout.HelpBox("Global PPU Scale = Source PPU / Ref PPU", MessageType.None);
                EditorGUILayout.LabelField(
                    "Image Source PPU " + sprr.sprite.pixelsPerUnit,
                    GUILayout.MaxWidth(iWidth));
                EditorGUILayout.LabelField(
                    "IsoMap Reference PPU " + IsoMap.instance.ReferencePPU,
                    GUILayout.MaxWidth(iWidth));
                EditorGUI.indentLevel--;
                EditorGUILayout.Separator();

                Util.CustomEditorGUI.NewParagraph("[Rotation]");
                EditorGUILayout.LabelField("Tile local rotation adjustment", GUILayout.MaxWidth(iWidth));
                vRotator.vector3Value = EditorGUILayout.Vector3Field("", vRotator.vector3Value, GUILayout.MaxWidth(iWidth));
                EditorGUILayout.LabelField(
                    string.Format("+ global tile rotation(X {0}, Y {1})",
                                  IsoMap.instance.TileAngle.x,
                                  IsoMap.instance.TileAngle.y), GUILayout.MaxWidth(iWidth));
                EditorGUILayout.Separator();

                //EditorGUILayout.EndVertical();
                //GUILayout.EndArea();
            }
            drawPackedTexture(_Iso2D, Mathf.Min(125f, iWidth * 0.75f));
            EditorGUILayout.EndHorizontal();

            if (_parentTile != null && _Iso2D.gameObject != _parentTile.gameObject)
            {
                EditorGUILayout.Separator();
                Util.CustomEditorGUI.NewParagraph("[Object Selector]");
                if (_Iso2D.RC != null)
                {
                    Util.CustomEditorGUI.ComSelector <RegularCollider>(_Iso2D.RC, "GO Controller");
                }
                else
                {
                    CustomEditorGUI.ComSelector <SubColliderHelper>(_Iso2D.SC, "GO SubCollider");
                }
                Util.CustomEditorGUI.ComSelector <IsoTile>(_parentTile, "GO IsoTile");
            }

            _Iso2DSerializedObject.ApplyModifiedProperties();
        }