Ejemplo n.º 1
0
    void parseStats()
    {
        fsmCount      = 0;
        stateCount    = 0;
        variableCount = 0;
        eventCount    = 0;

        //Fsm.SortedFsmList;
        FsmEditor.RebuildFsmList();
        fsms     = FsmEditor.FsmList;
        fsmCount = fsms.Count;

        globalEventsCount    = FsmEvent.globalEvents.Count;
        globalVariablesCount = FsmVariables.GlobalVariables.GetAllNamedVariables().Length;

        Debug.Log("parseStats for " + fsmCount + " Fsms");
        foreach (var fsm in fsms)
        {
            eventCount    += fsm.Events.Length;
            stateCount    += fsm.States.Length;
            variableCount += fsm.Variables.BoolVariables.Length;
            variableCount += fsm.Variables.ColorVariables.Length;
            variableCount += fsm.Variables.FloatVariables.Length;
            variableCount += fsm.Variables.IntVariables.Length;
            variableCount += fsm.Variables.MaterialVariables.Length;
            variableCount += fsm.Variables.ObjectVariables.Length;
            variableCount += fsm.Variables.QuaternionVariables.Length;
            variableCount += fsm.Variables.RectVariables.Length;
            variableCount += fsm.Variables.StringVariables.Length;
            variableCount += fsm.Variables.TextureVariables.Length;
            variableCount += fsm.Variables.Vector3Variables.Length;
        }
    }
