private void AddKeyState() { EffectStateRatioSet lastset = manager.Effects[itemindex].Sets.Values[manager.Effects[itemindex].Sets.Count - 1]; int lastframe = lastset.EndFrame; if (lastframe < keyindex) { var newset = new EffectStateRatioSet { StartState = lastset.EndState, StartFrame = lastset.EndFrame, EndState = (EffectStateStructure)lastset.EndState.Clone(), EndFrame = keyindex }; foreach (RatioType type in Effect2D.Utility.RatioTypeArray) { newset[type] = new ConstantRatioMaker(); } manager.Effects[itemindex].Sets.Add(newset.StartFrame, newset); islast = true; } else { IEffect effect = manager.Effects[itemindex]; var set = GetSetFromFrameIndex(effect, keyindex); setindex = effect.Sets.IndexOfValue(set); previousset = (EffectStateRatioSet)set.CloneExceptState(); twoframeinserted = set.StartFrame + 1 != keyindex; if (set != null) { effect.Update(keyindex - 1, new EffectStateStructure()); var temp1 = (EffectStateStructure)effect.CurrentState.Clone(); effect.Update(keyindex, new EffectStateStructure()); var temp2 = (EffectStateStructure)effect.CurrentState.Clone(); var newset1 = new EffectStateRatioSet(); var newset2 = new EffectStateRatioSet(); foreach (RatioType type in Effect2D.Utility.RatioTypeArray) { if (set[type] is LinearRatioMaker) { newset2[type] = new LinearRatioMaker(); } else if (set[type] is ConstantRatioMaker) { newset2[type] = new ConstantRatioMaker(); } else if (set[type] is BezierRatioMaker) { var brm = set[type] as BezierRatioMaker; GetDevidedBezierFromX(brm.Analyzer.BCPS, (float)(keyindex - 1 - set.StartFrame) / (set.EndFrame - set.StartFrame), out BezierControlPoint[] bcps1, out BezierControlPoint[] bcps2);
public override void Execute() { IEffect effect = manager.Effects[itemindex]; for (int i = 0; i < effect.Sets.Count; i++) { EffectStateRatioSet set = effect.Sets.Values[i]; if (set.StartFrame == keyindex) { previousset1 = (EffectStateRatioSet)set.CloneExceptState(); effect.Sets.RemoveAt(i); break; } else if (set.EndFrame == keyindex) { if (i == effect.Sets.Count - 1) { previousset1 = (EffectStateRatioSet)set.CloneExceptState(); effect.Sets.RemoveAt(i); } else { EffectStateRatioSet nextset = effect.Sets.Values[i + 1]; previousset1 = (EffectStateRatioSet)set.CloneExceptState(); previousset2 = (EffectStateRatioSet)nextset.CloneExceptState(); effect.Sets.RemoveAt(i); effect.Sets.RemoveAt(i); nextset.StartFrame = set.StartFrame; nextset.StartState = set.StartState; effect.Sets.Add(nextset.StartFrame, nextset); insertindex = i; } break; } } }
private void Move(int frame) { if (frame < 0) { frame = 0; } if (selectedmanager.Set.StartState == selectedmanager.State) { if (frame >= selectedmanager.Set.EndFrame) { frame = selectedmanager.Set.EndFrame - 1; } selectedmanager.Set.StartFrame = frame; } else { if (frame <= selectedmanager.Set.StartFrame) { frame = selectedmanager.Set.StartFrame + 1; } var selectedindex = selectedmanager.Effect.Sets.IndexOfValue(selectedmanager.Set); if (selectedindex >= 0 && selectedindex < selectedmanager.Effect.Sets.Count - 1) { if (frame >= selectedmanager.Effect.Sets.Values[selectedindex + 1].EndFrame) { frame = selectedmanager.Effect.Sets.Values[selectedindex + 1].EndFrame - 1; } EffectStateRatioSet temp = selectedmanager.Effect.Sets.Values[selectedindex + 1]; temp.StartFrame = frame; selectedmanager.Effect.Sets.RemoveAt(selectedindex + 1); selectedmanager.Effect.Sets.Add(temp.StartFrame, temp); } selectedmanager.Set.EndFrame = frame; } selectedmanager.Effect.CheckFrameLength(); }
private void CreateAnimation(int framecount, bool withreverse) { bool first = true; if (!withreverse) { for (int i = 0; i < canvasDock.EffectManager.Effects.Count; i++) { IEffect effect = canvasDock.EffectManager.Effects[canvasDock.EffectManager.Effects.Count - 1 - i]; effect.Sets.Clear(); var ess1 = new EffectStateStructure(); var ess2 = new EffectStateStructure(); if (first) { first = false; } else { ess1.Alpha = 0; var set1 = new EffectStateRatioSet(); foreach (RatioType type in Effect2D.Utility.RatioTypeArray) { set1[type] = new ConstantRatioMaker(); } set1.StartFrame = 0; set1.EndFrame = i * framecount; set1.StartState = ess1; set1.EndState = ess2; effect.Sets.Add(set1.StartFrame, set1); } var ess3 = new EffectStateStructure { Alpha = 0 }; var set2 = new EffectStateRatioSet(); foreach (RatioType type in Effect2D.Utility.RatioTypeArray) { set2[type] = new ConstantRatioMaker(); } set2.StartFrame = i * framecount; set2.EndFrame = (i + 1) * framecount; set2.StartState = ess2; set2.EndState = ess3; effect.Sets.Add(set2.StartFrame, set2); if (i != canvasDock.EffectManager.Effects.Count - 1) { var ess4 = new EffectStateStructure { Alpha = 0 }; var set3 = new EffectStateRatioSet(); foreach (RatioType type in Effect2D.Utility.RatioTypeArray) { set3[type] = new ConstantRatioMaker(); } set3.StartFrame = (i + 1) * framecount; set3.EndFrame = (canvasDock.EffectManager.Effects.Count) * framecount; set3.StartState = ess3; set3.EndState = ess4; effect.Sets.Add(set3.StartFrame, set3); } } } else { for (int i = 0; i < canvasDock.EffectManager.Effects.Count; i++) { IEffect effect = canvasDock.EffectManager.Effects[canvasDock.EffectManager.Effects.Count - 1 - i]; effect.Sets.Clear(); var ess1 = new EffectStateStructure(); var ess2 = new EffectStateStructure(); if (!first) { ess1.Alpha = 0; var set1 = new EffectStateRatioSet(); foreach (RatioType type in Effect2D.Utility.RatioTypeArray) { set1[type] = new ConstantRatioMaker(); } set1.StartFrame = 0; set1.EndFrame = i * framecount; set1.StartState = ess1; set1.EndState = ess2; effect.Sets.Add(set1.StartFrame, set1); } var ess3 = new EffectStateStructure { Alpha = 0 }; var set2 = new EffectStateRatioSet(); foreach (RatioType type in Effect2D.Utility.RatioTypeArray) { set2[type] = new ConstantRatioMaker(); } set2.StartFrame = i * framecount; set2.EndFrame = (i + 1) * framecount; set2.StartState = ess2; set2.EndState = ess3; effect.Sets.Add(set2.StartFrame, set2); if (i != canvasDock.EffectManager.Effects.Count - 1) { var ess4 = new EffectStateStructure { Alpha = 1 }; var set3 = new EffectStateRatioSet(); foreach (RatioType type in Effect2D.Utility.RatioTypeArray) { set3[type] = new ConstantRatioMaker(); } set3.StartFrame = (i + 1) * framecount; set3.EndFrame = ((canvasDock.EffectManager.Effects.Count - 1) * 2 - i) * framecount; set3.StartState = ess3; set3.EndState = ess4; effect.Sets.Add(set3.StartFrame, set3); ess3 = ess4; } var ess5 = new EffectStateStructure(); var set4 = new EffectStateRatioSet(); ess5.Alpha = 0; foreach (RatioType type in Effect2D.Utility.RatioTypeArray) { set4[type] = new ConstantRatioMaker(); } set4.StartFrame = ((canvasDock.EffectManager.Effects.Count - 1) * 2 - i) * framecount; set4.EndFrame = set4.StartFrame + framecount; set4.StartState = ess3; set4.EndState = ess5; if (i != canvasDock.EffectManager.Effects.Count - 1) { effect.Sets.Add(set4.StartFrame, set4); } if (!first) { var set5 = new EffectStateRatioSet(); var ess6 = new EffectStateStructure { Alpha = 0 }; foreach (RatioType type in Effect2D.Utility.RatioTypeArray) { set5[type] = new ConstantRatioMaker(); } set5.StartFrame = set4.EndFrame; set5.EndFrame = framecount * (2 * canvasDock.EffectManager.Effects.Count - 1); set5.StartState = i == canvasDock.EffectManager.Effects.Count - 1 ? ess3 : ess5; set5.EndState = ess6; effect.Sets.Add(set5.StartFrame, set5); } first = false; } } historyDock.CommandManager.ClearAll(); timeLineDock.AdjustHScroll(); RefreshTimeLine(); }
private void TimeLine_MouseMove(object sender, MouseEventArgs e) { if (movetimeline) { var keyindex = KeyIndex(e.X); if (keyindex < 0) { keyindex = 0; } CurrentFrame = keyindex; } if (SelectedManager.Set != null && mousedown) { if (SelectedManager.Set.StartState == SelectedManager.State && SelectedManager.Set.StartFrame == 0) { return; } var keyindex = KeyIndex(e.X); switch (keyopmode) { case KeyOperationMode.Move: if (keyindex < 0) { keyindex = 0; } if (SelectedManager.Set.StartState == SelectedManager.State) { if (keyindex >= SelectedManager.Set.EndFrame) { keyindex = SelectedManager.Set.EndFrame - 1; } SelectedManager.Set.StartFrame = keyindex; newframe = keyindex; } else { if (keyindex <= SelectedManager.Set.StartFrame) { keyindex = SelectedManager.Set.StartFrame + 1; } var selectedindex = SelectedManager.Effect.Sets.IndexOfValue(SelectedManager.Set); if (selectedindex >= 0 && selectedindex < SelectedManager.Effect.Sets.Count - 1) { if (keyindex >= SelectedManager.Effect.Sets.Values[selectedindex + 1].EndFrame) { keyindex = SelectedManager.Effect.Sets.Values[selectedindex + 1].EndFrame - 1; } EffectStateRatioSet temp = SelectedManager.Effect.Sets.Values[selectedindex + 1]; temp.StartFrame = keyindex; SelectedManager.Effect.Sets.RemoveAt(selectedindex + 1); SelectedManager.Effect.Sets.Add(temp.StartFrame, temp); } SelectedManager.Set.EndFrame = keyindex; newframe = keyindex; } SelectedManager.Effect.CheckFrameLength(); AdjustHScrollBar(); if (keyindex - hScrollBar1.Value < 0) { GainHScroll(-1); } else if (keyindex - hScrollBar1.Value > MaxVisibleFrameCount) { GainHScroll(1); } DrawAndRefresh(); break; case KeyOperationMode.FixMove: if (keyindex < 0) { keyindex = 0; } if (SelectedManager.Set.StartState == SelectedManager.State) { keyopmode = KeyOperationMode.RightMoveOnly; } else { keyopmode = KeyOperationMode.LeftMoveOnly; } break; case KeyOperationMode.LeftMoveOnly: if (keyindex <= SelectedManager.Set.StartFrame) { keyindex = SelectedManager.Set.StartFrame + 1; } newframe = keyindex; int diff = keyindex - SelectedManager.Set.EndFrame; if (diff != 0) { SelectedManager.Set.EndFrame += diff; var pool = new List <EffectStateRatioSet>(); var removekey = new List <int>(); bool found = false; foreach (KeyValuePair <int, EffectStateRatioSet> pair in SelectedManager.Effect.Sets) { if (found) { pair.Value.StartFrame += diff; pair.Value.EndFrame += diff; pool.Add(pair.Value); removekey.Add(pair.Key); } found |= pair.Value == SelectedManager.Set; } foreach (int val in removekey) { SelectedManager.Effect.Sets.Remove(val); } foreach (EffectStateRatioSet set in pool) { SelectedManager.Effect.Sets.Add(set.StartFrame, set); } SelectedManager.Effect.CheckFrameLength(); AdjustHScrollBar(); DrawAndRefresh(); } break; case KeyOperationMode.RightMoveOnly: if (keyindex < 0) { keyindex = 0; } newframe = keyindex; diff = keyindex - SelectedManager.Set.StartFrame; if (diff != 0) { var pool = new List <EffectStateRatioSet>(SelectedManager.Effect.Sets.Values); SelectedManager.Effect.Sets.Clear(); foreach (EffectStateRatioSet set in pool) { set.StartFrame += diff; set.EndFrame += diff; } foreach (EffectStateRatioSet set in pool) { SelectedManager.Effect.Sets.Add(set.StartFrame, set); } SelectedManager.Effect.CheckFrameLength(); AdjustHScrollBar(); DrawAndRefresh(); } break; } } }
private bool IsKey(EffectStateRatioSet set) { return(set[RatioType.X] is ConstantRatioMaker); }