Exemple #1
0
 public override void Release()
 {
     ready.Remove(this);
     available.Add(this);
     if (luz != null)
     {
         luz = luz.Release();
     }
 }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
            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);
            }