private void OnClickFillColumn(int column) { 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 = frames[_mCurrentFrame]; for (int i = 0; i < maxRow; ++i) { var row = rows[i]; if (column < row.Count && column < maxColumn) { row[column] = ChromaUtils.ToBGR(_mColor); } } frames[_mCurrentFrame] = rows; } animation.Frames = frames; }
/// <summary> /// Loop 2D animation using complete callback /// </summary> /// <param name="animation"></param> void LoopAnimation2D(ChromaSDKAnimation2D animation) { if (_mPlayAnimation) { animation.PlayWithOnComplete(LoopAnimation2D); } }
private void OnClickSaturateButton() { 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 frame = frames[_mCurrentFrame]; for (int i = 0; i < maxRow; ++i) { var row = frame[i]; for (int j = 0; j < maxColumn; ++j) { Color color = ChromaUtils.ToRGB(row[j]); float max = Mathf.Max(Mathf.Max(color.r, color.g), color.b); color = Color.Lerp(Color.black, _mColor, max); row[j] = ChromaUtils.ToBGR(color); } } } animation.Frames = frames; }
private void OnClickDarkenButton() { 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 frame = frames[_mCurrentFrame]; for (int i = 0; i < maxRow; ++i) { var row = frame[i]; for (int j = 0; j < maxColumn; ++j) { Color color = ChromaUtils.ToRGB(row[j]); color.r *= 0.75f; color.g *= 0.75f; color.b *= 0.75f; row[j] = ChromaUtils.ToBGR(color); } } } animation.Frames = frames; }
private void OnClickUnloadButton() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); Unload(); }
private void OnClickFirstButton() { ChromaSDKAnimation2D animation = GetAnimation(); _mCurrentFrame = 0; animation.RefreshCurve(); }
private void LoopAnimation2D(ChromaSDKAnimation2D animation) { if (this._mPlayAnimation) { animation.PlayWithOnComplete(new ChromaSDKAnimation2D.ChomaOnComplete2D(this.LoopAnimation2D)); } }
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 OnClickFillRow(int row) { 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 = frames[_mCurrentFrame]; if (row < rows.Count && row < maxRow) { var colors = rows[row]; for (int j = 0; j < maxColumn; ++j) { colors[j] = ChromaUtils.ToBGR(_mColor); } } frames[_mCurrentFrame] = rows; } animation.Frames = frames; }
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 Unload() { ChromaSDKAnimation2D animation = GetAnimation(); if (animation.IsLoaded()) { animation.Unload(); } }
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 OnClickStopButton() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); if (animation.IsPlaying()) { animation.Stop(); } }
private void OnClickLastButton() { ChromaSDKAnimation2D animation = GetAnimation(); _mCurrentFrame = 0; if (animation.Frames.Count > 0) { _mCurrentFrame = animation.Frames.Count - 1; } animation.RefreshCurve(); }
private void OnClickReverseAnimationButton() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); var frames = animation.Frames; //copy Unload(); frames.Reverse(); animation.Frames = frames; animation.RefreshCurve(); }
private void OnClickPlayButton() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); if (!animation.IsLoaded()) { animation.Load(); } animation.Play(); }
private void OnClickResetButton() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); Unload(); _mCurrentFrame = 0; animation.ClearFrames(); 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 OnClickSetDevice() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); Unload(); if (animation.Device != _mDevice) { animation.Device = _mDevice; animation.ClearFrames(); animation.RefreshCurve(); } }
private void OnClickColor(int row, int column) { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); var frames = animation.Frames; //copy Unload(); if (_mCurrentFrame < frames.Count) { int color = ChromaUtils.ToBGR(_mColor); frames[_mCurrentFrame][row][column] = color; Repaint(); } 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 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() { ChromaSDKAnimation2D 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 OnClickContrastButton() { 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 frame = frames[_mCurrentFrame]; for (int i = 0; i < maxRow; ++i) { var row = frame[i]; for (int j = 0; j < maxColumn; ++j) { Color color = ChromaUtils.ToRGB(row[j]); 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); } row[j] = ChromaUtils.ToBGR(color); } } } animation.Frames = frames; }
private void OnClickOverrideButton() { ChromaSDKAnimation2D 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(); }
protected override void OnClickPreviewButton() { ChromaSDKAnimation2D animation = GetAnimation(); EditorUtility.SetDirty(animation); var frames = animation.Frames; //copy Unload(); if (_mCurrentFrame >= 0 && _mCurrentFrame < frames.Count) { ChromaDevice2DEnum device = animation.Device; EffectArray2dInput colors = frames[_mCurrentFrame]; EffectResponseId effect = ChromaUtils.CreateEffectCustom2D(device, colors); if (null != effect && effect.Result == 0) { ChromaUtils.SetEffect(effect.Id); ChromaUtils.RemoveEffect(effect.Id); } } }
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 OnClickExportButton() { ChromaSDKAnimation2D animation = GetAnimation(); if (animation) { string initialFileName = string.Format("{0}.chroma", animation.name); string path = EditorUtility.SaveFilePanel("Save Chroma", GetChromaFolder(), initialFileName, GetChromaExtensions()); if (!string.IsNullOrEmpty(path)) { EditorPrefs.SetString(KEY_FOLDER_CHROMA, Path.GetDirectoryName(path)); using (FileStream fs = File.Open(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite)) { using (BinaryWriter bw = new BinaryWriter(fs)) { //version bw.Write((int)ANIMATION_VERSION); //device type bw.Write((byte)ChromaDeviceTypeEnum.Type_2D); //device bw.Write((byte)animation.Device); List <EffectArray2dInput> frames = animation.Frames; //frame count bw.Write(frames.Count); //frames for (int index = 0; index < frames.Count; ++index) { EffectArray2dInput frame = frames[index]; //duration float duration = 0.0f; if (index < frames.Count && index < animation.Curve.keys.Length) { if (index == 0) { duration = animation.Curve.keys[index].time; } else { duration = animation.Curve.keys[index].time - animation.Curve.keys[index - 1].time; } } bw.Write((float)duration); // colors int maxRow = ChromaUtils.GetMaxRow(animation.Device); int maxColumn = ChromaUtils.GetMaxColumn(animation.Device); for (int i = 0; i < maxRow; ++i) { List <int> row = frame[i]; for (int j = 0; j < maxColumn; ++j) { int color = row[j]; bw.Write((int)color); } } } bw.Flush(); AssetDatabase.Refresh(); } } } } }