public void Initialize() { Assert.That(!_hasInitialized); _hasInitialized = true; _initializables = _initializables.OrderBy(x => x.Priority).ToList(); #if UNITY_EDITOR foreach (var initializable in _initializables.Select(x => x.Initializable).GetDuplicates()) { Assert.That(false, "Found duplicate IInitializable with type '{0}'".Fmt(initializable.GetType())); } #endif foreach (var initializable in _initializables) { try { #if UNIDI_INTERNAL_PROFILING using (ProfileTimers.CreateTimedBlock("User Code")) #endif #if UNITY_EDITOR using (ProfileBlock.Start("{0}.Initialize()", initializable.Initializable.GetType())) #endif { initializable.Initializable.Initialize(); } } catch (Exception e) { throw Assert.CreateException( e, "Error occurred while initializing IInitializable with type '{0}'", initializable.Initializable.GetType()); } } }
protected override void UpdateItem(IFixedTickable task) { #if UNIDI_INTERNAL_PROFILING using (ProfileTimers.CreateTimedBlock("User Code")) #endif #if UNITY_EDITOR using (ProfileBlock.Start("{0}.FixedTick()", task.GetType())) #endif { task.FixedTick(); } }
public void TriggerOnSpawned() { Assert.That(!_isSpawned); _isSpawned = true; for (int i = 0; i < _poolables.Count; i++) { #if UNIDI_INTERNAL_PROFILING using (ProfileTimers.CreateTimedBlock("User Code")) #endif #if UNITY_EDITOR using (ProfileBlock.Start("{0}.OnSpawned", _poolables[i].GetType())) #endif { _poolables[i].OnSpawned(); } } }
protected override void RunInternal() { // We always want to initialize ProjectContext as early as possible ProjectContext.Instance.EnsureIsInitialized(); #if UNITY_EDITOR using (ProfileBlock.Start("UniDi.SceneContext.Install")) #endif { Install(); } #if UNITY_EDITOR using (ProfileBlock.Start("UniDi.SceneContext.Resolve")) #endif { Resolve(); } }
public void TriggerOnDespawned() { Assert.That(_isSpawned); _isSpawned = false; // Call OnDespawned in the reverse order just like how dispose works for (int i = _poolables.Count - 1; i >= 0; i--) { #if UNIDI_INTERNAL_PROFILING using (ProfileTimers.CreateTimedBlock("User Code")) #endif #if UNITY_EDITOR using (ProfileBlock.Start("{0}.OnDespawned", _poolables[i].GetType())) #endif { _poolables[i].OnDespawned(); } } }
public static InjectTypeInfo TryGetInfo(Type type) { InjectTypeInfo info; #if UNIDI_MULTITHREADING lock (_typeInfo) #endif { if (_typeInfo.TryGetValue(type, out info)) { return(info); } } #if UNITY_EDITOR using (ProfileBlock.Start("UniDi Reflection")) #endif { info = GetInfoInternal(type); } if (info != null) { Assert.IsEqual(info.Type, type); Assert.IsNull(info.BaseTypeInfo); var baseType = type.BaseType(); if (baseType != null && !ShouldSkipTypeAnalysis(baseType)) { info.BaseTypeInfo = TryGetInfo(baseType); } } #if UNIDI_MULTITHREADING lock (_typeInfo) #endif { _typeInfo[type] = info; } return(info); }
public void LazyInjectAll() { #if UNITY_EDITOR using (ProfileBlock.Start("UniDi.LazyInstanceInjector.LazyInjectAll")) #endif { var tempList = new List <object>(); while (!_instancesToInject.IsEmpty()) { tempList.Clear(); tempList.AddRange(_instancesToInject); foreach (var instance in tempList) { // We use LazyInject instead of calling _container.inject directly // Because it might have already been lazily injected // as a result of a previous call to inject LazyInject(instance); } } } }
public void OnGui() { foreach (var renderable in _renderables) { try { #if UNIDI_INTERNAL_PROFILING using (ProfileTimers.CreateTimedBlock("User Code")) #endif #if UNITY_EDITOR using (ProfileBlock.Start("{0}.GuiRender()", renderable.Renderable.GetType())) #endif { renderable.Renderable.GuiRender(); } } catch (Exception e) { throw Assert.CreateException( e, "Error occurred while calling {0}.GuiRender", renderable.Renderable.GetType()); } } }
public void Despawn(TContract item) { Assert.That(!_inactiveItems.Contains(item), "Tried to return an item to pool {0} twice", GetType()); _activeCount--; _inactiveItems.Push(item); #if UNIDI_INTERNAL_PROFILING using (ProfileTimers.CreateTimedBlock("User Code")) #endif #if UNITY_EDITOR using (ProfileBlock.Start("{0}.OnDespawned", GetType())) #endif { OnDespawned(item); } if (_inactiveItems.Count > _settings.MaxSize) { Resize(_settings.MaxSize); } }