public void Draw(SpriteBatch spriteBatch, bool inWater, bool?inSub, ParticleBlendState blendState) { ParticlePrefab.DrawTargetType drawTarget = inWater ? ParticlePrefab.DrawTargetType.Water : ParticlePrefab.DrawTargetType.Air; for (int i = 0; i < particleCount; i++) { var particle = particles[i]; if (particle.BlendState != blendState) { continue; } //equivalent to !particles[i].DrawTarget.HasFlag(drawTarget) but garbage free and faster if ((particle.DrawTarget & drawTarget) == 0) { continue; } if (inSub.HasValue) { bool isOutside = particle.CurrentHull == null; if (!particle.DrawOnTop && isOutside == inSub.Value) { continue; } } particles[i].Draw(spriteBatch); } }
public void Draw(SpriteBatch spriteBatch, bool inWater, ParticleBlendState blendState) { ParticlePrefab.DrawTargetType drawTarget = inWater ? ParticlePrefab.DrawTargetType.Water : ParticlePrefab.DrawTargetType.Air; for (int i = 0; i < particleCount; i++) { if (particles[i].BlendState != blendState) { continue; } if (!particles[i].DrawTarget.HasFlag(drawTarget)) { continue; } particles[i].Draw(spriteBatch); } }
public Propulsion(Item item, XElement element) : base(item, element) { switch (ToolBox.GetAttributeString(element, "usablein", "both").ToLowerInvariant()) { case "air": usableIn = ParticlePrefab.DrawTargetType.Air; break; case "water": usableIn = ParticlePrefab.DrawTargetType.Water; break; case "both": default: usableIn = ParticlePrefab.DrawTargetType.Both; break; } }