Esempio n. 1
0
        public List <MonoBehaviour> FindReference(CustomEvent e)
        {
            List <MonoBehaviour> result = new List <MonoBehaviour>();

            for (int i = 0; i < SceneManager.sceneCount; i++)
            {
                var scene = SceneManager.GetSceneAt(i);

                var allObjects = scene.GetRootGameObjects();

                for (int j = 0; j < allObjects.Length; j++)
                {
                    var obj = allObjects[j];

                    var comps = obj.GetComponentsInChildren <MonoBehaviour>(true);

                    foreach (var comp in comps)
                    {
                        FieldInfo[] fields = comp.GetType().GetFields();

                        foreach (var field in fields)
                        {
                            KAIEvent attrib = Attribute.GetCustomAttribute(field, typeof(KAIEvent)) as KAIEvent;

                            if (attrib != null)
                            {
                                if (field.GetValue(comp) as CustomEvent != null && (field.GetValue(comp) as CustomEvent).name.Equals(e.name))
                                {
                                    result.Add(comp);
                                }
                            }
                        }
                    }
                }
            }

            return(result);
        }
Esempio n. 2
0
        public void RefreshReference(EventReference er)
        {
            if (er != null)
            {
                er.ReferenceNames = new List <string>();
                er.Events         = new List <CustomEvent>();
                er.Fields         = new List <FieldInfo>();
                {
                    FieldInfo[] fields = er.Reference.GetType().GetFields();

                    foreach (var field in fields)
                    {
                        KAIEvent attrib = Attribute.GetCustomAttribute(field, typeof(KAIEvent)) as KAIEvent;

                        if (attrib != null)
                        {
                            er.Events.Add(field.GetValue(er.Reference) as CustomEvent);
                            er.ReferenceNames.Add(field.Name);
                            er.Fields.Add(field);
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        public SceneStatistics GetSceneStatistics(SceneAsset s)
        {
            SceneStatistics result = new SceneStatistics();

            if (s == null)
            {
                return(result);
            }

            for (int j = 0; j < _Scenes.Count; j++)
            {
                var guid1 = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(_Scenes[j]));
                var guid2 = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(s));

                if (guid1.Equals(guid2))
                {
                    {
                        EditorSceneManager.OpenScene(AssetDatabase.GetAssetPath(_Scenes[j]), OpenSceneMode.Additive);
                    }
                }
            }

            var scene = EditorSceneManager.GetSceneByPath(AssetDatabase.GetAssetPath(s));

            if (scene.IsValid() && !scene.isLoaded)
            {
                EditorSceneManager.LoadScene(scene.path);
            }

            if (scene.IsValid() && scene.isLoaded)
            {
                var allObjects     = scene.GetRootGameObjects();
                int eventCount     = 0;
                int referenceCount = 0;
                int listenerCount  = 0;
                Dictionary <string, CustomEvent> events = new Dictionary <string, CustomEvent>();

                for (int j = 0; j < allObjects.Length; j++)
                {
                    var obj = allObjects[j];

                    var listenerComps = obj.GetComponentsInChildren <GameEventListener>(true);
                    var AllComps      = obj.GetComponentsInChildren <MonoBehaviour>(true);
                    listenerCount += listenerComps.Length;

                    foreach (var comp in AllComps)
                    {
                        FieldInfo[] fields = comp.GetType().GetFields();

                        foreach (var field in fields)
                        {
                            KAIEvent attrib = Attribute.GetCustomAttribute(field, typeof(KAIEvent)) as KAIEvent;

                            if (attrib != null)
                            {
                                referenceCount++;
                                if (field.GetValue(comp) as CustomEvent != null)
                                {
                                    if (events.ContainsKey((field.GetValue(comp) as CustomEvent).GetInstanceID().ToString()) == false)
                                    {
                                        events.Add((field.GetValue(comp) as CustomEvent).GetInstanceID().ToString(), field.GetValue(comp) as CustomEvent);
                                    }
                                    //eventCount++;
                                }
                            }
                        }
                    }
                }

                result.NumberOfListeners  = listenerCount.ToString() + " Listeners";
                result.NumberOfEvents     = events.Count.ToString() + " Events";
                result.NumberOfReferences = referenceCount.ToString() + " Event References";
            }

            return(result);
        }
Esempio n. 4
0
        public void FindAllReferences(List <string> scenes)
        {
            References = new List <EventReference>();

            if (scenes.Count > 0)
            {
                var activeScene = EditorSceneManager.GetActiveScene();
                for (int i = 0; i < EditorSceneManager.sceneCount; i++)
                {
                    if (EditorSceneManager.GetSceneAt(i) != activeScene && EditorSceneManager.GetSceneAt(i).isLoaded)
                    {
                        if (EditorSceneManager.GetSceneAt(i).isLoaded)
                        {
                            EditorSceneManager.SaveScene(EditorSceneManager.GetSceneAt(i));
                        }
                        else
                        {
                            EditorSceneManager.LoadScene(EditorSceneManager.GetSceneAt(i).path, LoadSceneMode.Additive);
                        }

                        EditorSceneManager.SetActiveScene(activeScene);
                    }
                }

                for (int i = 0; i < scenes.Count; i++)
                {
                    for (int j = 0; j < _Scenes.Count; j++)
                    {
                        {
                            var guid1 = AssetDatabase.AssetPathToGUID(scenes[i]);
                            var guid2 = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(_Scenes[j]));

                            if (guid1.Equals(guid2))
                            {
                                var scene = EditorSceneManager.OpenScene(scenes[i], OpenSceneMode.Additive);

                                {
                                    if (scene.IsValid() && scene.isLoaded)
                                    {
                                        var allObjects = scene.GetRootGameObjects();

                                        for (int k = 0; k < allObjects.Length; k++)
                                        {
                                            var obj = allObjects[k];

                                            var comps = obj.GetComponentsInChildren <MonoBehaviour>(true);

                                            foreach (var comp in comps)
                                            {
                                                FieldInfo[] fields = comp.GetType().GetFields();

                                                var eventReference = new EventReference();
                                                eventReference.Reference = comp;
                                                bool add = false;
                                                foreach (var field in fields)
                                                {
                                                    KAIEvent attrib = Attribute.GetCustomAttribute(field, typeof(KAIEvent)) as KAIEvent;

                                                    if (attrib != null)
                                                    {
                                                        eventReference.Events.Add(field.GetValue(comp) as CustomEvent);
                                                        eventReference.ReferenceNames.Add(field.Name);
                                                        eventReference.Fields.Add(field);
                                                        add = true;
                                                    }
                                                }

                                                if (add)
                                                {
                                                    References.Add(eventReference);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }