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; }
private void OnClickFirstButton() { ChromaSDKAnimation1D animation = GetAnimation(); _mCurrentFrame = 0; animation.RefreshCurve(); }
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; }
private void OnClickUnloadButton() { ChromaSDKAnimation1D animation = GetAnimation(); EditorUtility.SetDirty(animation); Unload(); }
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); } } } }
/// <summary> /// Loop 1D animation using complete callback /// </summary> /// <param name="animation"></param> void LoopAnimation1D(ChromaSDKAnimation1D animation) { if (_mPlayAnimation) { animation.PlayWithOnComplete(LoopAnimation1D); } }
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; }
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(); }
private void LoopAnimation1D(ChromaSDKAnimation1D animation) { if (this._mPlayAnimation) { animation.PlayWithOnComplete(new ChromaSDKAnimation1D.ChomaOnComplete1D(this.LoopAnimation1D)); } }
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; }
private void Unload() { ChromaSDKAnimation1D animation = GetAnimation(); if (animation.IsLoaded()) { animation.Unload(); } }
private void OnClickStopButton() { ChromaSDKAnimation1D animation = GetAnimation(); EditorUtility.SetDirty(animation); if (animation.IsPlaying()) { animation.Stop(); } }
private void OnClickLastButton() { ChromaSDKAnimation1D animation = GetAnimation(); _mCurrentFrame = 0; if (animation.Frames.Count > 0) { _mCurrentFrame = animation.Frames.Count - 1; } animation.RefreshCurve(); }
private void OnClickReverseAnimationButton() { ChromaSDKAnimation1D animation = GetAnimation(); EditorUtility.SetDirty(animation); var frames = animation.Frames; //copy Unload(); frames.Reverse(); animation.Frames = frames; animation.RefreshCurve(); }
private void OnClickResetButton() { ChromaSDKAnimation1D animation = GetAnimation(); EditorUtility.SetDirty(animation); Unload(); _mCurrentFrame = 0; animation.ClearFrames(); animation.RefreshCurve(); }
private void OnClickPlayButton() { ChromaSDKAnimation1D animation = GetAnimation(); EditorUtility.SetDirty(animation); if (!animation.IsLoaded()) { animation.Load(); } animation.Play(); }
private void OnClickSetDevice() { ChromaSDKAnimation1D animation = GetAnimation(); EditorUtility.SetDirty(animation); Unload(); if (animation.Device != _mDevice) { animation.Device = _mDevice; animation.ClearFrames(); animation.RefreshCurve(); } }
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; } } }
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(); }
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; }
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(); } } }
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(); } }
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(); }
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(); } }
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; }
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(); } } }