Exemplo n.º 1
0
        protected void DrawFlipper(UIView tTarget)
        {
            EditorGUILayout.Separator();                // 少し区切りスペース

            // 存在している Tween コンポーネントを取得する
            UIFlipper[] tFlipperArray = tTarget.GetComponents <UIFlipper>();

            // 1つ以上存在していればリストとして描画する
            int    i, l = tFlipperArray.Length, j, c;
            string tIdentity;

            string[] tFlipperIdentityArray = new string[l];
            for (i = 0; i < l; i++)
            {
                tFlipperIdentityArray[i] = tFlipperArray[i].identity;
            }
            for (i = 0; i < l; i++)
            {
                // 既に同じ名前が存在する場合は番号を振る
                tIdentity = tFlipperIdentityArray[i];

                c = 0;
                for (j = i + 1; j < l; j++)
                {
                    if (tFlipperIdentityArray[j] == tIdentity)
                    {
                        // 同じ名前を発見した
                        c++;
                        tFlipperIdentityArray[j] = tFlipperIdentityArray[j] + "(" + c + ")";
                    }
                }
            }

            //----------------------------------------------------

            if (mRemoveFlipperIndexAnswer < 0)
            {
                GUILayout.BeginHorizontal();                    // 横並び開始
                {
                    bool tAdd = false;

                    GUI.backgroundColor = Color.cyan;
                    if (GUILayout.Button("Add Flipper", GUILayout.Width(140f)) == true)
                    {
                        tAdd = true;
                    }
                    GUI.backgroundColor = Color.white;

                    GUI.backgroundColor = Color.cyan;
                    mAddFlipperIdentity = EditorGUILayout.TextField("", mAddFlipperIdentity, GUILayout.Width(120f));
                    GUI.backgroundColor = Color.white;

                    if (tAdd == true)
                    {
                        if (string.IsNullOrEmpty(mAddFlipperIdentity) == false)
                        {
                            // Flipper を追加する
                            UIFlipper tFlipper = tTarget.AddComponent <UIFlipper>();
                            tFlipper.identity = mAddFlipperIdentity;

                            UIFlipper[] tFlipperList = tTarget.gameObject.GetComponents <UIFlipper>();
                            if (tFlipperList != null && tFlipperList.Length > 0)
                            {
                                for (i = 0; i < tFlipperList.Length; i++)
                                {
                                    if (tFlipperList[i] != tFlipper)
                                    {
                                        break;
                                    }
                                }
                                if (i < tFlipperList.Length)
                                {
                                    // 既にトゥイーンコンポーネントがアタッチされているので enable と PlayOnAwake を false にする
                                    tFlipper.enabled     = false;
                                    tFlipper.playOnAwake = false;
                                }
                            }
                        }
                        else
                        {
                            EditorUtility.DisplayDialog("Add Flipper", GetMessage("InputIdentity"), "Close");
                        }
                    }
                }
                GUILayout.EndHorizontal();                              // 横並び終了

                if (tFlipperArray != null && tFlipperArray.Length > 0)
                {
                    GUILayout.BeginHorizontal();                        // 横並び開始
                    {
                        bool tRemove = false;
                        GUI.backgroundColor = Color.red;                                // ボタンの下地を緑に
                        if (GUILayout.Button("Remove Flipper", GUILayout.Width(140f)) == true)
                        {
                            tRemove = true;
                        }
                        GUI.backgroundColor = Color.white;                              // ボタンの下地を緑に

                        if (mRemoveFlipperIndex >= tFlipperIdentityArray.Length)
                        {
                            mRemoveFlipperIndex = tFlipperIdentityArray.Length - 1;
                        }
                        mRemoveFlipperIndex = EditorGUILayout.Popup("", mRemoveFlipperIndex, tFlipperIdentityArray, GUILayout.Width(120f));                                     // フィールド名有りタイプ

                        if (tRemove == true)
                        {
                            // 削除する
                            mRemoveFlipperIndexAnswer = mRemoveFlipperIndex;
                        }
                    }
                    GUILayout.EndHorizontal();                                  // 横並び終了
                }
            }
            else
            {
                string tMessage = GetMessage("RemoveFlipperOK?").Replace("%1", tFlipperIdentityArray[mRemoveFlipperIndexAnswer]);
                GUILayout.Label(tMessage);
                GUILayout.BeginHorizontal();                    // 横並び開始
                {
                    GUI.backgroundColor = Color.red;
                    if (GUILayout.Button("OK", GUILayout.Width(100f)) == true)
                    {
                        // 本当に削除する
                        Undo.RecordObject(tTarget, "UIView : Flipper Remove");                                  // アンドウバッファに登録
                        tTarget.removeFlipperIdentity = tFlipperArray[mRemoveFlipperIndexAnswer].identity;
                        tTarget.removeFlipperInstance = tFlipperArray[mRemoveFlipperIndexAnswer].GetInstanceID();
                        EditorUtility.SetDirty(tTarget);
                        UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene());

                        mRemoveFlipperIndexAnswer = -1;
                    }
                    GUI.backgroundColor = Color.white;
                    if (GUILayout.Button("Cancel", GUILayout.Width(100f)) == true)
                    {
                        mRemoveFlipperIndexAnswer = -1;
                    }
                }
                GUILayout.EndHorizontal();                              // 横並び終了
            }
        }
        // スンスペクター描画
        public override void OnInspectorGUI()
        {
            // とりあえずデフォルト
            //		DrawDefaultInspector() ;

            //--------------------------------------------

            // ターゲットのインスタンス
            UIFlipper tTarget = target as UIFlipper;

            EditorGUILayout.Separator();                // 少し区切りスペース

            // 識別子
            GUI.backgroundColor = Color.cyan;
            string tIdentity = EditorGUILayout.TextField("Identity", tTarget.identity);

            GUI.backgroundColor = Color.white;
            if (tIdentity != tTarget.identity)
            {
                Undo.RecordObject(tTarget, "UIFlipper : Identity Change");                      // アンドウバッファに登録
                tTarget.identity = tIdentity;
                EditorUtility.SetDirty(tTarget);
//				UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
            }

            // ディレイ
            float tDelay = EditorGUILayout.FloatField("Delay", tTarget.delay);

            if (tDelay != tTarget.delay)
            {
                Undo.RecordObject(tTarget, "UIFlipper : Delay Change");                         // アンドウバッファに登録
                tTarget.delay = tDelay;
                EditorUtility.SetDirty(tTarget);
//				UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
            }

            //------------------------------------------------

            EditorGUILayout.Separator();                // 少し区切りスペース

            if (tTarget.GetComponent <Image>() == null)
            {
                EditorGUILayout.HelpBox(GetMessage("ImageNone"), MessageType.Warning, true);
            }

            // ワイドモードを有効にする
            //		bool tWideMode = EditorGUIUtility.wideMode ;
            //		EditorGUIUtility.wideMode = true ;


            //--------------------------------------------------------------------

            // 一番肝心なスプライトアニメーションファイル
            UISpriteAnimation tSpriteAnimation = EditorGUILayout.ObjectField("Sprite Animation", tTarget.spriteAnimation, typeof(UISpriteAnimation), false) as UISpriteAnimation;

            if (tSpriteAnimation != tTarget.spriteAnimation)
            {
                Undo.RecordObject(tTarget, "UIFlipper : Sprite Animation Change ");                     // アンドウバッファに登録
                tTarget.spriteAnimation = tSpriteAnimation;
                EditorUtility.SetDirty(tTarget);
//				UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
            }

            if (tTarget.enabled == true && tTarget.spriteAnimation != null)
            {
                EditorGUILayout.Separator();                    // 少し区切りスペース

                GUILayout.BeginHorizontal();                    // 横並び
                {
                    // チェック
                    GUILayout.Label("Checker (Editor Only)", GUILayout.Width(150f));

                    bool tIsChecker = EditorGUILayout.Toggle(tTarget.isChecker);
                    if (tIsChecker != tTarget.isChecker)
                    {
                        if (tIsChecker == true)
                        {
                            UIFlipper[] tFlipperList = tTarget.gameObject.GetComponents <UIFlipper>();
                            if (tFlipperList != null && tFlipperList.Length > 0)
                            {
                                for (int i = 0; i < tFlipperList.Length; i++)
                                {
                                    if (tFlipperList[i] != tTarget)
                                    {
                                        if (tFlipperList[i].isChecker == true)
                                        {
                                            tFlipperList[i].isChecker = false;
                                        }
                                    }
                                }
                            }
                        }


                        Undo.RecordObject(tTarget, "UIFlipper : Checker Change");                               // アンドウバッファに登録
                        tTarget.isChecker = tIsChecker;
                        EditorUtility.SetDirty(tTarget);
//						UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                    }
                }
                GUILayout.EndHorizontal();                              // 横並び終了

                if (tTarget.isChecker == true)
                {
                    GUILayout.BeginHorizontal();                        // 横並び
                    {
                        int tCheckFactor = EditorGUILayout.IntSlider(tTarget.checkFactor, 0, tTarget.spriteAnimation.length - 1);
                        if (tCheckFactor != tTarget.checkFactor)
                        {
                            Undo.RecordObject(tTarget, "UIFlipper : Check Factor Change ");                                     // アンドウバッファに登録
                            tTarget.checkFactor = tCheckFactor;
                            EditorUtility.SetDirty(tTarget);
//							UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;

                            /*						Image tImage = tTarget.GetComponent<Image>() ;
                             *                                              if( tImage != null )
                             *                                              {
                             *                                                      EditorUtility.SetDirty( tImage ) ;
                             *                                              }*/
                        }
                    }
                    GUILayout.EndHorizontal();                                  // 横並び終了
                }


                EditorGUILayout.Separator();                    // 少し区切りスペース

                // Begin
                GUILayout.BeginHorizontal();                    // 横並び
                {
                    GUILayout.Label("Begin", GUILayout.Width(60f));
                    int tBegin = EditorGUILayout.IntSlider(tTarget.begin, 0, tTarget.spriteAnimation.length - 1);
                    if (tBegin != tTarget.begin)
                    {
                        Undo.RecordObject(tTarget, "UIFlipper : Begin Change ");                                // アンドウバッファに登録
                        tTarget.begin = tBegin;
                        EditorUtility.SetDirty(tTarget);
//						UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                    }
                }
                GUILayout.EndHorizontal();                              // 横並び終了

                // end
                GUILayout.BeginHorizontal();                    // 横並び
                {
                    GUILayout.Label("End", GUILayout.Width(60f));
                    int tEnd = EditorGUILayout.IntSlider(tTarget.end, 0, tTarget.spriteAnimation.length - 1);
                    if (tEnd != tTarget.end)
                    {
                        Undo.RecordObject(tTarget, "UIFlipper : End Change ");                                  // アンドウバッファに登録
                        tTarget.end = tEnd;
                        EditorUtility.SetDirty(tTarget);
//						UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                    }
                }
                GUILayout.EndHorizontal();                              // 横並び終了
            }

            //--------------------------------------------------------------------

            EditorGUILayout.Separator();                // 少し区切りスペース

            GUILayout.BeginHorizontal();                // 横並び
            {
                // バック
                GUILayout.Label("Back", GUILayout.Width(116f));

                bool tBack = EditorGUILayout.Toggle(tTarget.back);
                if (tBack != tTarget.back)
                {
                    Undo.RecordObject(tTarget, "UIFlipper : Back Change");                              // アンドウバッファに登録
                    tTarget.back = tBack;
                    EditorUtility.SetDirty(tTarget);
//					UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                }
            }
            GUILayout.EndHorizontal();                          // 横並び終了


            GUILayout.BeginHorizontal();                // 横並び
            {
                // ループ
                GUILayout.Label("Loop", GUILayout.Width(116f));

                bool tLoop = EditorGUILayout.Toggle(tTarget.loop);
                if (tLoop != tTarget.loop)
                {
                    Undo.RecordObject(tTarget, "UIFlipper : Loop Change");                              // アンドウバッファに登録
                    tTarget.loop = tLoop;
                    EditorUtility.SetDirty(tTarget);
//					UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                }
            }
            GUILayout.EndHorizontal();                          // 横並び終了

            if (tTarget.loop == true)
            {
                GUILayout.BeginHorizontal();                    // 横並び
                {
                    // リバース
                    GUILayout.Label("Reverse", GUILayout.Width(116f));

                    bool tReverse = EditorGUILayout.Toggle(tTarget.reverse);
                    if (tReverse != tTarget.reverse)
                    {
                        Undo.RecordObject(tTarget, "UIFlipper : Reverse Change");                               // アンドウバッファに登録
                        tTarget.reverse = tReverse;
                        EditorUtility.SetDirty(tTarget);
//						UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                    }
                }
                GUILayout.EndHorizontal();                              // 横並び終了
            }

            // スピード
            float tSpeed = EditorGUILayout.FloatField("Speed", tTarget.speed);

            if (tSpeed != tTarget.speed)
            {
                Undo.RecordObject(tTarget, "UIFlipper : Speed Change");                         // アンドウバッファに登録
                tTarget.speed = tSpeed;
                EditorUtility.SetDirty(tTarget);
//				UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
            }

            GUILayout.BeginHorizontal();                // 横並び
            {
                // イグノアタイムスケール
                GUILayout.Label("Ignore Time Scale", GUILayout.Width(116f));

                bool tIgnoreTimeScale = EditorGUILayout.Toggle(tTarget.ignoreTimeScale);
                if (tIgnoreTimeScale != tTarget.ignoreTimeScale)
                {
                    Undo.RecordObject(tTarget, "UIFlipper : Ignore Time Scale Change");                         // アンドウバッファに登録
                    tTarget.ignoreTimeScale = tIgnoreTimeScale;
                    EditorUtility.SetDirty(tTarget);
//					UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                }
            }
            GUILayout.EndHorizontal();                  // 横並び終了

            GUILayout.BeginHorizontal();                // 横並び
            {
                // プレイオンアウェイク
                GUILayout.Label("Play On Awake", GUILayout.Width(116f));

                bool tPlayOnAwake = EditorGUILayout.Toggle(tTarget.playOnAwake);
                if (tPlayOnAwake != tTarget.playOnAwake)
                {
                    Undo.RecordObject(tTarget, "UIFlipper : Play On Awake Change");                             // アンドウバッファに登録
                    tTarget.playOnAwake = tPlayOnAwake;
                    EditorUtility.SetDirty(tTarget);
//					UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty( UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene() ) ;
                }
            }
            GUILayout.EndHorizontal();                  // 横並び終了


            GUILayout.BeginHorizontal();                // 横並び
            {
                // デストロイアットエンド
                GUILayout.Label("Destroy At End", GUILayout.Width(116f));

                bool tDestroyAtEnd = EditorGUILayout.Toggle(tTarget.destroyAtEnd);
                if (tDestroyAtEnd != tTarget.destroyAtEnd)
                {
                    Undo.RecordObject(tTarget, "UIFlipper : Destroy At End Change");                            // アンドウバッファに登録
                    tTarget.destroyAtEnd = tDestroyAtEnd;
                    EditorUtility.SetDirty(tTarget);
                }
            }
            GUILayout.EndHorizontal();                          // 横並び終了


            GUILayout.BeginHorizontal();                // 横並び
            {
                // デストロイアットエンド
                GUILayout.Label("Auto Resize", GUILayout.Width(116f));

                bool tAutoResize = EditorGUILayout.Toggle(tTarget.autoResize);
                if (tAutoResize != tTarget.autoResize)
                {
                    Undo.RecordObject(tTarget, "UIFlipper : Auto Resize Change");                               // アンドウバッファに登録
                    tTarget.autoResize = tAutoResize;
                    EditorUtility.SetDirty(tTarget);
                }
            }
            GUILayout.EndHorizontal();                  // 横並び終了

            EditorGUILayout.Separator();                // 少し区切りスペース

            GUILayout.BeginHorizontal();                // 横並び
            {
                // イズプレイング
                GUILayout.Label("Is Playing", GUILayout.Width(116f));

                EditorGUILayout.Toggle(tTarget.isPlaying);
            }
            GUILayout.EndHorizontal();                  // 横並び終了

            EditorGUILayout.Separator();                // 少し区切りスペース


            // デリゲートの設定状況
            SerializedObject tSO = new SerializedObject(tTarget);

            SerializedProperty tSP = tSO.FindProperty("onFinished");

            if (tSP != null)
            {
                EditorGUILayout.PropertyField(tSP);
            }
            tSO.ApplyModifiedProperties();
        }