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">
-
+