95 lines
3.0 KiB
C#
95 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Intrepid.Utilities;
|
|
using Sirenix.OdinInspector;
|
|
using UnityEngine;
|
|
|
|
namespace Temporary
|
|
{
|
|
public class FloorManager : SingletonMonoBehaviour<FloorManager>
|
|
{
|
|
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<FloorVisualGroup> 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<FloorVisualGroup>(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,
|
|
};
|
|
}
|
|
}
|
|
} |