Beispiel #1
0
    private void OnClickShiftButton(int x)
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame >= 0 &&
            _mCurrentFrame < frames.Count)
        {
            ChromaDevice1DEnum device = animation.Device;
            int maxLeds  = ChromaUtils.GetMaxLeds(device);
            int offsetX  = maxLeds - x;
            var oldFrame = frames[_mCurrentFrame];
            var newFrame = ChromaUtils.CreateColors1D(device);
            for (int i = 0; i < maxLeds; ++i)
            {
                int color = (int)oldFrame[(i + offsetX) % maxLeds];
                newFrame[i] = color;
            }
            frames[_mCurrentFrame] = newFrame;
        }
        animation.Frames = frames;
    }
Beispiel #2
0
    private void OnClickFirstButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        _mCurrentFrame = 0;
        animation.RefreshCurve();
    }
Beispiel #3
0
    private void OnClickDarkenButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame >= 0 &&
            _mCurrentFrame < frames.Count)
        {
            ChromaDevice1DEnum device = animation.Device;
            int maxLeds = ChromaUtils.GetMaxLeds(device);
            var frame   = frames[_mCurrentFrame];
            for (int i = 0; i < maxLeds; ++i)
            {
                Color color = ChromaUtils.ToRGB((int)frame[i]);
                color.r *= 0.75f;
                color.g *= 0.75f;
                color.b *= 0.75f;
                frame[i] = ChromaUtils.ToBGR(color);
            }
        }
        animation.Frames = frames;
    }
Beispiel #4
0
    private void OnClickUnloadButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        Unload();
    }
Beispiel #5
0
    protected override void OnClickPreviewButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (ChromaConnectionManager.Instance.Connected)
        {
            if (_mCurrentFrame >= 0 &&
                _mCurrentFrame < frames.Count)
            {
                ChromaDevice1DEnum device = animation.Device;
                EffectArray1dInput colors = frames[_mCurrentFrame];
                EffectResponseId   effect = ChromaUtils.CreateEffectCustom1D(device, colors);
                if (null != effect &&
                    effect.Result == 0)
                {
                    ChromaUtils.SetEffect(effect.Id);
                    ChromaUtils.RemoveEffect(effect.Id);
                }
            }
        }
    }
Beispiel #6
0
 /// <summary>
 /// Loop 1D animation using complete callback
 /// </summary>
 /// <param name="animation"></param>
 void LoopAnimation1D(ChromaSDKAnimation1D animation)
 {
     if (_mPlayAnimation)
     {
         animation.PlayWithOnComplete(LoopAnimation1D);
     }
 }
Beispiel #7
0
    private void OnClickPasteButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame >= 0 &&
            _mCurrentFrame < frames.Count)
        {
            ChromaDevice1DEnum device = animation.Device;
            int maxLeds = ChromaUtils.GetMaxLeds(device);
            if (_mColors.Count == maxLeds)
            {
                var frame = ChromaUtils.CreateColors1D(device);
                for (int i = 0; i < maxLeds; ++i)
                {
                    frame[i] = _mColors[i];
                }
                frames[_mCurrentFrame] = frame;
            }
        }
        animation.Frames = frames;
    }
Beispiel #8
0
    private void OnClickAddButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame < 0 ||
            _mCurrentFrame >= frames.Count)
        {
            _mCurrentFrame = 0;
        }
        EffectArray1dInput frame = ChromaUtils.CreateColors1D(animation.Device);

        if (_mCurrentFrame == frames.Count ||
            (_mCurrentFrame + 1) == frames.Count)
        {
            frames.Add(frame);
            _mCurrentFrame = frames.Count - 1;
        }
        else
        {
            ++_mCurrentFrame;
            frames.Insert(_mCurrentFrame, frame);
        }
        animation.Frames = frames;
        animation.RefreshCurve();
    }
Beispiel #9
0
 private void LoopAnimation1D(ChromaSDKAnimation1D animation)
 {
     if (this._mPlayAnimation)
     {
         animation.PlayWithOnComplete(new ChromaSDKAnimation1D.ChomaOnComplete1D(this.LoopAnimation1D));
     }
 }
Beispiel #10
0
    private void OnClickSaturateButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame >= 0 &&
            _mCurrentFrame < frames.Count)
        {
            ChromaDevice1DEnum device = animation.Device;
            int maxLeds = ChromaUtils.GetMaxLeds(device);
            var frame   = frames[_mCurrentFrame];
            for (int i = 0; i < maxLeds; ++i)
            {
                Color color = ChromaUtils.ToRGB((int)frame[i]);
                float max   = Mathf.Max(Mathf.Max(color.r, color.g), color.b);
                color    = Color.Lerp(Color.black, _mColor, max);
                frame[i] = ChromaUtils.ToBGR(color);
            }
        }
        animation.Frames = frames;
    }
