From 46bdb2a67639998e47e4a163286b89ccd5446cb6 Mon Sep 17 00:00:00 2001 From: Nicolas Gnyra Date: Wed, 22 May 2024 06:51:41 -0400 Subject: [PATCH] Use `IFPFCSettings` --- .../CustomAvatarsMainCameraController.cs | 27 ++++++++++++------- .../Rendering/SpectatorCameraController.cs | 25 ++++++++++------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/Source/CustomAvatar/Rendering/CustomAvatarsMainCameraController.cs b/Source/CustomAvatar/Rendering/CustomAvatarsMainCameraController.cs index 5eec47a9..c2578809 100644 --- a/Source/CustomAvatar/Rendering/CustomAvatarsMainCameraController.cs +++ b/Source/CustomAvatar/Rendering/CustomAvatarsMainCameraController.cs @@ -14,13 +14,12 @@ // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . -using System; using System.Diagnostics.CodeAnalysis; -using System.Linq; using CustomAvatar.Avatar; using CustomAvatar.Configuration; using CustomAvatar.Logging; using CustomAvatar.Player; +using SiraUtil.Tools.FPFC; using UnityEngine; using Zenject; @@ -34,6 +33,7 @@ internal class CustomAvatarsMainCameraController : MonoBehaviour private ActivePlayerSpaceManager _activePlayerSpaceManager; private ActiveOriginManager _activeOriginManager; private ActiveCameraManager _activeCameraManager; + private IFPFCSettings _fpfcSettings; private Transform _playerSpace; private Transform _origin; @@ -44,32 +44,29 @@ private void Awake() _camera = GetComponent(); } - private void OnEnable() - { - AddToPlayerSpaceManager(); - } - [Inject] [SuppressMessage("CodeQuality", "IDE0051", Justification = "Used by Zenject")] - private void Construct(ILogger logger, Settings settings, ActivePlayerSpaceManager activePlayerSpaceManager, ActiveOriginManager activeOriginManager, ActiveCameraManager activeCameraManager) + private void Construct(ILogger logger, Settings settings, ActivePlayerSpaceManager activePlayerSpaceManager, ActiveOriginManager activeOriginManager, ActiveCameraManager activeCameraManager, IFPFCSettings fpfcSettings) { _logger = logger; _settings = settings; _activePlayerSpaceManager = activePlayerSpaceManager; _activeOriginManager = activeOriginManager; _activeCameraManager = activeCameraManager; + _fpfcSettings = fpfcSettings; } private void Start() { // prevent errors if this is instantiated via Object.Instantiate - if (_logger == null || _settings == null || _activePlayerSpaceManager == null) + if (_logger == null) { Destroy(this); return; } _settings.cameraNearClipPlane.changed += OnCameraNearClipPlaneChanged; + _fpfcSettings.Changed += OnFpfcSettingsChanged; UpdateCameraMask(); @@ -83,6 +80,11 @@ private void OnDestroy() _settings.cameraNearClipPlane.changed -= OnCameraNearClipPlaneChanged; } + if (_fpfcSettings != null) + { + _fpfcSettings.Changed -= OnFpfcSettingsChanged; + } + RemoveFromPlayerSpaceManager(); } @@ -91,6 +93,11 @@ private void OnCameraNearClipPlaneChanged(float value) UpdateCameraMask(); } + private void OnFpfcSettingsChanged(IFPFCSettings fpfcSettings) + { + UpdateCameraMask(); + } + private void UpdateCameraMask() { _logger.LogInformation($"Setting avatar culling mask and near clip plane on '{_camera.name}'"); @@ -98,7 +105,7 @@ private void UpdateCameraMask() int mask = _camera.cullingMask | AvatarLayers.kAlwaysVisibleMask; // FPFC basically ends up being a 3rd person camera - if (Environment.GetCommandLineArgs().Contains("fpfc")) + if (_fpfcSettings.Enabled) { mask |= AvatarLayers.kOnlyInThirdPersonMask; } diff --git a/Source/CustomAvatar/Rendering/SpectatorCameraController.cs b/Source/CustomAvatar/Rendering/SpectatorCameraController.cs index f9e743fe..8c181709 100644 --- a/Source/CustomAvatar/Rendering/SpectatorCameraController.cs +++ b/Source/CustomAvatar/Rendering/SpectatorCameraController.cs @@ -14,13 +14,12 @@ // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . -using System; using System.Diagnostics.CodeAnalysis; -using System.Linq; using CustomAvatar.Avatar; using CustomAvatar.Configuration; using CustomAvatar.Logging; using CustomAvatar.Player; +using SiraUtil.Tools.FPFC; using UnityEngine; using Zenject; @@ -37,6 +36,7 @@ internal class SpectatorCameraController : MonoBehaviour private ActivePlayerSpaceManager _activePlayerSpaceManager; private ActiveOriginManager _activeOriginManager; private ActiveCameraManager _activeCameraManager; + private IFPFCSettings _fpfcSettings; private Camera _camera; @@ -45,20 +45,16 @@ private void Awake() _camera = GetComponent(); } - private void OnEnable() - { - AddToPlayerSpaceManager(); - } - [Inject] [SuppressMessage("CodeQuality", "IDE0051", Justification = "Used by Zenject")] - private void Construct(ILogger logger, Settings settings, ActivePlayerSpaceManager activePlayerSpaceManager, ActiveOriginManager activeOriginManager, ActiveCameraManager activeCameraManager) + private void Construct(ILogger logger, Settings settings, ActivePlayerSpaceManager activePlayerSpaceManager, ActiveOriginManager activeOriginManager, ActiveCameraManager activeCameraManager, IFPFCSettings fpfcSettings) { _logger = logger; _settings = settings; _activePlayerSpaceManager = activePlayerSpaceManager; _activeOriginManager = activeOriginManager; _activeCameraManager = activeCameraManager; + _fpfcSettings = fpfcSettings; } private void Start() @@ -71,6 +67,7 @@ private void Start() } _settings.cameraNearClipPlane.changed += OnCameraNearClipPlaneChanged; + _fpfcSettings.Changed += OnFpfcSettingsChanged; UpdateCameraMask(); @@ -84,6 +81,11 @@ private void OnDestroy() _settings.cameraNearClipPlane.changed -= OnCameraNearClipPlaneChanged; } + if (_fpfcSettings != null) + { + _fpfcSettings.Changed -= OnFpfcSettingsChanged; + } + RemoveFromPlayerSpaceManager(); } @@ -92,6 +94,11 @@ private void OnCameraNearClipPlaneChanged(float value) UpdateCameraMask(); } + private void OnFpfcSettingsChanged(IFPFCSettings fpfcSettings) + { + UpdateCameraMask(); + } + // TODO: add a setting to show/hide player avatar in replays private void UpdateCameraMask() { @@ -100,7 +107,7 @@ private void UpdateCameraMask() int mask = _camera.cullingMask | AvatarLayers.kAlwaysVisibleMask; // FPFC basically ends up being a 3rd person camera - if (Environment.GetCommandLineArgs().Contains("fpfc")) + if (_fpfcSettings.Enabled) { mask |= AvatarLayers.kOnlyInThirdPersonMask; }