Ejemplo n.º 1
0
        /// <summary>
        /// Performs initialization of all scanned systems and templates
        /// </summary>
        internal void Initialize(IEnumerable <Type> availableSystems, IEnumerable <Type> availableTemplates)
        {
            // processing templates
            foreach (Type availableTemplateType in availableTemplates)
            {
                EntityTemplate template = null;
                try
                {
                    template = (EntityTemplate)Activator.CreateInstance(availableTemplateType);
                }
                catch (Exception ex)
                {
                    Log.Error(ex, $"Unable to create template '{availableTemplateType.Name}'");
                    continue;
                }

                template.InitializeInternal();

                _service.Templates[availableTemplateType] = template;
                _service.TemplatesByName[template.Name]   = template;
            }

            foreach (Type availableSystem in availableSystems)
            {
                BaseComponentSystem system = null;
                try
                {
                    system = (BaseComponentSystem)Activator.CreateInstance(availableSystem);
                }
                catch (Exception ex)
                {
                    Log.Error(ex, $"Unable to create system '{availableSystem.Name}'");
                    continue;
                }

                system.PreInitialize(this);

                if (system.SystemType == SystemProcessingType.Draw)
                {
                    _service.DrawSystems.Add(system);
                }
                else if (system.SystemType == SystemProcessingType.Update)
                {
                    _service.UpdateSystems.Add(system);
                }
            }

            // performing ordering of systems and initializing
            _service.UpdateSystems.Sort((system1, system2) => system1.Order - system2.Order);
            _service.DrawSystems.Sort((system1, system2) => system1.Order - system2.Order);

            foreach (BaseComponentSystem system in _service.UpdateSystems)
            {
                system.Initialize();
            }

            foreach (BaseComponentSystem system in _service.DrawSystems)
            {
                system.Initialize();
            }
        }