using System; using System.Drawing; using ComponentFramework.Core; using ComponentFramework.Tools; using MTV3D65; namespace ComponentFrameworkTests.Components { [AutoLoad] class EasingTest : Component { const int HorizontalSpacing = 15; const int VerticalSpacing = 30; int Height; int Width; readonly EasingType[] easingTypes; TVViewport viewport; public EasingTest(ICore core) : base(core) { easingTypes = Enum.GetValues(typeof(EasingType)) as EasingType[]; } public override void Initialize() { viewport = Core.Engine.GetViewport(); } public override void Update(TimeSpan elapsed) { Width = (viewport.GetWidth() - HorizontalSpacing * (easingTypes.Length + 1)) / easingTypes.Length; Height = (viewport.GetHeight() - VerticalSpacing * 4) / 3; } public override void PostDraw() { Screen2DImmediate.Action_Begin2D(); Screen2DText.Action_BeginText(true); int y = Height + VerticalSpacing; DrawCurve(HorizontalSpacing, y, Easing.EaseIn); y += Height + VerticalSpacing; DrawCurve(HorizontalSpacing, y, Easing.EaseOut); y += Height + VerticalSpacing; DrawCurve(HorizontalSpacing, y, Easing.EaseInOut); Screen2DText.Action_EndText(); Screen2DImmediate.Action_End2D(); } void DrawCurve(int x, int y, Func easingFunction) { foreach (EasingType type in easingTypes) { Screen2DText.TextureFont_DrawText(type.ToString(), x, y, Color.White.ToArgb()); float sLastI = 0; for (int i = 0; i < Width; i++) { var sI = easingFunction((double)i / Width, type); Screen2DImmediate.Draw_Line(x + (i - 1), y - sLastI * Height, x + i, y - sI * Height); sLastI = sI; } x += Width + HorizontalSpacing; } } } }