diff --git a/Qwilight/Compiler/BMSCompiler.cs b/Qwilight/Compiler/BMSCompiler.cs index 6de45b9..3f40413 100644 --- a/Qwilight/Compiler/BMSCompiler.cs +++ b/Qwilight/Compiler/BMSCompiler.cs @@ -748,6 +748,17 @@ catch { } + try + { + var bannerDrawingPath = Utility.GetFilePath(defaultComputer.BannerDrawingPath, Utility.FileFormatFlag.Drawing); + if (!string.IsNullOrEmpty(bannerDrawingPath)) + { + defaultComputer.BannerDrawing = DrawingSystem.Instance.Load(bannerDrawingPath, defaultComputer); + } + } + catch + { + } var isBanalMedia = (!_hasMedia || defaultComputer.AlwaysBanalMedia) && defaultComputer.BanalMedia; var isBanalFailedMedia = (!_hasFailedMedia || defaultComputer.AlwaysBanalFailedMedia) && defaultComputer.BanalFailedMedia; defaultComputer.LoadBanalMedia(isBanalMedia, isBanalFailedMedia, parallelItems); diff --git a/Qwilight/Compiler/BMSONCompiler.cs b/Qwilight/Compiler/BMSONCompiler.cs index b36e364..74b102b 100644 --- a/Qwilight/Compiler/BMSONCompiler.cs +++ b/Qwilight/Compiler/BMSONCompiler.cs @@ -524,6 +524,17 @@ catch { } + try + { + var bannerDrawingPath = Utility.GetFilePath(defaultComputer.BannerDrawingPath, Utility.FileFormatFlag.Drawing); + if (!string.IsNullOrEmpty(bannerDrawingPath)) + { + defaultComputer.BannerDrawing = DrawingSystem.Instance.Load(bannerDrawingPath, defaultComputer); + } + } + catch + { + } var isBanalMedia = (!_hasMedia || defaultComputer.AlwaysBanalMedia) && defaultComputer.BanalMedia; defaultComputer.LoadBanalMedia(isBanalMedia, defaultComputer.BanalFailedMedia, parallelItems); foreach (var audioFileName in _text.sound_channels.Select(audioChannel => audioChannel.name).Concat(_text.mine_channels.Select(traoChannel => traoChannel.name))) diff --git a/Qwilight/Compute/DefaultCompute.cs b/Qwilight/Compute/DefaultCompute.cs index a5de3af..28d1252 100644 --- a/Qwilight/Compute/DefaultCompute.cs +++ b/Qwilight/Compute/DefaultCompute.cs @@ -554,6 +554,8 @@ public HandledDrawingItem? NoteDrawing { get; set; } + public DrawingItem? BannerDrawing { get; set; } + public double Status { get; set; } public double LoopingCounter { get; set; } diff --git a/Qwilight/Computing.cs b/Qwilight/Computing.cs index 698b4ca..3b39c5e 100644 --- a/Qwilight/Computing.cs +++ b/Qwilight/Computing.cs @@ -154,8 +154,8 @@ 5.0 => "JUDGE: NM", 7.0 => "JUDGE: HD", 10.0 => "JUDGE: VHD", - _ => $"LV. {Math.Round(JudgmentStage, 1)}" - }}, HP: {Math.Round(100 * HitPointsValue, 3)}%"; + _ => $"JUDGE: LV. {Math.Round(JudgmentStage, 1)}" + }}{(double.IsNaN(HitPointsValue) ? string.Empty : $", HP: {Math.Round(100 * HitPointsValue, 3)}%")}"; public string TotalNotesContents => $"{TotalNotes.ToString("#,##0")} (SC: {AutoableNotes.ToString("#,##0")}, {(IsAutoLongNote ? "LN" : "CN")}: {LongNotes.ToString("#,##0")}, MN: {TrapNotes.ToString("#,##0")})"; diff --git a/Qwilight/Qwilight.csproj b/Qwilight/Qwilight.csproj index da5f6d1..8ad426e 100644 --- a/Qwilight/Qwilight.csproj +++ b/Qwilight/Qwilight.csproj @@ -47,7 +47,7 @@ - + diff --git a/Qwilight/System/BaseUI/BasePaintProperty.cs b/Qwilight/System/BaseUI/BasePaintProperty.cs index dcd9671..83d268b 100644 --- a/Qwilight/System/BaseUI/BasePaintProperty.cs +++ b/Qwilight/System/BaseUI/BasePaintProperty.cs @@ -143,6 +143,17 @@ targetSession.PaintVisibleText(PoolSystem.Instance.GetDefaultTextItem(noteFile.WantLevelID, Framerate, EtcPaint, r.Length), PoolSystem.Instance.GetDefaultTextItem(noteFile.WantLevelID, Framerate, Paints.Paint0, r.Length), ref r); } break; + case 14: + if (noteFile != null && defaultMediaFaint > 0) + { + targetSession.PushOpacity(defaultMediaFaint / 100.0); + targetSession.DrawRectangle(Paints.Paint0, null, r); + var bannerDrawing = noteFile.BannerDrawing; + Utility.SetFilledMediaDrawing(ref r, Configure.Instance.IsMediaFill, bannerDrawing.Width, bannerDrawing.Height, PaintBound.Position0, PaintBound.Position1, PaintBound.Length, PaintBound.Height); + targetSession.PaintDrawing(ref r, bannerDrawing); + targetSession.Pop(); + } + break; } } else if (DrawingFrame >= 0) @@ -282,6 +293,19 @@ } } break; + case 14: + if (defaultMediaFaint > 0) + { + targetSession.FillRectangle(r, DrawingSystem.Instance.FaintFilledPaints[(int)(100 * defaultMediaFaint)]); + lock (handlingComputer.LoadedCSX) + { + if (handlingComputer.HasContents) + { + targetSession.PaintDrawing(ref r, handlingComputer.BannerDrawing, defaultMediaFaint); + } + } + } + break; } } else if (DrawingFrame >= 0) diff --git a/Qwilight/System/DrawingSystem/DrawingSystem.cs b/Qwilight/System/DrawingSystem/DrawingSystem.cs index 1737893..d1a3136 100644 --- a/Qwilight/System/DrawingSystem/DrawingSystem.cs +++ b/Qwilight/System/DrawingSystem/DrawingSystem.cs @@ -1893,8 +1893,7 @@ vsJudgment1 += judgments[i]; } } - var judgmentVSVisualizerInt = vsJudgment1 > 0 ? 100 * vsJudgment0 / vsJudgment1 : vsJudgment0 == vsJudgment1 ? 0 : 100 * vsJudgment0; - var judgmentVSVisualizerStopPointDrawingLength = drawingComponent.judgmentVSVisualizerStopPointDrawingLength; + var judgmentVSVisualizerInt = vsJudgment1 > 0 ? 100 * vsJudgment0 / vsJudgment1 : vsJudgment0 == vsJudgment1 ? 0 : null as int?; var judgmentVSVisualizerPosition0 = drawingComponent.judgmentVSVisualizerPosition0; var judgmentVSVisualizerPosition1 = drawingComponent.judgmentVSVisualizerPosition1; var binJudgmentVSVisualizerLength = drawingComponent.binJudgmentVSVisualizerLength; @@ -1902,45 +1901,61 @@ var judgmentVSVisualizerSystem = drawingComponent.judgmentVSVisualizerSystem; var altJudgmentVSVisualizer = drawingComponent.altJudgmentVSVisualizer; var binJudgmentVSVisualizerMap = UI.Instance.BinJudgmentVSVisualizerMap; - var judgmentVSVisualizerStopPointDrawing = UI.Instance.JudgmentVSVisualizerStopPointDrawing; - var judgmentVSVisualizerDigit = judgmentVSVisualizerInt < 100 ? 3 : Utility.GetDigit(judgmentVSVisualizerInt); - for (var i = altJudgmentVSVisualizer >> 1; i >= altJudgmentVSVisualizer % 2; --i) + var judgmentVSVisualizerDigit = judgmentVSVisualizerInt.HasValue ? judgmentVSVisualizerInt < 100 ? 3 : Utility.GetDigit(judgmentVSVisualizerInt.Value) : null as int?; + if (judgmentVSVisualizerDigit.HasValue) { - var distancePoint = i == 1 && has2P ? distance2P : 0F; - for (var j = judgmentVSVisualizerDigit - 1; j >= 2; --j) + var judgmentVSVisualizerDigitValue = judgmentVSVisualizerDigit.Value; + var judgmentVSVisualizerStopPointDrawing = UI.Instance.JudgmentVSVisualizerStopPointDrawing; + var judgmentVSVisualizerStopPointDrawingLength = drawingComponent.judgmentVSVisualizerStopPointDrawingLength; + for (var i = altJudgmentVSVisualizer >> 1; i >= altJudgmentVSVisualizer % 2; --i) { - switch (judgmentVSVisualizerSystem) + var distancePoint = i == 1 && has2P ? distance2P : 0F; + for (var j = judgmentVSVisualizerDigitValue - 1; j >= 2; --j) { - case 0: - r.Set(judgmentVSVisualizerPosition0 + binJudgmentVSVisualizerLength * (judgmentVSVisualizerDigit - j - 1) + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); - break; - case 1: - r.Set(judgmentVSVisualizerPosition0 + binJudgmentVSVisualizerLength * (0.5 * judgmentVSVisualizerDigit - j - 1) - judgmentVSVisualizerStopPointDrawingLength * 0.5 + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); - break; - case 2: - r.Set(judgmentVSVisualizerPosition0 - binJudgmentVSVisualizerLength * (j + 1) - judgmentVSVisualizerStopPointDrawingLength + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); - break; + switch (judgmentVSVisualizerSystem) + { + case 0: + r.Set(judgmentVSVisualizerPosition0 + binJudgmentVSVisualizerLength * (judgmentVSVisualizerDigitValue - j - 1) + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); + break; + case 1: + r.Set(judgmentVSVisualizerPosition0 + binJudgmentVSVisualizerLength * (0.5 * judgmentVSVisualizerDigitValue - j - 1) - judgmentVSVisualizerStopPointDrawingLength * 0.5 + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); + break; + case 2: + r.Set(judgmentVSVisualizerPosition0 - binJudgmentVSVisualizerLength * (j + 1) - judgmentVSVisualizerStopPointDrawingLength + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); + break; + } + targetSession.PaintDrawing(ref r, binJudgmentVSVisualizerMap[(int)(judgmentVSVisualizerInt / Math.Pow(10, j) % 10)]); } - targetSession.PaintDrawing(ref r, binJudgmentVSVisualizerMap[(int)(judgmentVSVisualizerInt / Math.Pow(10, j) % 10)]); + r.Position0 += binJudgmentVSVisualizerLength; + r.Length = judgmentVSVisualizerStopPointDrawingLength; + targetSession.PaintDrawing(ref r, judgmentVSVisualizerStopPointDrawing); + for (var j = 1; j >= 0; --j) + { + switch (judgmentVSVisualizerSystem) + { + case 0: + r.Set(judgmentVSVisualizerPosition0 + binJudgmentVSVisualizerLength * (judgmentVSVisualizerDigitValue - j - 1) + judgmentVSVisualizerStopPointDrawingLength + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); + break; + case 1: + r.Set(judgmentVSVisualizerPosition0 + binJudgmentVSVisualizerLength * (0.5 * judgmentVSVisualizerDigitValue - j - 1) + 0.5 * judgmentVSVisualizerStopPointDrawingLength + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); + break; + case 2: + r.Set(judgmentVSVisualizerPosition0 - binJudgmentVSVisualizerLength * (j + 1) + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); + break; + } + targetSession.PaintDrawing(ref r, binJudgmentVSVisualizerMap[(int)(judgmentVSVisualizerInt / Math.Pow(10, j) % 10)]); + } } - r.Position0 += binJudgmentVSVisualizerLength; - r.Length = judgmentVSVisualizerStopPointDrawingLength; - targetSession.PaintDrawing(ref r, judgmentVSVisualizerStopPointDrawing); - for (var j = 1; j >= 0; --j) + } + else + { + var judgmentVSVisualizerInfinityDrawing = UI.Instance.JudgmentVSVisualizerInfinityDrawing; + var judgmentVSVisualizerInfinityDrawingLength = drawingComponent.judgmentVSVisualizerInfinityDrawingLength; + for (var i = altJudgmentVSVisualizer >> 1; i >= altJudgmentVSVisualizer % 2; --i) { - switch (judgmentVSVisualizerSystem) - { - case 0: - r.Set(judgmentVSVisualizerPosition0 + binJudgmentVSVisualizerLength * (judgmentVSVisualizerDigit - j - 1) + judgmentVSVisualizerStopPointDrawingLength + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); - break; - case 1: - r.Set(judgmentVSVisualizerPosition0 + binJudgmentVSVisualizerLength * (0.5 * judgmentVSVisualizerDigit - j - 1) + 0.5 * judgmentVSVisualizerStopPointDrawingLength + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); - break; - case 2: - r.Set(judgmentVSVisualizerPosition0 - binJudgmentVSVisualizerLength * (j + 1) + distancePoint, judgmentVSVisualizerPosition1, binJudgmentVSVisualizerLength, binJudgmentVSVisualizerHeight); - break; - } - targetSession.PaintDrawing(ref r, binJudgmentVSVisualizerMap[(int)(judgmentVSVisualizerInt / Math.Pow(10, j) % 10)]); + var distancePoint = i == 1 && has2P ? distance2P : 0F; + r.Set(judgmentVSVisualizerPosition0 + distancePoint, judgmentVSVisualizerPosition1, judgmentVSVisualizerInfinityDrawingLength, binJudgmentVSVisualizerHeight); + targetSession.PaintDrawing(ref r, judgmentVSVisualizerInfinityDrawing); } } break; diff --git a/Qwilight/System/UI/DrawingComponent.cs b/Qwilight/System/UI/DrawingComponent.cs index ca0e4b1..30f63d5 100644 --- a/Qwilight/System/UI/DrawingComponent.cs +++ b/Qwilight/System/UI/DrawingComponent.cs @@ -301,6 +301,7 @@ public float binJudgmentVSVisualizerLength; public float binJudgmentVSVisualizerHeight; public float judgmentVSVisualizerStopPointDrawingLength; + public float judgmentVSVisualizerInfinityDrawingLength; public float pausedUnpausePosition0; public float pausedUnpausePosition1; diff --git a/Qwilight/System/UI/UI.cs b/Qwilight/System/UI/UI.cs index 3bc2bb0..cabd953 100644 --- a/Qwilight/System/UI/UI.cs +++ b/Qwilight/System/UI/UI.cs @@ -256,6 +256,8 @@ public DrawingItem? JudgmentVSVisualizerStopPointDrawing { get; set; } + public DrawingItem? JudgmentVSVisualizerInfinityDrawing { get; set; } + public DrawingItem? PointUnitDrawing { get; set; } public DrawingItem? HitPointsVisualizerUnitDrawing { get; set; } @@ -856,6 +858,7 @@ SaveValueMapAsDefaultID(pointNode, "binJudgmentVSVisualizerLength", "binLength"); SaveValueMapAsDefaultID(pointNode, "binJudgmentVSVisualizerHeight", "binHeight"); SaveValueMapAsDefaultID(pointNode, "judgmentVSVisualizerStopPointDrawingLength", "stopPointDrawingLength"); + SaveValueMap(pointNode, "judgmentVSVisualizerInfinityDrawingLength"); SaveAltMap(lambdaNode, "alt-judgment-vs-visualizer"); SaveValueMap(pointNode, "judgmentInputVisualizerPosition0"); @@ -1886,6 +1889,9 @@ case "HH .": JudgmentVSVisualizerStopPointDrawing = drawingItem; break; + case "HH Infinity": + JudgmentVSVisualizerInfinityDrawing = drawingItem; + break; default: BinJudgmentVSVisualizerMap.SetValue(value1, drawingItem); break;