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(); }
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(); }