/// <inheritdoc /> public override void Sort() { var i = 0; var lifeField = ParticlePool.GetField(ParticleFields.Life); if (lifeField.IsValid()) { foreach (var particle in ParticlePool) { if (particle.Get(lifeField) > 0) { particleList[i] = new SortedParticle(particle, 0); i++; } } } else { foreach (var particle in ParticlePool) { particleList[i] = new SortedParticle(particle, 0); i++; } } currentLivingParticles = i; }
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)); }
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 override void Sort() { currentLivingParticles = ParticlePool.LivingParticles; var i = 0; var posField = ParticlePool.GetField(fieldDesc); if (posField.IsValid()) { unsafe { foreach (var particle in ParticlePool) { particleList[i] = new SortedParticle(particle, getIndex(particle.Get(posField))); i++; } } } else { foreach (var particle in ParticlePool) { particleList[i] = new SortedParticle(particle, 0); i++; } } // Sort the list Array.Sort(particleList, 0, currentLivingParticles); // GC problem? Switch to another solution if needed }
int CompareTo(SortedParticle other) { return (this == other) ? 0 : (this < other) ? -1 : 1; }
int CompareTo(SortedParticle other) { return((this == other) ? 0 : (this < other) ? -1 : 1); }