Beispiel #11
0
    private void Unload()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        if (animation.IsLoaded())
        {
            animation.Unload();
        }
    }
Beispiel #12
0
    private void OnClickStopButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        if (animation.IsPlaying())
        {
            animation.Stop();
        }
    }
Beispiel #13
0
    private void OnClickLastButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        _mCurrentFrame = 0;
        if (animation.Frames.Count > 0)
        {
            _mCurrentFrame = animation.Frames.Count - 1;
        }
        animation.RefreshCurve();
    }
Beispiel #14
0
    private void OnClickReverseAnimationButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();
        frames.Reverse();
        animation.Frames = frames;
        animation.RefreshCurve();
    }
Beispiel #15
0
    private void OnClickResetButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        Unload();

        _mCurrentFrame = 0;

        animation.ClearFrames();
        animation.RefreshCurve();
    }
Beispiel #16
0
    private void OnClickPlayButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        if (!animation.IsLoaded())
        {
            animation.Load();
        }

        animation.Play();
    }
Beispiel #17
0
    private void OnClickSetDevice()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        Unload();

        if (animation.Device != _mDevice)
        {
            animation.Device = _mDevice;
            animation.ClearFrames();
            animation.RefreshCurve();
        }
    }
Beispiel #18
0
    private void LoadImage(string path)
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        Unload();

        if (!string.IsNullOrEmpty(path))
        {
            ImageManager.LoadImage(path);

            int frameCount = ImageManager.PluginGetFrameCount();
            if (frameCount == 0)
            {
                Debug.LogError("Failed to read frames from image! Please try again!");
            }

            ChromaDevice1DEnum device = animation.Device;
            var colors = ChromaUtils.CreateColors1D(device);

            for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex)
            {
                if (frameIndex > 0)
                {
                    OnClickAddButton();
                }
                var frames = animation.Frames; //copy
                if (_mCurrentFrame >= 0 &&
                    _mCurrentFrame < animation.Frames.Count)
                {
                    //Debug.Log(string.Format("Frame count: {0}", frameCount));

                    int height = ImageManager.PluginGetHeight();
                    int width  = ImageManager.PluginGetWidth();

                    if (height > 0)
                    {
                        for (int x = 0; x < colors.Count && x < width; x++)
                        {
                            int color = ImageManager.PluginGetPixel(frameIndex, x, 0);
                            colors[x] = color;
                        }
                    }

                    frames[_mCurrentFrame] = colors;
                }
                animation.Frames = frames;
            }
        }
    }
Beispiel #19
0
    private void OnClickInsertButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame < 0 ||
            _mCurrentFrame >= frames.Count)
        {
            _mCurrentFrame = 0;
        }
        EffectArray1dInput oldFrame;

        if (frames.Count > 0)
        {
            oldFrame = frames[_mCurrentFrame];
        }
        else
        {
            oldFrame = ChromaUtils.CreateColors1D(animation.Device);
        }
        EffectArray1dInput frame = ChromaUtils.CreateColors1D(animation.Device);

        if (frames.Count == 0)
        {
            frames.Add(frame);
            _mCurrentFrame = frames.Count - 1;
        }
        else
        {
            frames.Insert(_mCurrentFrame, frame);
        }
        // copy colors
        if (_mCurrentFrame >= 0 &&
            _mCurrentFrame < frames.Count)
        {
            ChromaDevice1DEnum device = animation.Device;
            int maxLeds = ChromaUtils.GetMaxLeds(device);
            for (int i = 0; i < maxLeds; ++i)
            {
                frame[i] = oldFrame[i];
            }
        }
        animation.Frames = frames;
        animation.RefreshCurve();
    }
Beispiel #20
0
    private void OnClickRandomButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame >= 0 &&
            _mCurrentFrame < frames.Count)
        {
            ChromaDevice1DEnum device = animation.Device;
            frames[_mCurrentFrame] = ChromaUtils.CreateRandomColors1D(device);
        }
        animation.Frames = frames;
    }
