public override void Release() { ready.Remove(this); available.Add(this); if (luz != null) { luz = luz.Release(); } }
private static void AddLuz(Luz luz, LuzGroup group) { Debug.Assert(luz.Group == LuzGroup.UnAssigned); counts[(int)group] += 1; luz.Group = group; active.Add(luz); Debug.Assert(active.Count <= kMaxLights); }
public static Luz Acquire(LuzGroup group) { Luz luz = null; if (ready.Count > 0) { int idx = ready.Count - 1; luz = ready[idx]; ready.RemoveAt(idx); AddLuz(luz, group); } return(luz); }
public static GlowLuz Acquire(string boneName, Matrix offset, float radius, float strength) { GlowLuz glowLuz = null; Luz luz = Luz.Acquire(Luz.LuzGroup.Glow); if (luz != null) { glowLuz = Get(boneName, offset); glowLuz.Tint = Vector3.Zero; glowLuz.Luz = luz; glowLuz.Radius = radius; glowLuz.Strength = strength; } return(glowLuz); }
public static MuzzleLuz Acquire(Matrix offset, float life, float scale) { MuzzleLuz muzzle = null; Luz luz = Luz.Acquire(Luz.LuzGroup.Fire); if (luz != null) { muzzle = Get(offset); muzzle.age = 0; muzzle.Luz = luz; muzzle.Life = life; muzzle.InitRadii(); muzzle.ScaleRadii(scale); } return(muzzle); }
public override bool Update(Matrix local, float scale) { float dt = Time.GameTimeFrameSeconds; age += dt; if (age >= life) { luz = luz.Release(); return(false); } int lo = 0; int hi = 1; float t = age; float midLife = mid * life; if (t < midLife) { t /= midLife; } else { t = (life - t) / (life - midLife); lo = 2; } /// Smooth it. t = t * (3.0f * t - 2.0f * t * t); double deviate = 0.03125; float flutter = (float)((rnd.NextDouble() * 2.0 - 1.0) * deviate + 1.0); luz.Color = colors[lo] + t * (colors[hi] - colors[lo]); luz.Color = luz.Color * Tint * flutter; luz.Position = Matrix.Multiply(Offset, local).Translation; luz.Radius = radii[lo] + t * (radii[hi] - radii[lo]); luz.Radius *= scale; return(true); }