//Generate one banding of a palette
        public void PalGen1DBand(int numBands, Grid pal, ulong color1, ulong color2, int band)
        {
            if (pal == null)
            {
                return;
            }

            double sectionSize = 256.0 / numBands / 2;
            ulong  a           = color1;
            ulong  b           = color2;
            var    offset      = (int)(band * sectionSize * 2);

            for (int i = 0; i <= sectionSize; i++)
            {
                double mux   = i / sectionSize;
                ulong  color = MathLerper.LerpRgba(mux, a, b);
                pal.Plot((i + offset), 0, 0, color);
            }
            for (int i = 0; i <= sectionSize; i++)
            {
                double mux   = i / sectionSize;
                ulong  color = MathLerper.LerpRgba(mux, b, a);
                pal.Plot((int)(i + sectionSize + offset), 0, 0, color);
            }
        }
 //Linearly interpolate between properties A and B, modulated by mux (0 to 1)
 public void Lerp(double mux, CellProperties propsA, CellProperties propsB)
 {
     if (propsA == null || propsB == null)
     {
         return;
     }
     Rgba      = MathLerper.LerpRgba(mux, propsA.Rgba, propsB.Rgba);
     TextureId = (byte)MathLerper.ThresholdAb(mux, propsA.TextureId, propsB.TextureId);
     ShapeId   = (byte)MathLerper.ThresholdAb(mux, propsA.ShapeId, propsB.ShapeId);
     PhysicsId = (byte)MathLerper.ThresholdAb(mux, propsA.PhysicsId, propsB.PhysicsId);
     GroupId   = (byte)MathLerper.ThresholdAb(mux, propsA.GroupId, propsB.GroupId);
     WorldId   = (ulong)MathLerper.ThresholdAb(mux, propsA.WorldId, propsB.WorldId);
     CalcUnified();
 }
        //Generate a palette from a List of banding rgba
        public void PalGen1DBanded(Grid pal, List <ulong> bandColors)
        {
            if (pal == null || bandColors == null)
            {
                return;
            }

            double sectionSize = 256.0 / (bandColors.Count - 1);

            for (int band = 0; band < bandColors.Count - 1; band++)
            {
                ulong a = bandColors[band];
                ulong b = bandColors[band + 1];
                for (int i = 0; i < sectionSize; i++)
                {
                    double mux   = i / sectionSize;
                    ulong  color = MathLerper.LerpRgba(mux, a, b);
                    pal.Plot((int)(band * sectionSize + i), 0, 0, color);
                }
            }
        }