void OnGUI()
        {
            scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);

            PrefabData.SetCloth(EditorGUILayout.ObjectField(I18N.Instance().Get("option.input.cloth"), PrefabData.GetCloth(), typeof(GameObject), true) as GameObject);
            //prevとの比較が必要な処理: 開始
            SetupDiffTexGen();
            //prevとの比較が必要な処理: 終了
            prevClothPrefab = PrefabData.GetCloth();

            DiffTexOnGUI();

            EditorGUILayout.EndScrollView();
        }
        void SetupDiffTexGen()
        {
            if (PrefabData.GetCloth() == null)
            {
                return;
            }

            if (prevClothPrefab == PrefabData.GetCloth())
            {
                return;
            }

            LoadDiffTexture();
            I18N.Instance().LoadLanguage(clothPrefabParentPath);
        }
 public void UpdateClothPrefab()
 {
     isLoadExpandGUI = false;
     if (PrefabData.GetCloth() != null)
     {
         clothPrefabParentPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(PrefabData.GetCloth());
         LoadExpandFileVersion();
         I18N.Instance().LoadLanguage(clothPrefabParentPath);
         LoadExpandOption();
     }
     else
     {
         clothPrefabParentPath = "";
     }
 }
Beispiel #4
0
        public static void UnpackPrefabOnPrefabData()
        {
            //Assetから直接D&Dだったらインスタンス化
            if (AssetDatabase.GetAssetPath(PrefabData.GetAvatar()) != "")
            {
                PrefabData.SetAvatar(PrefabUtility.InstantiatePrefab(PrefabData.GetAvatar()) as GameObject);
            }
            //Assetから直接D&Dだったらインスタンス化
            if (AssetDatabase.GetAssetPath(PrefabData.GetCloth()) != "")
            {
                PrefabData.SetCloth(PrefabUtility.InstantiatePrefab(PrefabData.GetCloth()) as GameObject);
            }

            UnpackPrefab(PrefabData.GetAvatar());
            UnpackPrefab(PrefabData.GetCloth());
        }
        void OnGUI()
        {
            if (clothUnInstaller == null)
            {
                clothUnInstaller = new ClothUnInstaller();
            }

            GUILayout.Space(2);
            GUILayout.Label("Cloth UnInstaller", styleTitleStyle);
            GUIUtil.RenderLabel(I18N.Instance().Get("cloth_uninstaller.description"));

            GUILayout.Space(8);

            PrefabData.SetAvatar(EditorGUILayout.ObjectField(I18N.Instance().Get("option.input.avatar"), PrefabData.GetAvatar(), typeof(GameObject), true) as GameObject);
            PrefabData.SetCloth(EditorGUILayout.ObjectField(I18N.Instance().Get("option.input.cloth"), PrefabData.GetCloth(), typeof(GameObject), true) as GameObject);

            if (prevCloth != PrefabData.GetCloth())
            {
                clothUnInstaller.UpdateClothPrefab();
                prevCloth = PrefabData.GetCloth();
            }

            //Setuper V2以上必須
            if (clothUnInstaller.GetExpandOptionVersion() <= 1 && PrefabData.GetCloth() != null)
            {
                GUILayout.Space(4);
                GUIUtil.RenderLabel(I18N.Instance().Get("cloth_uninstaller.un_support_version"));
                return;
            }

            if (PrefabData.GetAvatar() == null || PrefabData.GetCloth() == null)
            {
                return;
            }

            GUILayout.Space(12);
            if (GUILayout.Button(I18N.Instance().Get("cloth_uninstaller.uninstall_button")))
            {
                string id = clothUnInstaller.GetExpandOptionID();
                if (id == "")
                {
                    return;
                }
                clothUnInstaller.UnInstall(PrefabData.GetAvatar().transform, id);
            }
        }
        //ExpandOptionのバージョンをロードする
        private void LoadExpandFileVersion()
        {
            expandOptionVersion = null;
            if (PrefabData.GetCloth() == null)
            {
                return;
            }

            isLoadExpandGUI = true;

            if (clothPrefabParentPath != "")
            {
                //プレハブ直下もしくは"RiClothesSetuper/" にOptionPathのjsonファイルを置くパターン
                string     basePath   = Path.GetDirectoryName(clothPrefabParentPath) + "/";
                OptionPath optionPath = OptionPath.LoadOptionPathFromBaseDir(basePath);

                if (optionPath != null)
                {
                    if (optionPath.option_json_path != null && optionPath.option_json_path != "")
                    {
                        //プレハブからの相対パス
                        expandJsonPath      = FileUtil.GetPathFromRelative(basePath, optionPath.option_json_path);
                        expandOptionVersion = FileUtil.LoadJsonFile <ExpandOptionVersion>(expandJsonPath);
                    }
                    else if (optionPath.base_path != null && optionPath.base_path != "")
                    {
                        string optionBasePath = FileUtil.GetPathFromRelative(basePath, optionPath.base_path);

                        LoadOptionVersionJsonOnBasePath(optionBasePath);
                    }
                }

                //この時点でexpandOptionに中身が入っていたら終了する
                if (expandOptionVersion != null)
                {
                    return;
                }

                //プレハブ直下もしくは"RiClothesSetuper/"にOption.jsonを置くパターン
                if (clothPrefabParentPath != "")
                {
                    LoadOptionVersionJsonOnBasePath(basePath);
                }
            }
        }
