From 9a06468cd052bcbe9dd0b49304e529a5de8ec8aa Mon Sep 17 00:00:00 2001 From: hermanest Date: Thu, 26 Feb 2026 22:27:33 +0300 Subject: [PATCH 1/2] Fixed cam2 breaking the replayer. --- .../Replayer/Components/Settings/ReplayerSettingsPanel.cs | 8 ++++++-- .../Replayer/Components/Toolbar/ToolbarWithSettings.cs | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Source/8_UI/Replayer/Components/Settings/ReplayerSettingsPanel.cs b/Source/8_UI/Replayer/Components/Settings/ReplayerSettingsPanel.cs index 280956335..3b1823b59 100644 --- a/Source/8_UI/Replayer/Components/Settings/ReplayerSettingsPanel.cs +++ b/Source/8_UI/Replayer/Components/Settings/ReplayerSettingsPanel.cs @@ -12,7 +12,7 @@ internal class ReplayerSettingsPanel : ReactiveComponent { #region Setup public void Setup( - ReplayerSettings settings, + ReplayLaunchData launchData, IBeatmapTimeController timeController, IReplayFinishController finishController, ICameraController cameraController, @@ -22,10 +22,14 @@ public void Setup( IReplayWatermark watermark, bool useAlternativeBlur ) { + var settings = launchData.Settings; + _quickSettingsPanel.Setup(timeController); _quickSettingsPanel.SetShown(settings.UISettings.QuickSettingsEnabled, true); - _cameraView.Setup(cameraController, settings.CameraSettings); + var cameraContr = launchData.DisableBuiltinCamera ? null : cameraController; + _cameraView.Setup(cameraContr, settings.CameraSettings); + _uiView.Setup(settings.UISettings, _quickSettingsPanel, layoutEditor, timeline, watermark); _otherView.Setup(timeController, finishController); diff --git a/Source/8_UI/Replayer/Components/Toolbar/ToolbarWithSettings.cs b/Source/8_UI/Replayer/Components/Toolbar/ToolbarWithSettings.cs index de742523c..b8df8d2b6 100644 --- a/Source/8_UI/Replayer/Components/Toolbar/ToolbarWithSettings.cs +++ b/Source/8_UI/Replayer/Components/Toolbar/ToolbarWithSettings.cs @@ -56,7 +56,7 @@ bool useAlternativeBlur launchData.Settings.UISettings ); _settingsPanel.Setup( - launchData.Settings, + launchData, timeController, finishController, cameraController, From d3d00214022d9a3e53713f83c5c55623f38d7544 Mon Sep 17 00:00:00 2001 From: hermanest Date: Tue, 17 Mar 2026 12:47:25 +0300 Subject: [PATCH 2/2] Added backculling for avatar eyes to make the view clear in some cases. --- .../Players/Avatar/BeatAvatarLoader.cs | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/Source/2_Core/Replayer/Emulation/Players/Avatar/BeatAvatarLoader.cs b/Source/2_Core/Replayer/Emulation/Players/Avatar/BeatAvatarLoader.cs index 3fd19dc45..7f5401da8 100644 --- a/Source/2_Core/Replayer/Emulation/Players/Avatar/BeatAvatarLoader.cs +++ b/Source/2_Core/Replayer/Emulation/Players/Avatar/BeatAvatarLoader.cs @@ -9,6 +9,7 @@ namespace BeatLeader.Replayer.Emulation { public class BeatAvatarLoader : MonoBehaviour { + #region Setup [Inject] private readonly AvatarSystemCollection _avatarSystemCollection = null!; @@ -40,10 +41,8 @@ private void Awake() { public BeatAvatarController CreateGameplayAvatar(Transform? parent = null) { var avatar = CreateAvatar(parent, 1f); - // For camera2 support - foreach (var item in avatar.transform.GetChildren(false)) { - item.gameObject.layer = 10; - } + ApplyCam2Shenanigans(avatar); + avatar.GetComponent().enabled = false; return avatar.AddComponent(); } @@ -61,19 +60,32 @@ private GameObject CreateAvatar(Transform? parent, float size) { foreach (Transform child in trans) { child.localScale = Vector3.one; } - + trans.localPosition = Vector3.zero; trans.localScale = size * Vector3.one; trans.localRotation = Quaternion.identity; _container.InjectGameObject(avatar); - + // Forcibly enable to initiate Awake avatar.SetActive(true); avatar.name = "AnimatedAvatar (BL)"; - + return avatar; } + private static readonly int cullModeProp = Shader.PropertyToID("_CullMode"); + + private static void ApplyCam2Shenanigans(GameObject avatar) { + // For camera2 support + foreach (var item in avatar.transform.GetChildren(false)) { + if (item.name == "Eyes" && item.GetComponent() is { } renderer) { + renderer.material.SetInt(cullModeProp, 2); + } + + item.gameObject.layer = 10; + } + } + #endregion #region CreateEditor