public bool CreateNewCharacterSetupFile()
    {
        bool success = false;
        //GET FILE PATH FROM USER
        string filePath = EditorUtility.SaveFilePanelInProject("Where do you want to create your new character setup file?", "New Live Character Setup", "asset", "");

        if (filePath != "")
        {
            LiveCharacterSetupFile newCharSetupFile = ScriptableObject.CreateInstance <LiveCharacterSetupFile>();

            currentCharSetupFile             = newCharSetupFile;
            currentCharSetupFile.Expressions = new List <Expression>();

            //Deep copy base expressions into new file expressions to prevent base file from being modified
            foreach (Expression exp in baseLiveExpressions.BaseExpressions)
            {
                currentCharSetupFile.Expressions.Add(new Expression(exp.Name, exp.Desc, exp.Attr, false));
            }

            AssetDatabase.CreateAsset(newCharSetupFile, filePath);
            AssetDatabase.SaveAssets();

            Selection.activeObject = newCharSetupFile;

            success = true;
        }

        return(success);
    }
Exemple #2
0
    private void OnEnable()
    {
        setupFile = (LiveCharacterSetupFile)target;

        warningStyle                  = new GUIStyle();
        warningStyle.fontStyle        = FontStyle.Bold;
        warningStyle.normal.textColor = Color.red;
        warningStyle.wordWrap         = true;
        warningStyle.alignment        = TextAnchor.MiddleCenter;

        //string baseFacewareExpressionsPath = Utility.CombinePath("Assets", "Faceware", "Scripts", "Editor", "BaseFacewareExpressions.asset");
        //baseExpressions = (BaseFacewareExpressions)AssetDatabase.LoadAssetAtPath(baseFacewareExpressionsPath, typeof(BaseFacewareExpressions));
    }
    /****************************************************************************************************/
    void Awake()
    {
        string iconPath = Utility.CombinePath("Assets", "Faceware", "Scripts", "Editor", "Icons");

        titleIcon = ( Texture )AssetDatabase.LoadAssetAtPath(Path.Combine(iconPath, "LiveClient_DeviceHeader.png"), typeof(Texture));
        yesIcon   = ( Texture )AssetDatabase.LoadAssetAtPath(Path.Combine(iconPath, "Ok_16.png"), typeof(Texture));
        noIcon    = ( Texture )AssetDatabase.LoadAssetAtPath(Path.Combine(iconPath, "No_16.png"), typeof(Texture));

        string baseFacewareExpressionsPath = Utility.CombinePath("Assets", "Faceware", "Scripts", "Editor", "BaseFacewareExpressions.asset");

        baseLiveExpressions = (BaseFacewareExpressions)AssetDatabase.LoadAssetAtPath(baseFacewareExpressionsPath, typeof(BaseFacewareExpressions));
        charSetupData.Init(new List <Expression>(), new List <string>());
        currentCharSetupFile = null;
    }
    /****************************************************************************************************/
    private void CreateFileGUI()
    {
        EditorGUILayout.BeginVertical("Box");         //Root layout group
        {
            EditorGUILayout.LabelField("Faceware Live Client for Unity - Character Setup", titleStyle);

            EditorGUI.BeginChangeCheck();
            currentCharSetupFile = (LiveCharacterSetupFile)EditorGUILayout.ObjectField("Character Setup File: ", currentCharSetupFile, typeof(LiveCharacterSetupFile), false);
            if (EditorGUI.EndChangeCheck())
            {
                if (currentCharSetupFile == null)
                {
                    charSetupData.Init(new List <Expression>(), new List <string>());
                }
                else
                {
                    charSetupData.Init(currentCharSetupFile.Expressions, currentCharSetupFile.Controls);

                    //Check for root object
                    if (currentCharSetupFile.rootObjectName != null)
                    {
                        GameObject rootObject = GameObject.Find(currentCharSetupFile.rootObjectName);
                        if (rootObject != null)
                        {
                            //We have it
                            currentCharSetupFile.rootObject = rootObject;
                            ValidateControls();
                        }
                        else
                        {
                            //Don't have it in scene, prompt user
                            EditorUtility.DisplayDialog("Unable to find character!", "The character " + currentCharSetupFile.rootObjectName + " could not be found in the scene!", "Ok");
                        }
                    }
                }

                controlSelection.Clear();
                addedControls.Clear();
                sceneControlObjectList.Clear();
                InitAddedControls();
            }

            EditorGUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); //Buttons' control group
            {
                GUILayoutOption buttonWidth = GUILayout.Width(162);
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("New", buttonWidth))
                {
                    bool success = CreateNewCharacterSetupFile();
                    if (success)
                    {
                        charSetupData.Init(currentCharSetupFile.Expressions, currentCharSetupFile.Controls);
                        controlSelection.Clear();
                        addedControls.Clear();
                        sceneControlObjectList.Clear();
                    }
                }
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Save", buttonWidth))
                {
                    EditorUtility.SetDirty(currentCharSetupFile);
                    AssetDatabase.SaveAssets();
                }
                GUILayout.FlexibleSpace();
            }
            EditorGUILayout.EndHorizontal(); //End buttons' control group
            CreateSpace(1);
        }
        EditorGUILayout.EndVertical();
        CreateSpace(1);
    }