Beispiel #7
0
        private void SetupExpandOption()
        {
            if (setuperExpandOption == null)
            {
                setuperExpandOption = new SetuperExpandOption();
            }

            if (setuperExpandOption != null)
            {
                //prevの服プレハブが現在の服プレハブが違ったらSetuperExpandOptionの服プレハブを更新
                if (prevClothPrefab != PrefabData.GetCloth())
                {
                    setuperExpandOption.UpdateClothPrefab();
                }

                setuperExpandOption.OnExpandGUI();
            }
        }
Beispiel #8
0
        public void LoadLanguage(string clothPrefabParentPath)
        {
            I18N.Instance().ResetText();

            if (PrefabData.GetCloth() == null)
            {
                return;
            }

            bool isLoadLanguage = false;

            if (clothPrefabParentPath != "")
            {
                //プレハブ直下もしくは"RiClothesSetuper/" にOptionPathのjsonファイルを置くパターン
                string basePath = Path.GetDirectoryName(clothPrefabParentPath) + "/";

                OptionPath optionPath = OptionPath.LoadOptionPathFromBaseDir(basePath);

                if (optionPath != null)
                {
                    if (optionPath.language_dir_path != null && optionPath.language_dir_path != "")
                    {
                        string languageDirPath = FileUtil.GetPathFromRelative(basePath, optionPath.language_dir_path);
                        I18N.Instance().LoadTextFile(languageDirPath, true);
                        isLoadLanguage = true;
                    }
                    else if (optionPath.base_path != null && optionPath.base_path != "")
                    {
                        string languageBasePath = FileUtil.GetPathFromRelative(basePath, optionPath.base_path);
                        I18N.Instance().LoadTextFile(languageBasePath, false);
                        isLoadLanguage = true;
                    }
                }

                //この時点でロードできていたら終了
                if (isLoadLanguage)
                {
                    return;
                }

                I18N.Instance().LoadTextFile(basePath, false);
                return;
            }
        }
