コード例 #1
0
ファイル: VoxBaker.cs プロジェクト: Deus0/zoxel
 void DestroyECS()
 {
     if (space != null)
     {
         space.GetOrCreateSystem <VoxelSystemGroup>().Clear();
         space.Dispose();
         space = null;
         EditorApplication.update -= UpdateEditorWindow;
         Repaint();
     }
 }
コード例 #2
0
        public void Dispose()
        {
            m_SourceEntityManager = null;

            if (m_ShadowWorld != null && m_ShadowWorld.IsCreated)
            {
                m_ShadowWorld.Dispose();
            }

            m_BlobAssetCache.Dispose();
            m_ShadowWorld         = null;
            m_ShadowEntityManager = null;
            m_EntityQueryDesc     = null;
        }
コード例 #3
0
 public void Dispose()
 {
     if (space != null)
     {
         try
         {
             space.Dispose();
         }
         catch (ArgumentException e)
         {
             Debug.LogWarning(e.ToString());
         }
         space = null;
     }
 }
コード例 #4
0
 public void OnDisable()
 {
     Debug.Log("Removing Update Method from MapMaker.");
     EditorApplication.update -= UpdateEditorWindow;
     //ClearMap();
     //systemsManager.Clear();
     if (space != null)
     {
         if (space.IsCreated)
         {
             space.GetOrCreateSystem <VoxelSystemGroup>().Clear();
             space.Dispose();
         }
         space = null;
         //EditorApplication.update -= UpdateEditorWindow;
         //Repaint();
     }
 }
コード例 #5
0
        public void Dispose()
        {
            if (m_ShadowWorld != null && m_ShadowWorld.IsCreated)
            {
                m_ShadowWorld.Dispose();
            }
            m_ShadowWorld            = null;
            m_ShadowWorldEntityQuery = null;

            if (m_SrcWorld != null && m_SrcWorld.IsCreated)
            {
                m_SrcWorldEntityQuery.Dispose();
            }
            m_SrcWorldEntityQuery = null;
            m_SrcWorld            = null;

            m_TypeInfoStream.Dispose();
        }
コード例 #6
0
        public static void Initialize(string worldName, bool editorWorld)
        {
            // Register hybrid injection hooks
            #pragma warning disable 0618
            InjectionHookSupport.RegisterHook(new GameObjectArrayInjectionHook());
            InjectionHookSupport.RegisterHook(new TransformAccessArrayInjectionHook());
            InjectionHookSupport.RegisterHook(new ComponentArrayInjectionHook());
            #pragma warning restore 0618

            PlayerLoopManager.RegisterDomainUnload(DomainUnloadShutdown, 10000);

            var world = new World(worldName);
            World.Active = world;
            var systems = GetAllSystems(WorldSystemFilterFlags.Default);
            if (systems == null)
            {
                world.Dispose();
                if (World.Active == world)
                {
                    World.Active = null;
                }
                return;
            }

            // create presentation system and simulation system
            InitializationSystemGroup initializationSystemGroup = world.GetOrCreateManager <InitializationSystemGroup>();
            SimulationSystemGroup     simulationSystemGroup     = world.GetOrCreateManager <SimulationSystemGroup>();
            PresentationSystemGroup   presentationSystemGroup   = world.GetOrCreateManager <PresentationSystemGroup>();
            // Add systems to their groups, based on the [UpdateInGroup] attribute.
            foreach (var type in systems)
            {
                // Skip the built-in root-level systems
                if (type == typeof(InitializationSystemGroup) ||
                    type == typeof(SimulationSystemGroup) ||
                    type == typeof(PresentationSystemGroup))
                {
                    continue;
                }
                if (editorWorld)
                {
                    if (Attribute.IsDefined(type, typeof(ExecuteInEditMode)))
                    {
                        Debug.LogError(
                            $"{type} is decorated with {typeof(ExecuteInEditMode)}. Support for this attribute will be deprecated. Please use {typeof(ExecuteAlways)} instead.");
                    }
                    if (!Attribute.IsDefined(type, typeof(ExecuteAlways)))
                    {
                        continue;
                    }
                }

                var groups = type.GetCustomAttributes(typeof(UpdateInGroupAttribute), true);
                if (groups.Length == 0)
                {
                    simulationSystemGroup.AddSystemToUpdateList(GetOrCreateManagerAndLogException(world, type) as ComponentSystemBase);
                }

                foreach (var g in groups)
                {
                    var group = g as UpdateInGroupAttribute;
                    if (group == null)
                    {
                        continue;
                    }

                    if (!(typeof(ComponentSystemGroup)).IsAssignableFrom(group.GroupType))
                    {
                        Debug.LogError($"Invalid [UpdateInGroup] attribute for {type}: {group.GroupType} must be derived from ComponentSystemGroup.");
                        continue;
                    }

                    var groupMgr = GetOrCreateManagerAndLogException(world, group.GroupType);
                    if (groupMgr == null)
                    {
                        Debug.LogWarning(
                            $"Skipping creation of {type} due to errors creating the group {group.GroupType}. Fix these errors before continuing.");
                        continue;
                    }
                    var groupSys = groupMgr as ComponentSystemGroup;
                    if (groupSys != null)
                    {
                        groupSys.AddSystemToUpdateList(GetOrCreateManagerAndLogException(world, type) as ComponentSystemBase);
                    }
                }
            }

            // Update player loop
            initializationSystemGroup.SortSystemUpdateList();
            simulationSystemGroup.SortSystemUpdateList();
            presentationSystemGroup.SortSystemUpdateList();
            ScriptBehaviourUpdateOrder.UpdatePlayerLoop(world);
        }