/// <summary>
        /// Adds new system to processing.
        /// </summary>
        /// <param name="system">System instance.</param>
        public EcsWorld AddSystem(IEcsSystem system)
        {
#if DEBUG && !ECS_PERF_TEST
            if (_inited)
            {
                throw new Exception("Already initialized, cant add new system.");
            }
#endif
            EcsInjections.Inject(this, system);

            var preInitSystem = system as IEcsPreInitSystem;
            if (preInitSystem != null)
            {
                _preInitSystems.Add(preInitSystem);
            }

            var initSystem = system as IEcsInitSystem;
            if (initSystem != null)
            {
                _initSystems.Add(initSystem);
            }

            var runSystem = system as IEcsRunSystem;
            if (runSystem != null)
            {
                switch (runSystem.GetRunSystemType())
                {
                case EcsRunSystemType.Update:
                    _runUpdateSystems.Add(runSystem);
                    break;

                case EcsRunSystemType.FixedUpdate:
                    _runFixedUpdateSystems.Add(runSystem);
                    break;
                }
            }
            return(this);
        }
Пример #2
0
        /// <summary>
        /// Adds new system to processing.
        /// </summary>
        /// <param name="system">System instance.</param>
        public MultiTickEcsSystems Add(IEcsSystem system)
        {
#if DEBUG
            if (system == null)
            {
                throw new ArgumentNullException();
            }
#endif

            var initSystem = system as IEcsInitSystem;
            if (initSystem != null)
            {
                if (_initSystemsCount == _initSystems.Length)
                {
                    Array.Resize(ref _initSystems, _initSystemsCount << 1);
                }

                _initSystems[_initSystemsCount++] = initSystem;
            }
#if !LEOECS_DISABLE_INJECT
            EcsInjections.Inject(system, _world);
#endif

            var runSystem = system as IEcsRunSystem;
            if (runSystem != null)
            {
                if (_runSystemsCount == _runSystems.Length)
                {
                    Array.Resize(ref _runSystems, _runSystemsCount << 1);
                }

                _runSystems[_runSystemsCount++] = runSystem;
            }

            return(this);
        }