public unsafe ParticleList GetSortedList(Vector3 depth) { var livingParticles = ParticlePool.LivingParticles; var sortField = ParticlePool.GetField(fieldDesc); if (!sortField.IsValid()) { // Field is not valid - return an unsorted list return(new ParticleList(ParticlePool, livingParticles)); } SortedParticle[] particleList = ArrayPool.Allocate(ParticlePool.ParticleCapacity); var i = 0; foreach (var particle in ParticlePool) { uint order = particle.Get(sortField); particleList[i] = new SortedParticle(particle, *((float *)(&order)) * -1f); i++; } Array.Sort(particleList, 0, livingParticles); return(new ParticleList(ParticlePool, livingParticles, particleList)); }
public ParticleList GetSortedList(Vector3 depth) { var livingParticles = ParticlePool.LivingParticles; var lifeField = ParticlePool.GetField(fieldDesc); if (!lifeField.IsValid()) { // Field is not valid - return an unsorted list return(new ParticleList(ParticlePool, livingParticles)); } SortedParticle[] particleList = ArrayPool.Allocate(ParticlePool.ParticleCapacity); var i = 0; foreach (var particle in ParticlePool) { if (particle.Get(lifeField) > 0) { particleList[i] = new SortedParticle(particle, 0); i++; } } livingParticles = i; return(new ParticleList(ParticlePool, livingParticles, particleList)); }