switch to less stuttery timing method

This commit is contained in:
msk
2023-09-29 17:04:02 -07:00
parent 2a6e64dbfd
commit 0dfb606216
3 changed files with 31 additions and 18 deletions
+10 -17
View File
@@ -61,7 +61,7 @@ uv1_scale = Vector3(-1, 1, 1)
[sub_resource type="ViewportTexture" id="ViewportTexture_w20vk"] [sub_resource type="ViewportTexture" id="ViewportTexture_w20vk"]
viewport_path = NodePath("Mask") viewport_path = NodePath("Mask")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_bs53h"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_osg3y"]
resource_local_to_scene = true resource_local_to_scene = true
shader = ExtResource("3_rjbyl") shader = ExtResource("3_rjbyl")
shader_parameter/mask = SubResource("ViewportTexture_w20vk") shader_parameter/mask = SubResource("ViewportTexture_w20vk")
@@ -140,7 +140,7 @@ anchor_mode = 0
editor_draw_screen = false editor_draw_screen = false
[node name="Background" parent="2D Viewport/Viewport Control" instance=ExtResource("2_8g6gv")] [node name="Background" parent="2D Viewport/Viewport Control" instance=ExtResource("2_8g6gv")]
material = SubResource("ShaderMaterial_bs53h") material = SubResource("ShaderMaterial_osg3y")
layout_mode = 1 layout_mode = 1
offset_top = -1920.0 offset_top = -1920.0
offset_right = 1920.0 offset_right = 1920.0
@@ -187,8 +187,8 @@ layout_mode = 1
anchors_preset = 2 anchors_preset = 2
anchor_top = 1.0 anchor_top = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_top = -1820.0 offset_top = -1920.0
offset_bottom = -1820.0 offset_bottom = -1920.0
grow_vertical = 0 grow_vertical = 0
[node name="ViewportView Left" type="SubViewportContainer" parent="2D Viewport/Viewport Control"] [node name="ViewportView Left" type="SubViewportContainer" parent="2D Viewport/Viewport Control"]
@@ -232,21 +232,14 @@ position = Vector2(0, -1920)
offset = Vector2(1921, 1920) offset = Vector2(1921, 1920)
anchor_mode = 0 anchor_mode = 0
[node name="ViewportView" type="SubViewportContainer" parent="."]
modulate = Color(1, 1, 1, 0.329412)
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -960.0
offset_top = -1920.0
offset_right = 960.0
grow_horizontal = 2
grow_vertical = 0
[node name="AudioStreamPlayer BGM" type="AudioStreamPlayer" parent="."] [node name="AudioStreamPlayer BGM" type="AudioStreamPlayer" parent="."]
script = ExtResource("4_c2dke") script = ExtResource("4_c2dke")
[node name="AudioStreamPlayer SFX" type="AudioStreamPlayer" parent="."] [node name="AudioStreamPlayer SFX" type="AudioStreamPlayer" parent="."]
script = ExtResource("5_owrd5") script = ExtResource("5_owrd5")
[node name="Dev Area" type="Control" parent="."]
layout_mode = 3
anchors_preset = 0
offset_right = 1920.0
offset_bottom = 1920.0
+20
View File
@@ -4,6 +4,19 @@ using System;
public partial class BGM : AudioStreamPlayer public partial class BGM : AudioStreamPlayer
{ {
// latency compensation
private ulong timeStartUsec;
private float timeDelay;
public float CurTime
{
get
{
float time = (Time.GetTicksUsec() - timeStartUsec) / 1000000f;
return time - timeDelay;
}
}
public void LoadFromUser(string path) public void LoadFromUser(string path)
{ {
if (!path.StartsWith("user://")) if (!path.StartsWith("user://"))
@@ -43,4 +56,11 @@ public partial class BGM : AudioStreamPlayer
break; break;
} }
} }
public void Play()
{
timeStartUsec = Time.GetTicksUsec();
timeDelay = (float) (AudioServer.GetTimeToNextMix() + AudioServer.GetOutputLatency());
base.Play();
}
} }
+1 -1
View File
@@ -124,7 +124,7 @@ namespace WacK.Scenes
double time = bgmController.GetPlaybackPosition() + AudioServer.GetTimeSinceLastMix() - AudioServer.GetOutputLatency(); double time = bgmController.GetPlaybackPosition() + AudioServer.GetTimeSinceLastMix() - AudioServer.GetOutputLatency();
var nPos = noteDisplay.Position; var nPos = noteDisplay.Position;
nPos.Y = ((float)time * scrollPxPerSec) + 1920; nPos.Y = (bgmController.CurTime * scrollPxPerSec) + 1910;
noteDisplay.Position = nPos; noteDisplay.Position = nPos;
scrollDisplay.Position = nPos; scrollDisplay.Position = nPos;
} }