public ParticleSystem(ITimeProvider timeProvider, object userData = null, float subdivision = 128.0f) { TimeProvider = timeProvider; Subdivision = subdivision; Particles = new SpatialPartition <ParticleCollection>(Subdivision, (index) => new ParticleCollection(index, Particles.GetSectorBounds(index))); UpdateArgs = new ParticleUpdateArgs(this); RenderArgs = new ParticleRenderArgs(this); var temporaryInstance = Activator.CreateInstance <T>(); temporaryInstance.InitializeSystem(userData, out Updater, out Renderer, out GetPosition, this); }