Skip to content

Commit 5356e38

Browse files
authored
Merge pull request #187 from BeatLeader/camera-settings-fix
Fixed camera settings being null and causing black screen
2 parents 10b8bfd + 42f5811 commit 5356e38

File tree

7 files changed

+54
-56
lines changed

7 files changed

+54
-56
lines changed

Source/1_Config/ConfigDefaults.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ internal static class ConfigDefaults {
9191

9292
ShowWatermark = true,
9393

94-
CameraSettings = new InternalReplayerCameraSettings {
94+
CameraSettings = new ReplayerCameraSettings {
9595
MaxCameraFOV = 110,
9696
MinCameraFOV = 70,
9797
CameraFOV = 90,

Source/2_Core/Models/Replayer/InternalReplayerCameraSettings.cs

Lines changed: 0 additions & 38 deletions
This file was deleted.

Source/2_Core/Models/Replayer/ReplayLaunchData.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ public ReplayerSettings Settings {
4343
/// Specifies bindings to be used instead of the default ones.
4444
/// </summary>
4545
public ReplayerBindings? ReplayerBindings { get; set; }
46+
47+
/// <summary>
48+
/// Specifies whether the builtin camera should be disabled or not.
49+
/// </summary>
50+
public bool DisableBuiltinCamera { get; set; }
4651

4752
public IReplay MainReplay => Replays[0];
4853
public bool IsBattleRoyale => Replays.Count > 1;

Source/2_Core/Models/Replayer/ReplayerCameraSettings.cs

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using System.Linq;
23
using BeatLeader.Replayer;
34
using BeatLeader.Utils;
45
using JetBrains.Annotations;
@@ -41,10 +42,38 @@ public class ReplayerCameraSettings {
4142
public int MinCameraFOV { get; set; }
4243
public int CameraFOV { get; set; }
4344

44-
[JsonIgnore]
45-
public virtual string? CameraView { get; set; }
45+
public string? CameraView {
46+
get => InputUtils.UsesFPFC ? FpfcCameraView : VRCameraView;
47+
set {
48+
if (InputUtils.UsesFPFC) {
49+
FpfcCameraView = value;
50+
} else {
51+
VRCameraView = value;
52+
}
53+
}
54+
}
55+
56+
public IReadOnlyList<ICameraView> CameraViews {
57+
get => InputUtils.UsesFPFC ?
58+
FpfcCameraViews ??= DefaultFpfcViews.ToList() :
59+
VRCameraViews ??= DefaultVRViews.ToList();
60+
set {
61+
var views = value.ToList();
62+
63+
if (InputUtils.UsesFPFC) {
64+
FpfcCameraViews = views;
65+
} else {
66+
VRCameraViews = views;
67+
}
68+
}
69+
}
70+
71+
#pragma warning disable MA0016
72+
public List<ICameraView>? VRCameraViews { get; set; }
73+
public List<ICameraView>? FpfcCameraViews { get; set; }
74+
#pragma warning restore MA0016
4675

47-
[JsonIgnore]
48-
public virtual IReadOnlyList<ICameraView>? CameraViews { get; set; }
76+
public string? VRCameraView { get; set; }
77+
public string? FpfcCameraView { get; set; }
4978
}
5079
}

Source/2_Core/Models/Replayer/ReplayerSettings.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using JetBrains.Annotations;
22
using Newtonsoft.Json;
3+
using Newtonsoft.Json.Serialization;
34

45
namespace BeatLeader.Models {
56
[PublicAPI]
@@ -18,7 +19,15 @@ public class ReplayerSettings {
1819
public ReplayerUISettings UISettings { get; set; } = new();
1920
public BodySettings BodySettings { get; set; } = new();
2021

21-
[JsonConverter(typeof(ImplicitTypeConverter<InternalReplayerCameraSettings>))]
22-
public ReplayerCameraSettings? CameraSettings { get; set; }
22+
// This property exists as a fix for previous versions that were broken because of the camera settings being null
23+
public ReplayerCameraSettings CameraSettings {
24+
get => _originalCameraSettings ??= ConfigDefaults.ReplayerSettings.CameraSettings;
25+
set => _originalCameraSettings = value;
26+
}
27+
28+
// TODO: remove in the next release
29+
// ReSharper disable once ReplaceWithFieldKeyword
30+
[JsonProperty("CameraSettings"), UsedImplicitly]
31+
private ReplayerCameraSettings? _originalCameraSettings = new();
2332
}
2433
}

Source/2_Core/Replayer/Camera/ReplayerCameraController.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ private void UnpatchSmoothCamera() {
121121

122122
private void LoadSettings() {
123123
var cameraSettings = _launchData.Settings.CameraSettings;
124-
var views = cameraSettings!.CameraViews;
125-
if (views == null) return;
124+
var views = cameraSettings.CameraViews;
125+
126126
foreach (var view in views) {
127127
_diContainer.Inject(view);
128128
_views.Add(view);
@@ -136,7 +136,7 @@ private void LoadSettings() {
136136
}
137137

138138
private void Awake() {
139-
if (_launchData.Settings.CameraSettings == null) {
139+
if (_launchData.DisableBuiltinCamera) {
140140
// Prevent Start from being called
141141
enabled = false;
142142
return;

Source/7_Utils/Interop/Interops/Cam2Interop.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,21 +127,14 @@ private static void InitHarmonyPatches() {
127127

128128
#region Callbacks
129129

130-
private static ReplayerCameraSettings? _cameraSettings;
131-
132130
private static void HandleReplayWasStarted(ReplayLaunchData data) {
133131
if (InputUtils.UsesFPFC) {
134-
_cameraSettings = ReplayerLauncher.LaunchData!.Settings.CameraSettings;
135-
ReplayerLauncher.LaunchData.Settings.CameraSettings = null; //disabling base camera
132+
ReplayerLauncher.LaunchData!.DisableBuiltinCamera = true;
136133
}
137134
SetReplayState(true);
138135
}
139136

140137
private static void HandleReplayWasFinished(ReplayLaunchData data) {
141-
if (InputUtils.UsesFPFC) {
142-
ReplayerLauncher.LaunchData!.Settings.CameraSettings = _cameraSettings;
143-
_cameraSettings = null;
144-
}
145138
SetReplayState(false);
146139
}
147140

0 commit comments

Comments
 (0)