Beispiel #21
0
    private void OnClickColor(int element)
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame < frames.Count)
        {
            int color = ChromaUtils.ToBGR(_mColor);
            frames[_mCurrentFrame][element] = color;
            Repaint();
        }
        animation.Frames = frames;
    }
    private void AutoOverrideTime()
    {
        if (_mAnimation)
        {
            if (_mAnimation is ChromaSDKAnimation1D)
            {
                ChromaSDKAnimation1D animation = _mAnimation as ChromaSDKAnimation1D;
                var   frames    = animation.Frames; //copy
                float frameTime = _mInterval;
                float time      = 0.0f;
                //clear old keys
                while (animation.Curve.keys.Length > 0)
                {
                    animation.Curve.RemoveKey(0);
                }
                //add keys on new interval
                for (int i = 0; i < frames.Count; ++i)
                {
                    time += frameTime;
                    animation.Curve.AddKey(time, 0f);
                }
                animation.RefreshCurve();
            }
            else if (_mAnimation is ChromaSDKAnimation2D)
            {
                ChromaSDKAnimation2D animation = _mAnimation as ChromaSDKAnimation2D;

                var   frames    = animation.Frames; //copy
                float frameTime = _mInterval;
                float time      = 0.0f;
                //clear old keys
                while (animation.Curve.keys.Length > 0)
                {
                    animation.Curve.RemoveKey(0);
                }
                //add keys on new interval
                for (int i = 0; i < frames.Count; ++i)
                {
                    time += frameTime;
                    animation.Curve.AddKey(time, 0f);
                }
                animation.RefreshCurve();
            }
        }
    }
Beispiel #23
0
    private void OnClickNextButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        if (_mCurrentFrame < 0 ||
            _mCurrentFrame >= frames.Count)
        {
            _mCurrentFrame = 0;
        }
        if ((_mCurrentFrame + 1) < frames.Count)
        {
            ++_mCurrentFrame;
        }
        animation.RefreshCurve();
    }
 private void ResetAnimation()
 {
     if (_mAnimation)
     {
         if (_mAnimation is ChromaSDKAnimation1D)
         {
             ChromaSDKAnimation1D animation = _mAnimation as ChromaSDKAnimation1D;
             animation.ClearFrames();
             animation.RefreshCurve();
         }
         else if (_mAnimation is ChromaSDKAnimation2D)
         {
             ChromaSDKAnimation2D animation = _mAnimation as ChromaSDKAnimation2D;
             animation.ClearFrames();
             animation.RefreshCurve();
         }
         ChromaSDKAnimationBaseEditor.GoToFirstFrame();
     }
 }
Beispiel #25
0
    private void OnClickOverrideButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var   frames    = animation.Frames; //copy
        float frameTime = _mOverrideFrameTime;
        float time      = 0.0f;

        //clear old keys
        while (animation.Curve.keys.Length > 0)
        {
            animation.Curve.RemoveKey(0);
        }
        //add keys on new interval
        for (int i = 0; i < frames.Count; ++i)
        {
            time += frameTime;
            animation.Curve.AddKey(time, 0f);
        }
        animation.RefreshCurve();
    }
Beispiel #26
0
    private void OnClickFillButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame >= 0 &&
            _mCurrentFrame < frames.Count)
        {
            ChromaDevice1DEnum device = animation.Device;
            int maxLeds  = ChromaUtils.GetMaxLeds(device);
            var elements = ChromaUtils.CreateColors1D(device);
            for (int i = 0; i < maxLeds; ++i)
            {
                elements[i] = ChromaUtils.ToBGR(_mColor);
            }
            frames[_mCurrentFrame] = elements;
        }
        animation.Frames = frames;
    }
 private void DeleteFrame()
 {
     if (_mAnimation)
     {
         if (_mAnimation is ChromaSDKAnimation1D)
         {
             ChromaSDKAnimation1D      animation = _mAnimation as ChromaSDKAnimation1D;
             List <EffectArray1dInput> frames    = animation.Frames;
             if (frames.Count > 1)
             {
                 frames.RemoveAt(0);
             }
             else
             {
                 frames[0] = ChromaUtils.CreateColors1D(animation.Device);
             }
             animation.Frames = frames;
             animation.RefreshCurve();
         }
         else if (_mAnimation is ChromaSDKAnimation2D)
         {
             ChromaSDKAnimation2D      animation = _mAnimation as ChromaSDKAnimation2D;
             List <EffectArray2dInput> frames    = animation.Frames;
             if (frames.Count > 1)
             {
                 frames.RemoveAt(0);
             }
             else
             {
                 frames[0] = ChromaUtils.CreateColors2D(animation.Device);
             }
             animation.Frames = frames;
             animation.RefreshCurve();
         }
         ChromaSDKAnimationBaseEditor.GoToFirstFrame();
     }
 }
Beispiel #28
0
    private void OnClickContrastButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame >= 0 &&
            _mCurrentFrame < frames.Count)
        {
            ChromaDevice1DEnum device = animation.Device;
            int maxLeds = ChromaUtils.GetMaxLeds(device);
            var frame   = frames[_mCurrentFrame];
            for (int i = 0; i < maxLeds; ++i)
            {
                Color color = ChromaUtils.ToRGB((int)frame[i]);
                float avg   = (color.r + color.g + color.b) / 3f;
                if (avg < 0.5f)
                {
                    color.r *= 0.75f;
                    color.g *= 0.75f;
                    color.b *= 0.75f;
                }
                else if (avg > 0.5f)
                {
                    color.r = Mathf.Min(1f, color.r * 1.25f);
                    color.g = Mathf.Min(1f, color.g * 1.25f);
                    color.b = Mathf.Min(1f, color.b * 1.25f);
                }
                frame[i] = ChromaUtils.ToBGR(color);
            }
        }
        animation.Frames = frames;
    }
