Skip to content

Commit

Permalink
Hide avatar in spectator FPFC
Browse files Browse the repository at this point in the history
  • Loading branch information
nicoco007 committed Oct 3, 2024
1 parent e12331f commit a671225
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 29 deletions.
65 changes: 36 additions & 29 deletions Source/CustomAvatar/Rendering/MainCamera.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,16 @@ internal class MainCamera : MonoBehaviour
private ActivePlayerSpaceManager _activePlayerSpaceManager;
private ActiveOriginManager _activeOriginManager;
private ActiveCameraManager _activeCameraManager;
private IFPFCSettings _fpfcSettings;
private BeatSaberUtilities _beatSaberUtilities;

private Transform _playerSpace;
private Transform _origin;
private Camera _camera;
private TrackedPoseDriver _trackedPoseDriver;

protected IFPFCSettings fpfcSettings { get; private set; }

protected BeatSaberUtilities beatSaberUtilities { get; private set; }

protected virtual (Transform playerSpace, Transform origin) GetPlayerSpaceAndOrigin()
{
VRCenterAdjust center = transform.GetComponentInParent<VRCenterAdjust>();
Expand All @@ -58,6 +60,23 @@ protected virtual (Transform playerSpace, Transform origin) GetPlayerSpaceAndOri
}
}

protected virtual int GetCameraMask(int mask)
{
mask |= AvatarLayers.kAlwaysVisibleMask;

// FPFC basically ends up being a 3rd person camera
if (fpfcSettings.Enabled || !beatSaberUtilities.hasFocus)
{
mask |= AvatarLayers.kOnlyInThirdPersonMask;
}
else
{
mask &= ~AvatarLayers.kOnlyInThirdPersonMask;
}

return mask;
}

protected void Awake()
{
_camera = GetComponent<Camera>();
Expand All @@ -72,17 +91,17 @@ protected void OnEnable()
_settings.cameraNearClipPlane.changed += OnCameraNearClipPlaneChanged;
}

if (_fpfcSettings != null)
if (fpfcSettings != null)
{
_fpfcSettings.Changed -= OnFpfcSettingsChanged;
_fpfcSettings.Changed += OnFpfcSettingsChanged;
fpfcSettings.Changed -= OnFpfcSettingsChanged;
fpfcSettings.Changed += OnFpfcSettingsChanged;
}

if (_beatSaberUtilities != null)
if (beatSaberUtilities != null)
{
_beatSaberUtilities.focusChanged -= OnFocusChanged;
_beatSaberUtilities.focusChanged += OnFocusChanged;
OnFocusChanged(_beatSaberUtilities.hasFocus);
beatSaberUtilities.focusChanged -= OnFocusChanged;
beatSaberUtilities.focusChanged += OnFocusChanged;
OnFocusChanged(beatSaberUtilities.hasFocus);
}

UpdateCameraMask();
Expand All @@ -104,8 +123,8 @@ private void Construct(
_activePlayerSpaceManager = activePlayerSpaceManager;
_activeOriginManager = activeOriginManager;
_activeCameraManager = activeCameraManager;
_fpfcSettings = fpfcSettings;
_beatSaberUtilities = beatSaberUtilities;
this.fpfcSettings = fpfcSettings;
this.beatSaberUtilities = beatSaberUtilities;
}

protected void Start()
Expand All @@ -128,14 +147,14 @@ protected void OnDisable()
_settings.cameraNearClipPlane.changed -= OnCameraNearClipPlaneChanged;
}

if (_fpfcSettings != null)
if (fpfcSettings != null)
{
_fpfcSettings.Changed -= OnFpfcSettingsChanged;
fpfcSettings.Changed -= OnFpfcSettingsChanged;
}

if (_beatSaberUtilities != null)
if (beatSaberUtilities != null)
{
_beatSaberUtilities.focusChanged -= OnFocusChanged;
beatSaberUtilities.focusChanged -= OnFocusChanged;
}
}

Expand Down Expand Up @@ -169,26 +188,14 @@ private void OnFocusChanged(bool hasFocus)

private void UpdateCameraMask()
{
if (_logger == null || _settings == null || _fpfcSettings == null)
if (_logger == null || _settings == null || fpfcSettings == null)
{
return;
}

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

int mask = _camera.cullingMask | AvatarLayers.kAlwaysVisibleMask;

// FPFC basically ends up being a 3rd person camera
if (_fpfcSettings.Enabled || !_beatSaberUtilities.hasFocus)
{
mask |= AvatarLayers.kOnlyInThirdPersonMask;
}
else
{
mask &= ~AvatarLayers.kOnlyInThirdPersonMask;
}

_camera.cullingMask = mask;
_camera.cullingMask = GetCameraMask(_camera.cullingMask);
_camera.nearClipPlane = _settings.cameraNearClipPlane;
}

Expand Down
24 changes: 24 additions & 0 deletions Source/CustomAvatar/Rendering/SpectatorCamera.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.

using CustomAvatar.Avatar;
using UnityEngine;

namespace CustomAvatar.Rendering
Expand All @@ -29,5 +30,28 @@ protected override (Transform playerSpace, Transform origin) GetPlayerSpaceAndOr
{
return (playerSpace, origin);
}

protected override int GetCameraMask(int mask)
{
if (fpfcSettings.Enabled)
{
mask &= ~AvatarLayers.kAllLayersMask;
}
else
{
mask |= AvatarLayers.kAlwaysVisibleMask;
}

if (beatSaberUtilities.hasFocus)
{
mask &= ~AvatarLayers.kOnlyInThirdPersonMask;
}
else
{
mask |= AvatarLayers.kOnlyInThirdPersonMask;
}

return mask;
}
}
}

0 comments on commit a671225

Please sign in to comment.