private void OnClickShiftButton(int y, int x) { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); var frames = animation.Frames; //copy Unload(); if (_mCurrentFrame >= 0 && _mCurrentFrame < frames.Count) { ChromaDevice2DEnum device = animation.Device; int maxRow = ChromaUtils.GetMaxRow(device); int maxColumn = ChromaUtils.GetMaxColumn(device); int offsetX = maxColumn - x; int offsetY = maxRow - y; var oldFrame = frames[_mCurrentFrame]; var newFrame = ChromaUtils.CreateColors2D(device); for (int i = 0; i < maxRow; ++i) { var oldRow = oldFrame[(i + offsetY) % maxRow]; var newRow = newFrame[i]; for (int j = 0; j < maxColumn; ++j) { int color = oldRow[(j + offsetX) % maxColumn]; newRow[j] = color; } } frames[_mCurrentFrame] = newFrame; } animation.Frames = frames; }
private void OnClickFillButton() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); var frames = animation.Frames; //copy Unload(); if (_mCurrentFrame >= 0 && _mCurrentFrame < frames.Count) { ChromaDevice2DEnum device = animation.Device; int maxRow = ChromaUtils.GetMaxRow(device); int maxColumn = ChromaUtils.GetMaxColumn(device); var rows = ChromaUtils.CreateColors2D(device); for (int i = 0; i < maxRow; ++i) { var row = rows[i]; for (int j = 0; j < maxColumn; ++j) { row[j] = ChromaUtils.ToBGR(_mColor); } } frames[_mCurrentFrame] = rows; } animation.Frames = frames; }
private void OnClickPasteButton() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); var frames = animation.Frames; //copy Unload(); if (_mCurrentFrame >= 0 && _mCurrentFrame < frames.Count) { ChromaDevice2DEnum device = animation.Device; int maxRow = ChromaUtils.GetMaxRow(device); int maxColumn = ChromaUtils.GetMaxColumn(device); if (null != _mColors && _mColors.Count == maxRow && null != _mColors[0] && _mColors[0].Count == maxColumn) { var frame = ChromaUtils.CreateColors2D(device); for (int i = 0; i < maxRow; ++i) { for (int j = 0; j < maxColumn; ++j) { frame[i][j] = _mColors[i][j]; } } frames[_mCurrentFrame] = frame; } } animation.Frames = frames; }
private void OnClickAddButton() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); var frames = animation.Frames; //copy Unload(); if (_mCurrentFrame < 0 || _mCurrentFrame >= frames.Count) { _mCurrentFrame = 0; } EffectArray2dInput oldFrame; if (frames.Count > 0) { oldFrame = frames[_mCurrentFrame]; } else { oldFrame = ChromaUtils.CreateColors2D(animation.Device); } EffectArray2dInput frame = ChromaUtils.CreateColors2D(animation.Device); if (_mCurrentFrame == frames.Count || (_mCurrentFrame + 1) == frames.Count) { frames.Add(frame); _mCurrentFrame = frames.Count - 1; } else { ++_mCurrentFrame; frames.Insert(_mCurrentFrame, frame); } // copy colors if (_mCurrentFrame >= 0 && _mCurrentFrame < frames.Count) { ChromaDevice2DEnum device = animation.Device; int maxRow = ChromaUtils.GetMaxRow(device); int maxColumn = ChromaUtils.GetMaxColumn(device); for (int i = 0; i < maxRow; ++i) { var row = frame[i]; for (int j = 0; j < maxColumn; ++j) { row[j] = oldFrame[i][j]; } } } animation.Frames = frames; animation.RefreshCurve(); }
private void LoadImage(string path) { ChromaSDKAnimation2D 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!"); } ChromaDevice2DEnum device = animation.Device; var colors = ChromaUtils.CreateColors2D(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(); for (int y = 0; y < colors.Count && y < height; y++) { var row = colors[y]; for (int x = 0; x < row.Count && x < width; x++) { int color = ImageManager.PluginGetPixel(frameIndex, x, y); row[x] = color; } } frames[_mCurrentFrame] = colors; } animation.Frames = frames; } } }
private void OnClickClearButton() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); var frames = animation.Frames; //copy Unload(); if (_mCurrentFrame >= 0 && _mCurrentFrame < animation.Frames.Count) { ChromaDevice2DEnum device = animation.Device; frames[_mCurrentFrame] = ChromaUtils.CreateColors2D(device); } 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 OnClickDeleteButton() { ChromaSDKAnimation2D 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.CreateColors2D(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(); } } }