Skip to content

Commit a671225

Browse files
committed
Hide avatar in spectator FPFC
1 parent e12331f commit a671225

File tree

2 files changed

+60
-29
lines changed

2 files changed

+60
-29
lines changed

Source/CustomAvatar/Rendering/MainCamera.cs

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,16 @@ internal class MainCamera : MonoBehaviour
3535
private ActivePlayerSpaceManager _activePlayerSpaceManager;
3636
private ActiveOriginManager _activeOriginManager;
3737
private ActiveCameraManager _activeCameraManager;
38-
private IFPFCSettings _fpfcSettings;
39-
private BeatSaberUtilities _beatSaberUtilities;
4038

4139
private Transform _playerSpace;
4240
private Transform _origin;
4341
private Camera _camera;
4442
private TrackedPoseDriver _trackedPoseDriver;
4543

44+
protected IFPFCSettings fpfcSettings { get; private set; }
45+
46+
protected BeatSaberUtilities beatSaberUtilities { get; private set; }
47+
4648
protected virtual (Transform playerSpace, Transform origin) GetPlayerSpaceAndOrigin()
4749
{
4850
VRCenterAdjust center = transform.GetComponentInParent<VRCenterAdjust>();
@@ -58,6 +60,23 @@ protected virtual (Transform playerSpace, Transform origin) GetPlayerSpaceAndOri
5860
}
5961
}
6062

63+
protected virtual int GetCameraMask(int mask)
64+
{
65+
mask |= AvatarLayers.kAlwaysVisibleMask;
66+
67+
// FPFC basically ends up being a 3rd person camera
68+
if (fpfcSettings.Enabled || !beatSaberUtilities.hasFocus)
69+
{
70+
mask |= AvatarLayers.kOnlyInThirdPersonMask;
71+
}
72+
else
73+
{
74+
mask &= ~AvatarLayers.kOnlyInThirdPersonMask;
75+
}
76+
77+
return mask;
78+
}
79+
6180
protected void Awake()
6281
{
6382
_camera = GetComponent<Camera>();
@@ -72,17 +91,17 @@ protected void OnEnable()
7291
_settings.cameraNearClipPlane.changed += OnCameraNearClipPlaneChanged;
7392
}
7493

75-
if (_fpfcSettings != null)
94+
if (fpfcSettings != null)
7695
{
77-
_fpfcSettings.Changed -= OnFpfcSettingsChanged;
78-
_fpfcSettings.Changed += OnFpfcSettingsChanged;
96+
fpfcSettings.Changed -= OnFpfcSettingsChanged;
97+
fpfcSettings.Changed += OnFpfcSettingsChanged;
7998
}
8099

81-
if (_beatSaberUtilities != null)
100+
if (beatSaberUtilities != null)
82101
{
83-
_beatSaberUtilities.focusChanged -= OnFocusChanged;
84-
_beatSaberUtilities.focusChanged += OnFocusChanged;
85-
OnFocusChanged(_beatSaberUtilities.hasFocus);
102+
beatSaberUtilities.focusChanged -= OnFocusChanged;
103+
beatSaberUtilities.focusChanged += OnFocusChanged;
104+
OnFocusChanged(beatSaberUtilities.hasFocus);
86105
}
87106

88107
UpdateCameraMask();
@@ -104,8 +123,8 @@ private void Construct(
104123
_activePlayerSpaceManager = activePlayerSpaceManager;
105124
_activeOriginManager = activeOriginManager;
106125
_activeCameraManager = activeCameraManager;
107-
_fpfcSettings = fpfcSettings;
108-
_beatSaberUtilities = beatSaberUtilities;
126+
this.fpfcSettings = fpfcSettings;
127+
this.beatSaberUtilities = beatSaberUtilities;
109128
}
110129

111130
protected void Start()
@@ -128,14 +147,14 @@ protected void OnDisable()
128147
_settings.cameraNearClipPlane.changed -= OnCameraNearClipPlaneChanged;
129148
}
130149

131-
if (_fpfcSettings != null)
150+
if (fpfcSettings != null)
132151
{
133-
_fpfcSettings.Changed -= OnFpfcSettingsChanged;
152+
fpfcSettings.Changed -= OnFpfcSettingsChanged;
134153
}
135154

136-
if (_beatSaberUtilities != null)
155+
if (beatSaberUtilities != null)
137156
{
138-
_beatSaberUtilities.focusChanged -= OnFocusChanged;
157+
beatSaberUtilities.focusChanged -= OnFocusChanged;
139158
}
140159
}
141160

@@ -169,26 +188,14 @@ private void OnFocusChanged(bool hasFocus)
169188

170189
private void UpdateCameraMask()
171190
{
172-
if (_logger == null || _settings == null || _fpfcSettings == null)
191+
if (_logger == null || _settings == null || fpfcSettings == null)
173192
{
174193
return;
175194
}
176195

177196
_logger.LogTrace($"Setting avatar culling mask and near clip plane on '{_camera.name}'");
178197

179-
int mask = _camera.cullingMask | AvatarLayers.kAlwaysVisibleMask;
180-
181-
// FPFC basically ends up being a 3rd person camera
182-
if (_fpfcSettings.Enabled || !_beatSaberUtilities.hasFocus)
183-
{
184-
mask |= AvatarLayers.kOnlyInThirdPersonMask;
185-
}
186-
else
187-
{
188-
mask &= ~AvatarLayers.kOnlyInThirdPersonMask;
189-
}
190-
191-
_camera.cullingMask = mask;
198+
_camera.cullingMask = GetCameraMask(_camera.cullingMask);
192199
_camera.nearClipPlane = _settings.cameraNearClipPlane;
193200
}
194201

Source/CustomAvatar/Rendering/SpectatorCamera.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
// You should have received a copy of the GNU Lesser General Public License
1515
// along with this program. If not, see <https://www.gnu.org/licenses/>.
1616

17+
using CustomAvatar.Avatar;
1718
using UnityEngine;
1819

1920
namespace CustomAvatar.Rendering
@@ -29,5 +30,28 @@ protected override (Transform playerSpace, Transform origin) GetPlayerSpaceAndOr
2930
{
3031
return (playerSpace, origin);
3132
}
33+
34+
protected override int GetCameraMask(int mask)
35+
{
36+
if (fpfcSettings.Enabled)
37+
{
38+
mask &= ~AvatarLayers.kAllLayersMask;
39+
}
40+
else
41+
{
42+
mask |= AvatarLayers.kAlwaysVisibleMask;
43+
}
44+
45+
if (beatSaberUtilities.hasFocus)
46+
{
47+
mask &= ~AvatarLayers.kOnlyInThirdPersonMask;
48+
}
49+
else
50+
{
51+
mask |= AvatarLayers.kOnlyInThirdPersonMask;
52+
}
53+
54+
return mask;
55+
}
3256
}
3357
}

0 commit comments

Comments
 (0)