HideNode CreateNodeForManager(int id, ComponentSystemBase system)
        {
            var active = true;

            if (!(system is ComponentSystemGroup))
            {
                managersById.Add(id, system);
                worldsById.Add(id, system.World);
                var recorder = Recorder.Get($"{system.World?.Name ?? "none"} {system.GetType().FullName}");
                if (!recordersByManager.ContainsKey(system))
                {
                    recordersByManager.Add(system, new AverageRecorder(recorder));
                }
                else
                {
                    UnityEngine.Debug.LogError("System added twice: " + system);
                }
                recorder.enabled = true;
                active           = false;
            }
            var name = getWorldSelection() == null ? $"{system.GetType().Name} ({system.World?.Name ?? "none"})" : system.GetType().Name;
            var item = new TreeViewItem {
                id = id, displayName = name
            };

            var hideNode = new HideNode(item)
            {
                Active = active
            };

            hideNodesById.Add(id, hideNode);
            return(hideNode);
        }
Ejemplo n.º 2
0
        private HideNode CreateNodeForManager(int id, ComponentSystemBase system)
        {
            var active = true;

            if (!(system is ComponentSystemGroup))
            {
                managersById.Add(id, system);
                worldsById.Add(id, system.World);
                var recorder = Recorder.Get($"{system.World.Name} {system.GetType().FullName}");
                recordersByManager.Add(system, new AverageRecorder(recorder));
                recorder.enabled = true;
                active           = false;
            }
            var name = getWorldSelection() == null ? $"{system.GetType().Name} ({system.World.Name})" : system.GetType().Name;
            var item = new TreeViewItem {
                id = id, displayName = name
            };

            var hideNode = new HideNode(item)
            {
                Active = active
            };

            hideNodesById.Add(id, hideNode);
            return(hideNode);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Adds a system to the player loop in the same way that <see cref="Unity.Entities.ScriptBehaviourUpdateOrder"/> does.
        ///
        /// One difference is that this does not check to see if the system is already added. It is up to the users of this
        /// method to ensure that they do not add systems multiple times.
        /// </summary>
        /// <param name="parent">
        /// Must be one of the top level types already in the player loop such as
        /// <see cref="UnityEngine.PlayerLoop.FixedUpdate"/> or <see cref="UnityEngine.PlayerLoop.Update"/>.
        /// </param>
        /// <param name="system">
        /// The system to be added to the player loop.
        /// </param>
        /// <exception cref="Exception">
        /// An exception is thrown if the reflection components could not be initialized or the parent type was not in the player
        /// loop.
        /// </exception>
        public static void AddSubSystem(Type parent, ComponentSystemBase system)
        {
            ValidateReflectionComponents();

            PlayerLoopSystem currentPlayerLoop = PlayerLoop.GetCurrentPlayerLoop();

            for (int i = 0; i < currentPlayerLoop.subSystemList.Length; i++)
            {
                if (currentPlayerLoop.subSystemList[i].type == parent)
                {
                    PlayerLoopSystem[] oldSubSystems = currentPlayerLoop.subSystemList[i].subSystemList;

                    PlayerLoopSystem[] newSubSystems = new PlayerLoopSystem[oldSubSystems.Length + 1];
                    Array.Copy(oldSubSystems, newSubSystems, oldSubSystems.Length);

                    newSubSystems[oldSubSystems.Length].type           = system.GetType();
                    newSubSystems[oldSubSystems.Length].updateDelegate = CreateDummyWrapper(system);

                    currentPlayerLoop.subSystemList[i].subSystemList = newSubSystems;

                    PlayerLoop.SetPlayerLoop(currentPlayerLoop);

                    return;
                }
            }

            throw new Exception($"Could not add {system.GetType().Name} to player loop. Are you sure {parent.Name} is in the player loop?");
        }
        private static TreeViewState GetStateForSystem(ComponentSystemBase system, List <TreeViewState> states, List <string> stateNames)
        {
            if (system == null)
            {
                return(new TreeViewState());
            }

            var currentSystemName = system.GetType().FullName;

            var stateForCurrentSystem = states.Where((t, i) => stateNames[i] == currentSystemName).FirstOrDefault();

            if (stateForCurrentSystem != null)
            {
                return(stateForCurrentSystem);
            }

            stateForCurrentSystem = new TreeViewState();
            if (system.ComponentGroups != null && system.ComponentGroups.Length > 0)
            {
                stateForCurrentSystem.expandedIDs = new List <int> {
                    1
                }
            }
            ;
            states.Add(stateForCurrentSystem);
            stateNames.Add(currentSystemName);
            return(stateForCurrentSystem);
        }
        private static List <EntityArchetypeQuery> GetQueriesForSystem(ComponentSystemBase system)
        {
            if (queriesBySystem.TryGetValue(system, out var queries))
            {
                return(queries);
            }

            queries = new List <EntityArchetypeQuery>();

            var currentType = system.GetType();

            while (currentType != null)
            {
                foreach (var field in currentType.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public))
                {
                    if (field.FieldType == typeof(EntityArchetypeQuery))
                    {
                        queries.Add(field.GetValue(system) as EntityArchetypeQuery);
                    }
                }

                currentType = currentType.BaseType;
            }

            return(queries);
        }
        public static TreeViewState GetStateForSystem(ComponentSystemBase system, ref List <TreeViewState> states, ref List <string> stateNames)
        {
            if (system == null)
            {
                return(new TreeViewState());
            }

            if (states == null)
            {
                states     = new List <TreeViewState>();
                stateNames = new List <string>();
            }
            var currentSystemName = system.GetType().Name.ToString();

            TreeViewState stateForCurrentSystem = null;

            for (var i = 0; i < states.Count; ++i)
            {
                if (stateNames[i] == currentSystemName)
                {
                    stateForCurrentSystem = states[i];
                    break;
                }
            }
            if (stateForCurrentSystem == null)
            {
                stateForCurrentSystem = new TreeViewState();
                states.Add(stateForCurrentSystem);
                stateNames.Add(currentSystemName);
            }
            return(stateForCurrentSystem);
        }
 public static void LogChunksCount(ComponentSystemBase system, int chunks)
 {
     if (!_instance.LogResults)
     {
         return;
     }
     UnityEngine.Debug.Log(system.GetType().Name + " chunks = " + chunks);
 }
 public static void LogSumResults(ComponentSystemBase system, double noTag, double firstTag, double secondTag, double total)
 {
     if (!_instance.LogResults)
     {
         return;
     }
     UnityEngine.Debug.Log(system.GetType().Name +
                           $" {noTag:F2} / {firstTag:F2} / {secondTag:F2} total={total:F2}");
 }
        public Type GetSystemType()
        {
            if (!Valid)
            {
                return(null);
            }

            return(Managed != null?Managed.GetType() : SystemBaseRegistry.GetStructType(StatePointer->UnmanagedMetaIndex));
        }
