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 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,