Beispiel #9
0
        void OnAdvancedOptionGUI()
        {
            if (PrefabData.GetCloth() == null)
            {
                return;
            }

            GUILayout.Space(4);
            showAdvancedOption = GUILayout.Toggle(showAdvancedOption, I18N.Instance().Get("option.toggle.show_advanced_option"));
            GUILayout.Space(2);

            if (!showAdvancedOption)
            {
                return;
            }

            isRemoveMissingScript = GUILayout.Toggle(isRemoveMissingScript, I18N.Instance().Get("option.toggle.is_remove_missing_script"));
            GUIUtil.RenderLabel(I18N.Instance().Get("option.toggle.is_remove_missing_script.description"));
            GUILayout.Space(2);

            setuperExpandOption.OnExpandAdvancedOptionGUI();
        }
        void LoadDiffTexture()
        {
            ClearDiffTexture();
            if (PrefabData.GetCloth() == null)
            {
                return;
            }

            clothPrefabParentPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(PrefabData.GetCloth());
            if (clothPrefabParentPath == "")
            {
                return;
            }

            string     basePath   = FileUtil.GetBasePath().Replace("Assets/", "") + Path.GetDirectoryName(clothPrefabParentPath) + "/";
            OptionPath optionPath = OptionPath.LoadOptionPathFromBaseDir(basePath);

            TryLoadV2(basePath, optionPath);
            //V2の読み込みができていたら終了
            if (V2DiffTextGen != null)
            {
                return;
            }

            //プレハブ直下もしくは"RiClothesSetuper/" にOptionPathのjsonファイルを置くパターン
            if (optionPath != null)
            {
                //DiffText V1の読み込み
                if (optionPath.option_json_path != null && optionPath.option_json_path != "")
                {
                    string optionJsonPath = "";
                    optionJsonPath = FileUtil.GetPathFromRelative(basePath, optionPath.option_json_path);
                    V1.ExpandOption expandOption = FileUtil.LoadJsonFile <V1.ExpandOption>(optionJsonPath);
                    string          outputPath   = basePath;
                    if (optionPath.base_path != null && optionPath.base_path != "")
                    {
                        outputPath = FileUtil.GetPathFromRelative(basePath, optionPath.base_path);
                    }
                    if (expandOption != null)
                    {
                        V1DiffTextGen = new V1.DiffTexGeneratorProcess(expandOption.difference_textures, outputPath);
                    }
                }
                else if (optionPath.base_path != null && optionPath.base_path != "")
                {
                    string optionBasePath = FileUtil.GetPathFromRelative(basePath, optionPath.base_path);

                    LoadDiffTexOnBasePath(optionBasePath);
                }
            }

            //この時点でロードできていたら終了
            if (V1DiffTextGen != null)
            {
                return;
            }

            //プレハブ直下もしくは"RiClothesSetuper/"にOption.jsonを置くパターン
            if (clothPrefabParentPath != "")
            {
                LoadDiffTexOnBasePath(basePath);
            }
        }
 void OnDestroy()
 {
     PrefabData.ClearPrefabData();
     I18N.Instance().ResetText();
 }
 public SetuperExpandOption()
 {
     if (PrefabData.GetCloth() != null)
     {
         clothPrefabParentPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(PrefabData.GetCloth());
     }
 }
Beispiel #13
0
        // RiClothes SetuperのGUIを描画
        void OnGUI()
        {
            scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);

            PrefabData.SetAvatar(EditorGUILayout.ObjectField(I18N.Instance().Get("option.input.avatar"), PrefabData.GetAvatar(), typeof(GameObject), true) as GameObject);
            PrefabData.SetCloth(EditorGUILayout.ObjectField(I18N.Instance().Get("option.input.cloth"), PrefabData.GetCloth(), typeof(GameObject), true) as GameObject);

            //prevとの比較が必要な処理: 開始
            SetupExpandOption();

            //prevとの比較が必要な処理: 終了
            //prev更新
            prevAvatarPrefab = PrefabData.GetAvatar();
            prevClothPrefab  = PrefabData.GetCloth();

            OnAdvancedOptionGUI();

            //上から16のマージン
            GUILayout.Space(16);
            if (GUILayout.Button(I18N.Instance().Get("option.button.change_cloth")))
            {
                if (PrefabData.GetAvatar() == null || PrefabData.GetCloth() == null)
                {
                    return;
                }
                //両方とも同じプレハブが入っているときは処理しないように
                if (PrefabData.GetAvatar() == PrefabData.GetCloth())
                {
                    return;
                }

                PrefabUtil.UnpackPrefabOnPrefabData();
                //ボーンを移動する前に実行されるオプション
                setuperExpandOption.BeforeMoveArmature();
                SetupArmature(PrefabData.GetAvatar().transform.Find("Armature"), PrefabData.GetCloth().transform.Find("Armature"));
                //ボーンを移動した後に実行されるオプション
                setuperExpandOption.AfterMoveBone();

                MoveClothObject();

                //Setuper側の処理が終わったあとに実行
                setuperExpandOption.AfterSetuperProcess();

                //残った服の残骸(プレハブ)を消す
                GameObject.DestroyImmediate(PrefabData.GetCloth());

                //Missing Scriptを削除するオプションが有効のときMissing Scriptを削除する
                if (isRemoveMissingScript)
                {
                    SetuperMissingRemover.Remove(PrefabData.GetAvatar());
                }
                #if UNITY_2018
                //シリアライズオブジェクトを編集した場合一回実行しないとUnityを閉じるときにクラッシュするのを対策
                EditorApplication.ExecuteMenuItem("Edit/Play");
                #endif
                Close();
            }

            EditorGUILayout.EndScrollView();
        }