private void MotionAnimation(LaserBase laser, float time, float beat)
        {
            switch (LaserMotionMode)
            {
            case LaserMotionMode.PanLoop:
                pan.SetRotation(panRange.Sin(time * Speed));
                tilt.SetDefault();
                break;

            case LaserMotionMode.TiltLoop:
                tilt.SetRotation(tiltRange.Sin(time * Speed));
                pan.SetDefault();
                break;

            case LaserMotionMode.Open:
                laser.DefaultDegree();
                pan.SetDefault();
                tilt.SetDefault();
                break;

            case LaserMotionMode.OpenClose:
                laser.Degree(indicatorRange.Sin(time * Speed));
                pan.SetDefault();
                tilt.SetDefault();
                break;

            case LaserMotionMode.OpenCloseTilt:
                laser.Degree(indicatorRange.Sin(time * 2 * Speed));
                pan.SetDefault();
                tilt.SetRotation(tiltRange.Sin(time * Speed));
                break;
            }
        }
        private void DimmerAnimation(LaserBase laser, float time, float beat)
        {
            float intensity = 0;

            switch (LaserDimmerMode)
            {
            case LaserDimmerMode.Beat:
                intensity = beat;
                break;

            case LaserDimmerMode.BeatReverse:
                intensity = 1 - beat;
                break;

            case LaserDimmerMode.On:
                intensity = 1f;
                break;

            case LaserDimmerMode.Off:
                intensity = 0f;
                break;

            case LaserDimmerMode.Sin:
                intensity = 0.5f * Mathf.Sin(laser.AddressOffset * OffsetStrength + time * Speed) + 0.5f;
                break;

            case LaserDimmerMode.ReverseSin:
                intensity = 0.5f * Mathf.Sin(laser.AddressOffset * OffsetStrength - time * Speed) + 0.5f;
                break;
            }

            intensity *= IntensityMultiplier;
            laser.SetDimmer(intensity);
        }
        private void ColorAnimation(LaserBase laser, float time, float beat)
        {
            switch (LaserColorMode)
            {
            case LaserColorMode.Gradient:
                laser.SetColor(LaserGradient.Evaluate(laser.AddressOffset));
                break;

            case LaserColorMode.GradientLoop:
                laser.SetColor(LaserGradient.Evaluate((time + laser.AddressOffset) % 1f));
                break;

            case LaserColorMode.HSVLoop:
                laser.SetColor(Color.HSVToRGB((time + laser.AddressOffset) % 1f, 1, 1));
                break;

            case LaserColorMode.HSV:
                laser.SetColor(Color.HSVToRGB(laser.AddressOffset, 1, 1));
                break;

            case LaserColorMode.RGB:
                if (laser.AddressOffset < 1f / 3f)
                {
                    laser.SetColor(Color.red);
                }
                else if (laser.AddressOffset < 2f / 3f)
                {
                    laser.SetColor(Color.green);
                }
                else
                {
                    laser.SetColor(Color.blue);
                }

                break;

            default:
                break;
            }
        }