Example #1
0
        public override void Render(CoreSdk.RenderingContext context)
        {
            // Start with line height equal to 100% of viewport height and
            // shrink to 10%.
            var startHeight = context.Viewport.Height;
            var endHeight   = context.Viewport.Height * 0.1;

            // Get time relative to animation start.
            var animTime = TimeSpan.FromSeconds(
                this.simTime.TotalSeconds % this.animDuration.TotalSeconds);

            using (context.Renderer.SetRenderingMode(CoreSdk.RenderingMode.Default2d))
            {
                foreach (var m in this.messages)
                {
                    if (animTime < m.StartTime || animTime > m.EndTime)
                    {
                        continue; // This message should not be displayed now.
                    }

                    // Get time relative to message's time window.
                    var messageAnimTime = animTime - m.StartTime;
                    // Normalize to [0..1].
                    var messageAnimTimeNorm = messageAnimTime.TotalSeconds / m.Duration.TotalSeconds;

                    var desiredHeight = Lerp(startHeight, endHeight, messageAnimTimeNorm);
                    var scale         = (float)GetScaleForDesiredSize(
                        size: this.fontFace.GetHeight(),
                        desiredSize: desiredHeight);

                    // Center message in viewport.
                    var textDim  = context.Renderer.GetTextDimension(this.fontFace, m.Text, scale);
                    var position = new CoreSdk.Vec2f(
                        x: (context.Viewport.Width - textDim.X) / 2,
                        y: (context.Viewport.Height - textDim.Y) / 2);

                    // Red text fading out gradually.
                    var opaqueness = (float)Lerp(1, 0, messageAnimTimeNorm);
                    var color      = new CoreSdk.Vec4f(
                        m.Color.R / 255f,
                        m.Color.G / 255f,
                        m.Color.B / 255f,
                        opaqueness);

                    context.Renderer.Draw(this.fontFace, color, position, m.Text, scale);
                }
            }
        }
Example #2
0
        // Core will call this when a frame is being rendered.
        public override void Render(CoreSdk.RenderingContext context)
        {
            var text = string.Format(
                "Project:      {0}\n" +
                "Path:         {1}\n" +
                "Uptime (sys): {2:g}\n" +
                "Uptime (sim): {3:g}",
                ProjectName,
                ProjectFileName,
                DateTime.UtcNow - this.runningSince,
                this.simDuration);

            // Scale 300 will preserve our desired font line height
            // (here 32 screen pixels).
            const float scale = 300;

            // Bottom-left corner is (0, 0).
            var position = new CoreSdk.Vec2f(
                x: 10,
                y: context.Viewport.Height - 32); // Leaving space for 32 pixel line height.
            var shadowPosition = new CoreSdk.Vec2f(
                position.X + 2,
                position.Y - 2);

            // White opaque text with black opaque shadow.
            var color       = new CoreSdk.Vec4f(1, 1, 1, 1);
            var shadowColor = new CoreSdk.Vec4f(0, 0, 0, 1);

            // We should restore rendering mode when we're done. Easiest way
            // is to wrap it in "using".
            using (context.Renderer.SetRenderingMode(CoreSdk.RenderingMode.Default2d))
            {
                context.Renderer.Draw(this.fontFace, shadowColor, shadowPosition, text, scale);
                context.Renderer.Draw(this.fontFace, color, position, text, scale);
            }
        }