add project files

This commit is contained in:
Boris Nikolaev
2026-08-14 01:58:31 +03:00
parent 9134cad79b
commit 5f1e94b653
4399 changed files with 12286903 additions and 0 deletions
@@ -0,0 +1,164 @@
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Serialization;
namespace OHM.UnityToolkit.UI
{
public class UIIncrementableGauge : MonoBehaviour
{
[SerializeField]
private float incSpeed = 1f;
[SerializeField]
private float decSpeed = 1f;
[SerializeField]
private float levelincSpeed = 1f;
[SerializeField]
public RectTransform gaugeRect;
[SerializeField]
[FormerlySerializedAs("gaugeImage")]
private Image _gaugeImage;
[SerializeField]
[FormerlySerializedAs("imageMaxFillRatio")]
private float _imageMaxFillRatio = 1f;
[SerializeField]
[FormerlySerializedAs("x")]
private bool _x;
[SerializeField]
[FormerlySerializedAs("y")]
private bool _y;
[SerializeField]
[FormerlySerializedAs("smoothLevelUp")]
private bool _smoothLevelUp;
[SerializeField]
[FormerlySerializedAs("smoothLevelDown")]
private bool _smoothLevelDown;
private int currentLevel;
private int _targetLevel;
private float _targetValue;
public float CurrentValue { get; set; }
private void Awake()
{
currentLevel = 0;
CurrentValue = 0f;
_targetValue = 0f;
SetRawValue(0f);
}
public void SetTargetValue(float value, int level)
{
if (_targetValue == value && _targetLevel == level)
{
return;
}
_targetValue = Mathf.Clamp01(value);
_targetLevel = level;
}
public void QuickResetToLevel(int level, float value = 0, bool force = false)
{
_targetValue = value;
currentLevel = level;
_targetLevel = level;
if (force)
{
CurrentValue = value;
}
SetRawValue(value);
}
private bool IncValueToTarget(float target, float speed)
{
float current = CurrentValue;
bool rising = target - current >= 0f;
float next = current + (rising ? Time.deltaTime : (0f - Time.deltaTime)) * speed;
bool reached;
if (rising)
{
reached = next >= target;
if (reached)
{
next = target;
}
}
else
{
reached = next <= target;
if (reached)
{
next = target;
}
}
SetRawValue(next);
return reached;
}
private void LevelTransition(bool smooth, int deltaLevel, float target, float afterValue)
{
if (!smooth)
{
currentLevel += deltaLevel;
SetRawValue(_targetValue);
return;
}
if (IncValueToTarget(target, levelincSpeed))
{
currentLevel += deltaLevel;
SetRawValue(afterValue);
}
}
private void Update()
{
if (_targetLevel == currentLevel)
{
if (_targetValue > CurrentValue)
{
IncValueToTarget(_targetValue, incSpeed);
}
else if (_targetValue <= CurrentValue)
{
IncValueToTarget(_targetValue, decSpeed);
}
}
else if (_targetLevel > currentLevel)
{
LevelTransition(_smoothLevelUp, 1, 1f, 0f);
}
else
{
LevelTransition(_smoothLevelDown, -1, 0f, 1f);
}
}
private void SetRawValue(float value)
{
CurrentValue = value;
float ratio = Mathf.Clamp01(value);
if (gaugeRect != null)
{
Vector2 anchorMax = gaugeRect.anchorMax;
gaugeRect.anchorMax = new Vector2(_x ? ratio : anchorMax.x, _y ? ratio : anchorMax.y);
}
if (_gaugeImage != null)
{
_gaugeImage.fillAmount = ratio * _imageMaxFillRatio;
}
}
public void changeGaugeColor(Color color)
{
_gaugeImage.color = color;
}
}
}