Exemplo 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);
Exemplo n.º 2
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();
        }
Exemplo n.º 3
0
        /// <summary>
        /// クローンメソッド
        /// </summary>
        /// <returns></returns>
        public object Clone()
        {
            var ret = new ConstantRatioMaker();

            return(ret);
        }