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);
/// <summary> /// クローンメソッド /// </summary> /// <returns></returns> public object Clone() { var ret = new LinearRatioMaker(); return(ret); }