Beispiel #29
0
    private void OnClickDeleteButton()
    {
        ChromaSDKAnimation1D animation = GetAnimation();

        EditorUtility.SetDirty(animation);
        var frames = animation.Frames; //copy

        Unload();

        if (_mCurrentFrame < 0 ||
            _mCurrentFrame >= frames.Count)
        {
            _mCurrentFrame = 0;
        }
        if (frames.Count == 1)
        {
            // reset frame
            frames[0] = ChromaUtils.CreateColors1D(animation.Device);

            // reset curve
            while (animation.Curve.keys.Length > 0)
            {
                animation.Curve.RemoveKey(0);
            }
        }
        else if (frames.Count > 0)
        {
            frames.RemoveAt(_mCurrentFrame);
            if (_mCurrentFrame == frames.Count)
            {
                _mCurrentFrame = frames.Count - 1;
            }
        }
        animation.Frames = frames;
        animation.RefreshCurve();
    }
    private void CaptureFrame()
    {
        if (_mAnimation && _mRenderTexture && _mRenderCamera)
        {
            if (_mAnimation is ChromaSDKAnimation1D)
            {
                ChromaSDKAnimation1D animation = (ChromaSDKAnimation1D)_mAnimation;
                animation.Unload();
                int maxLeds = ChromaUtils.GetMaxLeds(animation.Device);

                _mTempTexture        = new Texture2D(RENDER_TEXTURE_SIZE, RENDER_TEXTURE_SIZE, TextureFormat.RGB24, false);
                RenderTexture.active = _mRenderTexture;
                _mRenderCamera.Render();
                DisplayRenderTexture(0, maxLeds, 1);
                _mTempTexture.ReadPixels(new Rect(0, 0, _mTempTexture.width, _mTempTexture.height), 0, 0, false);
                _mTempTexture.Apply();
                TextureScale.Bilinear(_mTempTexture, maxLeds, 1);
                _mTempTexture.Apply();
                RenderTexture.active = null;
                Color[] pixels = _mTempTexture.GetPixels();
                List <EffectArray1dInput> frames = animation.Frames;
                EffectArray1dInput        frame  = ChromaUtils.CreateColors1D(animation.Device);
                int index = 0;
                if (frame.Count > 0)
                {
                    for (int i = 0; i < maxLeds; ++i)
                    {
                        Color color = pixels[index];
                        frame[i] = ChromaUtils.ToBGR(color);
                        ++index;
                    }
                }
#if !SHOW_TEMP_TEXTURE
                DestroyImmediate(_mTempTexture);
#endif
                frames.Add(frame);
                animation.Frames = frames;
                ChromaSDKAnimationBaseEditor.GoToLastFrame();
            }
            else if (_mAnimation is ChromaSDKAnimation2D)
            {
                ChromaSDKAnimation2D animation = (ChromaSDKAnimation2D)_mAnimation;
                animation.Unload();
                int maxRow    = ChromaUtils.GetMaxRow(animation.Device);
                int maxColumn = ChromaUtils.GetMaxColumn(animation.Device);

                _mTempTexture        = new Texture2D(RENDER_TEXTURE_SIZE, RENDER_TEXTURE_SIZE, TextureFormat.RGB24, false);
                RenderTexture.active = _mRenderTexture;
                _mRenderCamera.Render();
                DisplayRenderTexture(0, maxColumn, maxRow);
                _mTempTexture.ReadPixels(new Rect(0, 0, _mTempTexture.width, _mTempTexture.height), 0, 0, false);
                _mTempTexture.Apply();
                TextureScale.Bilinear(_mTempTexture, maxColumn, maxRow);
                _mTempTexture.Apply();
                RenderTexture.active = null;
                Color[] pixels = _mTempTexture.GetPixels();
                List <EffectArray2dInput> frames = animation.Frames;
                EffectArray2dInput        frame  = ChromaUtils.CreateColors2D(animation.Device);
                int index = 0;
                for (int i = maxRow - 1; i >= 0; --i)
                {
                    List <int> row = frame[i];
                    for (int j = 0; j < maxColumn; ++j)
                    {
                        Color color = pixels[index];
                        row[j] = ChromaUtils.ToBGR(color);
                        ++index;
                    }
                }
#if !SHOW_TEMP_TEXTURE
                DestroyImmediate(_mTempTexture);
#endif
                frames.Add(frame);
                animation.Frames = frames;
                ChromaSDKAnimationBaseEditor.GoToLastFrame();
            }
        }
    }