diff --git a/SpineViewer/Models/WorkspaceModel.cs b/SpineViewer/Models/WorkspaceModel.cs index 534d13e..88d963e 100644 --- a/SpineViewer/Models/WorkspaceModel.cs +++ b/SpineViewer/Models/WorkspaceModel.cs @@ -37,6 +37,8 @@ namespace SpineViewer.Models public uint MaxFps { get; set; } = 30; + public float Speed { get; set; } = 1f; + public bool ShowAxis { get; set; } = true; public Color BackgroundColor { get; set; } diff --git a/SpineViewer/Resources/Strings/en.xaml b/SpineViewer/Resources/Strings/en.xaml index 6d869ae..c9cc4d0 100644 --- a/SpineViewer/Resources/Strings/en.xaml +++ b/SpineViewer/Resources/Strings/en.xaml @@ -104,6 +104,7 @@ Zoom Rotation (Degrees) Max FPS + Playback Speed Render Selected Only Show Axis Background Color diff --git a/SpineViewer/Resources/Strings/ja.xaml b/SpineViewer/Resources/Strings/ja.xaml index e41ab1a..cce1f50 100644 --- a/SpineViewer/Resources/Strings/ja.xaml +++ b/SpineViewer/Resources/Strings/ja.xaml @@ -104,6 +104,7 @@ ズーム 回転(度) 最大FPS + 再生速度 選択のみレンダリング 座標軸を表示 背景色 diff --git a/SpineViewer/Resources/Strings/zh.xaml b/SpineViewer/Resources/Strings/zh.xaml index b6f1399..af3f2c2 100644 --- a/SpineViewer/Resources/Strings/zh.xaml +++ b/SpineViewer/Resources/Strings/zh.xaml @@ -104,6 +104,7 @@ 缩放 旋转(角度) 最大帧率 + 播放速度 仅渲染选中 显示坐标轴 背景颜色 diff --git a/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs b/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs index 54a7d60..1b2d58a 100644 --- a/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs +++ b/SpineViewer/ViewModels/MainWindow/SFMLRendererViewModel.cs @@ -140,6 +140,13 @@ namespace SpineViewer.ViewModels.MainWindow set => SetProperty(_renderer.MaxFps, value, v => _renderer.MaxFps = value); } + public float Speed + { + get => _speed; + set => SetProperty(ref _speed, Math.Clamp(value, 0.01f, 100f)); + } + private float _speed = 1f; + public bool ShowAxis { get => _showAxis; @@ -193,15 +200,15 @@ namespace SpineViewer.ViewModels.MainWindow }); private RelayCommand? _cmd_Restart; - public RelayCommand Cmd_ForwardStep => _cmd_ForwardStep ??= new(() => - { - lock (_forwardDeltaLock) _forwardDelta += _renderer.MaxFps > 0 ? 1f / _renderer.MaxFps : 0.001f; + public RelayCommand Cmd_ForwardStep => _cmd_ForwardStep ??= new(() => + { + lock (_forwardDeltaLock) _forwardDelta += _renderer.MaxFps > 0 ? 1f / _renderer.MaxFps : 0.001f; }); private RelayCommand? _cmd_ForwardStep; public RelayCommand Cmd_ForwardFast => _cmd_ForwardFast ??= new(() => - { - lock (_forwardDeltaLock) _forwardDelta += _renderer.MaxFps > 0 ? 10f / _renderer.MaxFps : 0.01f; + { + lock (_forwardDeltaLock) _forwardDelta += _renderer.MaxFps > 0 ? 10f / _renderer.MaxFps : 0.01f; }); private RelayCommand? _cmd_ForwardFast; @@ -390,7 +397,7 @@ namespace SpineViewer.ViewModels.MainWindow if (_cancelToken?.IsCancellationRequested ?? true) break; // 提前中止 sp.Update(0); // 避免物理效果出现问题 - sp.Update(delta); + sp.Update(delta * _speed); // 为选中对象绘制一个半透明背景 if (sp.IsSelected) @@ -426,7 +433,7 @@ namespace SpineViewer.ViewModels.MainWindow } public RendererWorkspaceConfigModel WorkspaceConfig - { + { // TODO: 背景图片 get { @@ -441,23 +448,25 @@ namespace SpineViewer.ViewModels.MainWindow FlipX = FlipX, FlipY = FlipY, MaxFps = MaxFps, + Speed = Speed, ShowAxis = ShowAxis, BackgroundColor = BackgroundColor, }; } set { - ResolutionX = value.ResolutionX; - ResolutionY = value.ResolutionY; - CenterX = value.CenterX; - CenterY = value.CenterY; - Zoom = value.Zoom; - Rotation = value.Rotation; - FlipX = value.FlipX; - FlipY = value.FlipY; - MaxFps = value.MaxFps; - ShowAxis = value.ShowAxis; - BackgroundColor = value.BackgroundColor; + ResolutionX = value.ResolutionX; + ResolutionY = value.ResolutionY; + CenterX = value.CenterX; + CenterY = value.CenterY; + Zoom = value.Zoom; + Rotation = value.Rotation; + FlipX = value.FlipX; + FlipY = value.FlipY; + MaxFps = value.MaxFps; + Speed = value.Speed; + ShowAxis = value.ShowAxis; + BackgroundColor = value.BackgroundColor; } } } diff --git a/SpineViewer/Views/MainWindow.xaml b/SpineViewer/Views/MainWindow.xaml index b9db125..90625c3 100644 --- a/SpineViewer/Views/MainWindow.xaml +++ b/SpineViewer/Views/MainWindow.xaml @@ -693,6 +693,7 @@ + @@ -731,13 +732,17 @@