void InitTickables() { _updater = new TaskUpdater <ITickable>(UpdateTickable); foreach (var type in _priorities.Select(x => x.First)) { Assert.That(type.DerivesFrom <ITickable>(), "Expected type '{0}' to drive from ITickable while checking priorities in TickableHandler", type.Name()); } var priorityMap = _priorities.ToDictionary(x => x.First, x => x.Second); foreach (var tickable in _tickables) { int priority; if (priorityMap.TryGetValue(tickable.GetType(), out priority)) { _updater.AddTask(tickable, priority); } else { _updater.AddTask(tickable); } } }
void InitTickables() { _updater = new TaskUpdater <ITickable>(UpdateTickable); foreach (var type in _priorities.Select(x => x.First)) { Assert.That(type.DerivesFrom <ITickable>(), "Expected type '{0}' to drive from ITickable while checking priorities in TickableHandler", type.Name()); } foreach (var tickable in _tickables) { // Note that we use zero for unspecified priority // This is nice because you can use negative or positive for before/after unspecified var matches = _priorities.Where(x => tickable.GetType().DerivesFromOrEqual(x.First)).Select(x => x.Second).ToList(); int priority = matches.IsEmpty() ? 0 : matches.Single(); _updater.AddTask(tickable, priority); } }