public override void Render(IStateOwner pOwner, SKCanvas pRenderTarget, DrMarioLevelCompleteState Source, GameStateSkiaDrawParameters Element) { if (!Initialized) { Initialized = true; CompleteBox = TetrisGame.Imageman.GetSKBitmap("Level_Complete_Box"); CompletionTextPaint = new SKPaint(); CompletionTextPaint.ApplySizedFont(pOwner, 24, SKColors.White); CompletionTextPaint.Color = SKColors.White; CompletionTextPaintShadow = new SKPaint(); CompletionTextPaintShadow.ApplySizedFont(pOwner, 24, SKColors.Black); } SKCanvas g = pRenderTarget; var Bounds = Element.Bounds; RenderingProvider.Static.DrawElement(pOwner, pRenderTarget, Source.GetComposite(), Element); DrawFadeOverlay(pRenderTarget, Element.Bounds); //we want a "LEVEL CLEAR TRY NEXT" thingie. var BoxBounds = new SKRect(Element.Bounds.Left, Element.Bounds.Top, Element.Bounds.Left + Element.Bounds.Width, Element.Bounds.Width + Element.Bounds.Top); pRenderTarget.DrawBitmap(CompleteBox, BoxBounds); SKPoint InitialTextPos = new SKPoint(BoxBounds.Left + (float)((CompletionTextPaint.TextSize) * (pOwner.ScaleFactor * 5)), BoxBounds.Top + (float)((CompletionTextPaint.TextSize) * (pOwner.ScaleFactor * 5))); float CurrentY = InitialTextPos.Y; var ChosenCompleteLine = CompletionLines[DateTime.Now.Second % 2]; foreach (String line in ChosenCompleteLine) { float sWidth = CompletionTextPaint.MeasureText(line); //determine vertical location in boxBounds. SKPoint TextDrawPosition = new SKPoint(BoxBounds.Left + (BoxBounds.Width / 2) - (sWidth / 2), CurrentY); pRenderTarget.DrawText(line, new SKPoint((float)(TextDrawPosition.X + (5f * pOwner.ScaleFactor)), (float)(TextDrawPosition.Y + (5f * pOwner.ScaleFactor))), CompletionTextPaintShadow); pRenderTarget.DrawText(line, TextDrawPosition, CompletionTextPaintShadow); CurrentY += CompletionTextPaint.TextSize; } }