Ejemplo n.º 2
0
        private static void LoadPrefabsWithPlayMakerFSMComponents()
        {
            Debug.Log("Finding Prefabs with PlayMakerFSMs");

            var searchDirectory = new DirectoryInfo(Application.dataPath);
            var prefabFiles     = searchDirectory.GetFiles("*.prefab", SearchOption.AllDirectories);

            foreach (var file in prefabFiles)
            {
                var filePath = file.FullName.Replace(@"\", "/").Replace(Application.dataPath, "Assets");
                //Debug.Log(filePath + "\n" + Application.dataPath);

                var dependencies = AssetDatabase.GetDependencies(new[] { filePath });
                foreach (var dependency in dependencies)
                {
                    if (dependency.Contains("/PlayMaker.dll"))
                    {
                        Debug.Log("Found Prefab with FSM: " + filePath);
                        AssetDatabase.LoadAssetAtPath(filePath, typeof(GameObject));
                    }
                }
            }

            FsmEditor.RebuildFsmList();
        }
Ejemplo n.º 3
0
        private static void UpdateGetSetPropertyActions()
        {
            var getPropertyActionType = ActionData.GetActionType("HutongGames.PlayMaker.Actions.GetProperty");
            var setPropertyActionType = ActionData.GetActionType("HutongGames.PlayMaker.Actions.SetProperty");

            FsmEditor.RebuildFsmList();

            foreach (var fsm in FsmEditor.FsmList)
            {
                if (fsm.GameObject == null)
                {
                    continue;
                }         // can't update property paths without GameObject

                var upgraded = false;
                foreach (var state in fsm.States)
                {
                    foreach (var action in state.Actions)
                    {
                        var actionType = action.GetType();
                        if (actionType == getPropertyActionType)
                        {
                            var targetPropertyField = getPropertyActionType.GetField("targetProperty", BindingFlags.Public | BindingFlags.Instance);
                            if (targetPropertyField != null)
                            {
                                upgraded |= TryUpgradeFsmProperty(fsm.GameObject, targetPropertyField.GetValue(action) as FsmProperty);
                            }
                        }
                        else if (actionType == setPropertyActionType)
                        {
                            var targetPropertyField = setPropertyActionType.GetField("targetProperty", BindingFlags.Public | BindingFlags.Instance);
                            if (targetPropertyField != null)
                            {
                                upgraded |= TryUpgradeFsmProperty(fsm.GameObject, targetPropertyField.GetValue(action) as FsmProperty);
                            }
                        }
                    }
                }
                if (upgraded)
                {
                    //Undo called in batch operation seems to crash Unity
                    //FsmEditor.SaveActions(fsm);

                    foreach (var state in fsm.States)
                    {
                        state.SaveActions();
                    }

                    FsmEditor.SetFsmDirty(fsm, true);

#if !UNITY_PRE_5_3
                    UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(fsm.Owner.gameObject.scene);
#elif !UNITY_PRE_5_0
                    // Not sure if we need to do this...?
                    UnityEditor.EditorApplication.MarkSceneDirty();
#endif
                }
            }
        }
Ejemplo n.º 4
0
    public static UnityEngine.Object[] GetSceneCustomActionDependencies()
    {
        UnityEngine.Object[] list = new UnityEngine.Object[0];

        FsmEditor.RebuildFsmList();

        List <PlayMakerFSM> fsms = FsmEditor.FsmComponentList;

//		List<System.Type> PlayMakerActions = FsmEditorUtility.Actionslist;

        foreach (PlayMakerFSM fsm in fsms)
        {
            //Debug.Log(FsmEditorUtility.GetFullFsmLabel(fsm));

            //if (fsm.FsmStates != null) fsm.FsmStates.Initialize();

            for (int s = 0; s < fsm.FsmStates.Length; ++s)
            {
                fsm.FsmStates[s].LoadActions();

                Debug.Log(fsm.FsmStates[s].Name + " is loaded:" + fsm.FsmStates[s].ActionsLoaded);

                // Show SendEvent and SendMessage as we find them
                foreach (FsmStateAction action in fsm.FsmStates[s].Actions)
                {
                    UnityEngine.Object _asset = FsmEditorUtility.GetActionScriptAsset(action);
                    string             _name  = action.Name;
                    if (String.IsNullOrEmpty(_name))
                    {
                        if (_asset != null)
                        {
                            _name = _asset.name;
                        }
                        else
                        {
                            _name = FsmEditorUtility.GetActionLabel(action) + "[WARNING: FILE NOT FOUND]";
                        }
                    }

                    if (Enum.IsDefined(typeof(WikiPages), _name))
                    {
                        //	Debug.Log(_name+" : official action");
                    }
                    else
                    {
                        //	Debug.Log(_name+" : custom action");

                        if (_asset != null)
                        {
                            ArrayUtility.Add <UnityEngine.Object>(ref list, _asset);
                        }
                    }
                }
            }
        }

        return(list);
    }    // GetSceneCustomActionDependencies
Ejemplo n.º 5
0
        /*WIP
         * [MenuItem(MenuRoot + "Tools/Scan Scenes", false, 33)]
         * public static void ScanScenesInProject()
         * {
         *  FindAllScenes();
         * }
         */

        private static void ReSaveAllLoadedFSMs()
        {
            Debug.Log("Checking loaded FSMs...");
            FsmEditor.RebuildFsmList();
            foreach (var fsm in FsmEditor.FsmList)
            {
                // Re-initialize loads data and forces a dirty check
                // so we can just call this and let it handle dirty etc.

                fsm.Reinitialize();
            }
        }
        private static IEnumerator LoadPrefabsWithPlayMakerFSMComponents()
        {
            feedback.StartProcedure("LoadPrefabsWithPlayMakerFSMComponents");

            feedback.LogAction("Finding Prefabs with PlayMakerFSMs");

            var searchDirectory = new DirectoryInfo(Application.dataPath);
            var prefabFiles     = searchDirectory.GetFiles("*.prefab", SearchOption.AllDirectories);

            yield return(null);

            feedback.StartProcedure("Get Dependancies for all Prefabs");

            foreach (var file in prefabFiles)
            {
                var filePath = file.FullName.Replace(@"\", "/").Replace(Application.dataPath, "Assets");
                //Debug.Log(filePath + "\n" + Application.dataPath);

                var dependencies = AssetDatabase.GetDependencies(new[] { filePath });
                foreach (var dependency in dependencies)
                {
                    if (dependency.Contains("/PlayMaker.dll"))
                    {
                        feedback.LogAction("Found Prefab with FSM: " + filePath);
                        AssetDatabase.LoadAssetAtPath(filePath, typeof(GameObject));
                    }

                    yield return(null);
                }

                yield return(null);
            }

            feedback.EndProcedure("Get Dependancies for all Prefabs");

            feedback.LogAction("Rebuild FsmList");

            FsmEditor.RebuildFsmList();

            yield return(null);

            feedback.EndProcedure("LoadPrefabsWithPlayMakerFSMComponents");
        }
        private static IEnumerator SaveAllFSMsInBuild()
        {
            feedback.StartProcedure("Save All FSMs In Build");
            foreach (var scene in EditorBuildSettings.scenes)
            {
                feedback.LogAction("Open Scene: " + scene.path);
                try{
                    EditorApplication.OpenScene(scene.path);
                    FsmEditor.RebuildFsmList();
                    SaveAllLoadedFSMs();
                    EditorApplication.SaveScene();
                }catch (Exception e)
                {
                    Debug.LogWarning("error : " + e.Message);
                }
                yield return(null);
            }

            feedback.EndProcedure("Save All FSMs In Build");
        }
        private static IEnumerator SaveAllLoadedFSMs()
        {
            feedback.StartProcedure("Save All Loaded FSMs");

            feedback.LogAction("Rebuild Fsm List");

            FsmEditor.RebuildFsmList();

            yield return(null);

            foreach (var fsm in FsmEditor.FsmList)
            {
                //Debug.Log("Re-save FSM: " + FsmEditorUtility.GetFullFsmLabel(fsm));
                //FsmEditor.SetFsmDirty(fsm, false);

                feedback.LogAction("Save action for fsm: " + fsm.GameObjectName + "/" + fsm.Name);
                FsmEditor.SaveActions(fsm);
                yield return(null);
            }

            feedback.EndProcedure("Save All Loaded FSMs");
        }