Ejemplo n.º 10
0
 public Type GetSystemType()
 {
     if (Managed != null)
     {
         return(Managed.GetType());
     }
     else
     {
         return(SystemBaseRegistry.GetStructType(StatePointer->UnmanagedMetaIndex));
     }
 }
Ejemplo n.º 11
0
 private void GetInstances(Type type)
 {
     if (window.selectedWorld != null)
     {
         activeInstance = window.selectedWorld.GetExistingManager(type) as ComponentSystemBase;
     }
     else
     {
         activeInstance = null;
     }
     if (instance == null || instance.GetType() != type)
     {
         instance = Activator.CreateInstance(type) as ComponentSystemBase;
     }
 }
Ejemplo n.º 12
0
        static void Parse(ComponentSystemBase system, PlayerLoopSystemGraph graph, IPlayerLoopNode parent = null)
        {
            IPlayerLoopNode node;

            graph.AllSystems.Add(system);

            switch (system)
            {
            case ComponentSystemGroup group:
                var groupNode = Pool <ComponentGroupNode> .GetPooled();

                groupNode.Value = group;
                node            = groupNode;
                foreach (var s in group.Systems)
                {
                    Parse(s, graph, node);
                }
                break;

            default:
                var systemNode = Pool <ComponentSystemBaseNode> .GetPooled();

                systemNode.Value = system;
                node             = systemNode;

                var recorder    = Recorder.Get($"{system.World?.Name ?? "none"} {system.GetType().FullName}");
                var recorderKey = new RecorderKey
                {
                    World  = system.World,
                    Group  = (ComponentSystemGroup)((ComponentGroupNode)parent).System,
                    System = system
                };

                if (!graph.RecordersBySystem.ContainsKey(recorderKey))
                {
                    graph.RecordersBySystem.Add(recorderKey, new AverageRecorder(recorder));
                }
                else
                {
                    UnityEngine.Debug.LogError("System added twice: " + system);
                }

                recorder.enabled = true;
                break;
            }

            AddToGraph(graph, node, parent);
        }
Ejemplo n.º 13
0
        private IEnumerable <ComponentSystemGroup> GetSystemGroup(ComponentSystemBase system)
        {
            var updateInGroupAttributes = TypeManager.GetSystemAttributes(
                system.GetType(),
                typeof(UpdateInGroupAttribute));

            if (updateInGroupAttributes.Length == 0)
            {
                yield return(_simulationSystemGroup);
            }
            else
            {
                foreach (var attr in updateInGroupAttributes)
                {
                    if (attr is UpdateInGroupAttribute uga)
                    {
                        if (_world.GetExistingSystem(uga.GroupType) is ComponentSystemGroup systemGroup)
                        {
                            yield return(systemGroup);
                        }
                    }
                }
            }
        }