Ejemplo n.º 1
0
        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);
Ejemplo n.º 2
0
        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;
                }
            }
        }
Ejemplo n.º 3
0
 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();
 }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        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;
                }
            }
        }
Ejemplo n.º 6
0
 private bool IsKey(EffectStateRatioSet set)
 {
     return(set[RatioType.X] is ConstantRatioMaker);
 }