using System; using System.Collections.Generic; using Intrepid.Utilities; using Sirenix.OdinInspector; using UnityEngine; namespace Temporary { public class FloorManager : SingletonMonoBehaviour { private const float DisabledUpperThreshold = 1_000_000f; private const float DisabledUpperMax = 1_000_001f; private const float DisabledLowerThreshold = -1_000_000f; private const float DisabledLowerMin = -1_000_001f; [GroupInjections, SerializeField] private FloorDetection floorDetection; [GroupConfigurations("Upper Fade"), SerializeField] private float upperMax = 5.75f; [GroupConfigurations("Upper Fade"), SerializeField] private float upperThreshold = 3f; [GroupConfigurations("Lower Tint"), SerializeField] private float lowerThreshold = -3f; [GroupConfigurations("Lower Tint"), SerializeField] private float lowerMin = -6f; [GroupConfigurations("Lower Tint"), SerializeField] private Color lowerTintColor = new(0.35f, 0.35f, 0.35f, 1f); private List FloorVisualGroups { get; } = new(); private void Awake() { SingletonInstantiation(false, manager => { manager.DetectFloorVisualGroups(); }); } private void Start() { ApplyVisibility(); } private void Update() { ApplyVisibility(); } private void ApplyVisibility() { var request = CreateVisibilityRequest(); foreach (var floorVisualGroup in FloorVisualGroups) { if (floorVisualGroup.IsNull()) continue; floorVisualGroup.SetVisibility(request); } } [GroupDebug, Button(ButtonSizes.Medium)] private void DetectFloorVisualGroups() { FloorVisualGroups.Clear(); FloorVisualGroups.AddRange(GetComponentsInChildren(true)); } private VisibilityRequest CreateVisibilityRequest() { if (floorDetection.IsNull()) { return new VisibilityRequest { VisibilityOriginY = 0, // These values make the shader never enter upper fade. UpperThreshold = DisabledUpperThreshold, UpperMax = DisabledUpperMax, // These values make the shader never enter lower tint. LowerThreshold = DisabledLowerThreshold, LowerMin = DisabledLowerMin, LowerTintColor = Color.white, }; } return new VisibilityRequest { VisibilityOriginY = floorDetection.CurrentFloorHeight, UpperThreshold = upperThreshold, UpperMax = upperMax, LowerThreshold = lowerThreshold, LowerMin = lowerMin, LowerTintColor = lowerTintColor, }; } } }