diff --git a/.github/workflows/BuildProgram.yml b/.github/workflows/BuildProgram.yml index c5215058..a3a08a7b 100644 --- a/.github/workflows/BuildProgram.yml +++ b/.github/workflows/BuildProgram.yml @@ -43,7 +43,7 @@ jobs: - name: Setup .NET7 uses: actions/setup-dotnet@v4.0.1 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: get-version-action id: project-version uses: euberdeveloper/ga-project-version@main diff --git a/OngekiFumenEditor/App.xaml b/OngekiFumenEditor/App.xaml index a2ec62bb..7770166a 100644 --- a/OngekiFumenEditor/App.xaml +++ b/OngekiFumenEditor/App.xaml @@ -31,6 +31,8 @@ + + diff --git a/OngekiFumenEditor/Base/OngekiObjects/Beam/BeamStart.cs b/OngekiFumenEditor/Base/OngekiObjects/Beam/BeamStart.cs index 8ff56539..86587153 100644 --- a/OngekiFumenEditor/Base/OngekiObjects/Beam/BeamStart.cs +++ b/OngekiFumenEditor/Base/OngekiObjects/Beam/BeamStart.cs @@ -6,7 +6,7 @@ namespace OngekiFumenEditor.Base.OngekiObjects.Beam { public class BeamStart : ConnectableStartObject, IBeamObject { - public const int LEAD_IN_DURATION = 1000; + public const float LEAD_IN_DURATION_FRAME = 50f; public const int LEAD_IN_BODY_DURATION = 250; public const int LEAD_OUT_DURATION = 250; diff --git a/OngekiFumenEditor/Base/OngekiObjects/BulletPallete.cs b/OngekiFumenEditor/Base/OngekiObjects/BulletPallete.cs index 9701424b..174341f0 100644 --- a/OngekiFumenEditor/Base/OngekiObjects/BulletPallete.cs +++ b/OngekiFumenEditor/Base/OngekiObjects/BulletPallete.cs @@ -1,6 +1,8 @@ using OngekiFumenEditor.Base.EditorObjects; using OngekiFumenEditor.Base.OngekiObjects.BulletPalleteEnums; using OngekiFumenEditor.Base.OngekiObjects.Lane; +using OngekiFumenEditor.Modules.FumenVisualEditor; + using System; using System.Linq; using System.Windows.Media; @@ -17,7 +19,10 @@ public double CalculateToXGridTotalUnit(IBulletPalleteReferencable refObject, On switch (TargetValue) { case Target.Player: - var tGrid = refObject.TGrid; + var frameOffset = (40f - 7.5f) / (0.47f * MathF.Min(refObject.ReferenceBulletPallete.Speed, 1)); + var targetAudioTime = TGridCalculator.ConvertTGridToAudioTime(refObject.TGrid, fumen.BpmList) - TGridCalculator.ConvertFrameToAudioTime(frameOffset); + if(targetAudioTime < TimeSpan.Zero) targetAudioTime = TimeSpan.Zero; + var tGrid = TGridCalculator.ConvertAudioTimeToTGrid(targetAudioTime, fumen.BpmList); var apfLane = fumen.Lanes.GetVisibleStartObjects(tGrid, tGrid).OfType().LastOrDefault(); var xGrid = apfLane?.CalulateXGrid(tGrid); xGridTotalUnit = xGrid?.TotalUnit ?? 0d; diff --git a/OngekiFumenEditor/Kernel/Audio/DefaultCommonImpl/Sound/DefaultFumenSoundPlayer.cs b/OngekiFumenEditor/Kernel/Audio/DefaultCommonImpl/Sound/DefaultFumenSoundPlayer.cs index bee5cb9b..b5b8340f 100644 --- a/OngekiFumenEditor/Kernel/Audio/DefaultCommonImpl/Sound/DefaultFumenSoundPlayer.cs +++ b/OngekiFumenEditor/Kernel/Audio/DefaultCommonImpl/Sound/DefaultFumenSoundPlayer.cs @@ -294,7 +294,7 @@ void AddDurationSound(SoundControl sound, TGrid tGrid, TGrid endTGrid, int loopI //generate stop AddSound(SoundControl.BeamEnd, beam.MaxTGrid); AddDurationSound(SoundControl.BeamLoop, beam.TGrid, beam.MaxTGrid, loopId); - var leadBodyInTGrid = TGridCalculator.ConvertAudioTimeToTGrid(TGridCalculator.ConvertTGridToAudioTime(beam.TGrid, editor) - TimeSpan.FromMilliseconds(BeamStart.LEAD_IN_DURATION), editor); + var leadBodyInTGrid = TGridCalculator.ConvertAudioTimeToTGrid(TGridCalculator.ConvertTGridToAudioTime(beam.TGrid, editor) - TGridCalculator.ConvertFrameToAudioTime(BeamStart.LEAD_IN_DURATION_FRAME), editor); if (leadBodyInTGrid is null) leadBodyInTGrid = TGrid.Zero; AddSound(SoundControl.BeamPrepare, leadBodyInTGrid); diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/Beam/BeamLazerDrawingTarget.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/Beam/BeamLazerDrawingTarget.cs index 18be1f97..0e1c986a 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/Beam/BeamLazerDrawingTarget.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Graphics/Drawing/TargetImpl/OngekiObjects/Beam/BeamLazerDrawingTarget.cs @@ -127,14 +127,15 @@ public override void Draw(IFumenEditorDrawingContext target, BeamStart obj) if (prepareWarn) { var audioTime = TGridCalculator.ConvertTGridToAudioTime(beginTGrid, target.Editor); - var leadAudioTime = audioTime - TimeSpan.FromMilliseconds(BeamStart.LEAD_IN_DURATION); + var leadAudioTime = audioTime - TGridCalculator.ConvertFrameToAudioTime(BeamStart.LEAD_IN_DURATION_FRAME); var leadInTGrid = TGridCalculator.ConvertAudioTimeToTGrid(leadAudioTime, target.Editor); if (leadInTGrid is null) leadInTGrid = TGrid.Zero; - var warnProgress = MathUtils.Normalize(leadInTGrid.TotalGrid, beginTGrid.TotalGrid, curTGrid.TotalGrid) - 0.25; + var warnProgress = MathUtils.Normalize(leadInTGrid.TotalGrid, beginTGrid.TotalGrid, curTGrid.TotalGrid); + if(warnProgress < 0) warnProgress = -1; lazerDrawing.Draw(target, textureWarn, (int)width, x, (float)warnProgress, new(1, 215 / 255.0f, 0, 0.5f), rotate, judgeOffset); } - + lazerDrawing.Draw(target, textureBody, (int)width, x, (float)progress, OpenTK.Mathematics.Vector4.One, rotate, judgeOffset); } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/TGridCalculator.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/TGridCalculator.cs index 09e0b1cb..5924ae2a 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/TGridCalculator.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/TGridCalculator.cs @@ -1,4 +1,6 @@ -using OngekiFumenEditor.Base; +using Microsoft.CodeAnalysis.Differencing; + +using OngekiFumenEditor.Base; using OngekiFumenEditor.Base.Collections; using OngekiFumenEditor.Base.OngekiObjects; using OngekiFumenEditor.Modules.FumenVisualEditor.ViewModels; @@ -13,6 +15,16 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor { public static class TGridCalculator { + #region Frame -> AudioTime + + public const float FRAME_DURATION = 16.666666f; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static TimeSpan ConvertFrameToAudioTime(float frame) + => TimeSpan.FromMilliseconds(FRAME_DURATION * frame); + + #endregion + #region AudioTime -> TGrid [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.Drawing.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.Drawing.cs index c8584c37..46ae5caf 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.Drawing.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.Drawing.cs @@ -213,7 +213,7 @@ private IEnumerable GetDisplayableObjects(OngekiFumen fumen, if (containBeams) { - var leadInTGrid = TGridCalculator.ConvertAudioTimeToTGrid(TGridCalculator.ConvertTGridToAudioTime(min, this) - TimeSpan.FromMilliseconds(BeamStart.LEAD_IN_DURATION), this); + var leadInTGrid = TGridCalculator.ConvertAudioTimeToTGrid(TGridCalculator.ConvertTGridToAudioTime(min, this) - TGridCalculator.ConvertFrameToAudioTime(BeamStart.LEAD_IN_DURATION_FRAME), this); var leadOutTGrid = TGridCalculator.ConvertAudioTimeToTGrid(TGridCalculator.ConvertTGridToAudioTime(max, this) + TimeSpan.FromMilliseconds(BeamStart.LEAD_OUT_DURATION), this); r = r.Concat(fumen.Beams.GetVisibleStartObjects(leadInTGrid, leadOutTGrid)); diff --git a/OngekiFumenEditor/Modules/SplashScreen/Views/SplashScreenView.xaml b/OngekiFumenEditor/Modules/SplashScreen/Views/SplashScreenView.xaml index ecd213c3..ab66b78d 100644 --- a/OngekiFumenEditor/Modules/SplashScreen/Views/SplashScreenView.xaml +++ b/OngekiFumenEditor/Modules/SplashScreen/Views/SplashScreenView.xaml @@ -12,23 +12,25 @@ xmlns:res="clr-namespace:OngekiFumenEditor.Properties" xmlns:vm="clr-namespace:OngekiFumenEditor.Modules.SplashScreen.ViewModels" Title="Welcome" + WindowTitleBrush="Transparent" Width="1000" Height="700" + BorderThickness="0" + GlowBrush="Black" d:DataContext="{d:DesignInstance Type=vm:SplashScreenViewModel}" Background="{StaticResource EnvironmentWindowBackground}" ResizeMode="NoResize" SaveWindowPosition="True" mc:Ignorable="d"> - @@ -182,7 +184,7 @@ HorizontalContentAlignment="Stretch" cal:Message.Attach="[Event MouseLeftButtonDown] = [Action CreateNewProject()]" Cursor="Hand"> - + @@ -215,7 +217,7 @@ HorizontalContentAlignment="Stretch" cal:Message.Attach="[Event MouseLeftButtonDown] = [Action OpenProject()]" Cursor="Hand"> - + @@ -248,7 +250,7 @@ HorizontalContentAlignment="Stretch" cal:Message.Attach="[Event MouseLeftButtonDown] = [Action FastOpen()]" Cursor="Hand"> - + @@ -285,7 +287,7 @@ HorizontalContentAlignment="Stretch" cal:Message.Attach="[Event MouseLeftButtonDown] = [Action OpenTutorial()]" Cursor="Hand"> - +