private static void DrawInfo(Level level)
        {
            if (!TasSettings.Enabled || !TasSettings.InfoHud)
            {
                return;
            }

            StringBuilder stringBuilder = new();

            if (TasSettings.InfoTasInput)
            {
                WriteTasInput(stringBuilder);
            }

            string hudInfo = GameInfo.HudInfo;

            if (hudInfo.IsNotEmpty())
            {
                if (stringBuilder.Length > 0)
                {
                    stringBuilder.AppendLine();
                }

                stringBuilder.Append(hudInfo);
            }

            string text = stringBuilder.ToString().Trim();

            if (string.IsNullOrEmpty(text) && !TasSettings.InfoSubpixelIndicator)
            {
                return;
            }

            int viewWidth  = Engine.ViewWidth;
            int viewHeight = Engine.ViewHeight;

            float pixelScale = Engine.ViewWidth / 320f;
            float margin     = 2 * pixelScale;
            float padding    = 2 * pixelScale;
            float fontSize   = 0.15f * pixelScale * TasSettings.InfoTextSize / 10f;
            float alpha      = TasSettings.InfoOpacity / 10f;
            float infoAlpha  = 1f;

            Size = JetBrainsMonoFont.Measure(text) * fontSize;
            Size = InfoSubPixelIndicator.TryExpandSize(Size, padding);

            float maxX = viewWidth - Size.X - margin - padding * 2;
            float maxY = viewHeight - Size.Y - margin - padding * 2;

            if (maxY > 0f)
            {
                TasSettings.InfoPosition = TasSettings.InfoPosition.Clamp(margin, margin, maxX, maxY);
            }

            float x = TasSettings.InfoPosition.X;
            float y = TasSettings.InfoPosition.Y;

            Rectangle bgRect = new((int)x, (int)y, (int)(Size.X + padding * 2), (int)(Size.Y + padding * 2));

            if (!Hotkeys.InfoHud.Check && (level.Paused || CollidePlayer(level, bgRect)))
            {
                alpha     *= TasSettings.InfoMaskedOpacity / 10f;
                infoAlpha *= alpha;
            }

            Draw.SpriteBatch.Begin();

            Draw.Rect(bgRect, Color.Black * alpha);

            InfoSubPixelIndicator.DrawIndicator(bgRect.Bottom, padding, infoAlpha);

            Vector2 textPosition = new(x + padding, y + padding);
            Vector2 scale        = new(fontSize);

            JetBrainsMonoFont.Draw(text, textPosition, Vector2.Zero, scale, Color.White * infoAlpha);

            Draw.SpriteBatch.End();
        }
Ejemplo n.º 2
0
        private static void DrawInfo(Level self)
        {
            if (!TasSettings.Enabled || !TasSettings.InfoHud)
            {
                return;
            }

            StringBuilder stringBuilder = new();

            if (TasSettings.InfoTasInput)
            {
                WriteTasInput(stringBuilder);
            }

            string hudInfo = GameInfo.HudInfo;

            if (hudInfo.IsNotEmpty())
            {
                if (stringBuilder.Length > 0)
                {
                    stringBuilder.AppendLine();
                }

                stringBuilder.Append(hudInfo);
            }

            string text = stringBuilder.ToString().Trim();

            if (string.IsNullOrEmpty(text) && !TasSettings.InfoSubPixelIndicator)
            {
                return;
            }

            int viewWidth  = Engine.ViewWidth;
            int viewHeight = Engine.ViewHeight;

            float pixelScale = Engine.ViewWidth / 320f;
            float margin     = 2 * pixelScale;
            float padding    = 2 * pixelScale;
            float fontSize   = 0.15f * pixelScale * TasSettings.InfoTextSize / 10f;
            float alpha      = TasSettings.InfoOpacity / 10f;
            float infoAlpha  = 1f;

            Vector2 size = JetBrainsMonoFont.Measure(text) * fontSize;

            size = InfoSubPixelIndicator.TryExpandSize(size, padding);

            float maxX = viewWidth - size.X - margin - padding * 2;
            float maxY = viewHeight - size.Y - margin - padding * 2;

            if (maxY > 0f)
            {
                TasSettings.InfoPosition = TasSettings.InfoPosition.Clamp(margin, margin, maxX, maxY);
            }

            float x = TasSettings.InfoPosition.X;
            float y = TasSettings.InfoPosition.Y;

            Rectangle bgRect = new((int)x, (int)y, (int)(size.X + padding * 2), (int)(size.Y + padding * 2));

            if (self.GetPlayer() is { } player)
            {
                Vector2   playerPosition = self.Camera.CameraToScreen(player.TopLeft) * pixelScale;
                Rectangle playerRect     = new((int)playerPosition.X, (int)playerPosition.Y, (int)(8 * pixelScale), (int)(11 * pixelScale));
                Rectangle mirrorBgRect   = bgRect;
                if (SaveData.Instance?.Assists.MirrorMode == true)
                {
                    mirrorBgRect.X = (int)Math.Abs(x - viewWidth + size.X + padding * 2);
                }

                if (self.Paused || playerRect.Intersects(mirrorBgRect))
                {
                    alpha     *= TasSettings.InfoMaskedOpacity / 10f;
                    infoAlpha *= alpha;
                }
            }

            Draw.SpriteBatch.Begin();

            Draw.Rect(bgRect, Color.Black * alpha);

            InfoSubPixelIndicator.DrawIndicator(bgRect.Bottom, padding, infoAlpha);

            Vector2 textPosition = new(x + padding, y + padding);
            Vector2 scale        = new(fontSize);

            JetBrainsMonoFont.Draw(text, textPosition, Vector2.Zero, scale, Color.White * infoAlpha);

            Draw.SpriteBatch.End();
        }