first commit
This commit is contained in:
55
Assets/Materials/JusticeScale/Scripts/ScaleController.cs
Normal file
55
Assets/Materials/JusticeScale/Scripts/ScaleController.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
using JusticeScale.Scripts.Scales;
|
||||
using UnityEngine;
|
||||
|
||||
namespace JusticeScale.Scripts
|
||||
{
|
||||
public class ScaleController : MonoBehaviour
|
||||
{
|
||||
[Header("Scales")]
|
||||
[SerializeField]
|
||||
[Tooltip("Reference to the left scale. Should be assigned to the left side of the balance.")]
|
||||
private Scale leftScale;
|
||||
|
||||
[SerializeField]
|
||||
[Tooltip("Reference to the right scale. Should be assigned to the right side of the balance.")]
|
||||
private Scale rightScale;
|
||||
|
||||
[Tooltip("Normalized value representing the current balance. 0 means fully tilted to the left, 1 means fully tilted to the right, and 0.5 is perfectly balanced.")]
|
||||
public float BalanceNormalized { get; private set; } = 0.5f;
|
||||
|
||||
[Tooltip("The difference in weight between the left and right scales. A positive value means the left scale is heavier, while a negative value means the right scale is heavier.")]
|
||||
public float WeightDifference { get; private set; }
|
||||
|
||||
[Header("Configuration")]
|
||||
[Min(0.01f)]
|
||||
[Tooltip("The maximum weight difference between the two sides for the scale to reach its limit. A higher value makes the balance less sensitive.")]
|
||||
public float maxWeightDifference = 10f;
|
||||
|
||||
[SerializeField]
|
||||
[Tooltip("The smoothing time for updating the balance. This helps to avoid abrupt changes that could cause erratic behavior or glitches in the balance's operation.")]
|
||||
private float balanceSmoothTime = 0.05f;
|
||||
|
||||
[SerializeField] [Tooltip("Internal smoothed result for the balance. Used for gradual balance adjustments.")]
|
||||
private float weightResultSmoothed;
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!leftScale || !rightScale)
|
||||
{
|
||||
Debug.LogWarning("The scale references are not assigned.");
|
||||
return;
|
||||
}
|
||||
|
||||
UpdateBalance();
|
||||
}
|
||||
|
||||
private void UpdateBalance()
|
||||
{
|
||||
var targetWeightDifference = leftScale.TotalWeight - rightScale.TotalWeight;
|
||||
WeightDifference = targetWeightDifference;
|
||||
weightResultSmoothed = Mathf.Lerp(weightResultSmoothed, targetWeightDifference, balanceSmoothTime);
|
||||
|
||||
BalanceNormalized = Mathf.InverseLerp(-maxWeightDifference, maxWeightDifference, weightResultSmoothed);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user