-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhp bar animate.cs
83 lines (70 loc) · 2.84 KB
/
hp bar animate.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DualSliderController : MonoBehaviour
{
public Slider mainSlider; // O Slider principal que diminuirá rapidamente
public Slider delayedSlider; // O Slider com atraso
public Image delayedSliderFill; // A imagem de preenchimento do Slider com atraso
public float delay = 1.0f; // O tempo de atraso em segundos
public float damageThreshold = 0.3f; // Limiar para o dano (30%)
private float currentValue;
private float targetValue;
private float reductionRate;
private bool isTakingDamage = false;
public Color amarelo = new Color(0.95f, 0.72f, 0.07f);
public Color amareloBranco = new Color(0.867f, 0.823f, 0.808f);
// Cor personalizada no formato RGB
private void Start()
{
// Define o valor máximo do delayedSlider igual ao do mainSlider
UpdateDelayedSliderMaxValue();
currentValue = mainSlider.value;
targetValue = mainSlider.value;
reductionRate = (mainSlider.maxValue - mainSlider.minValue) / delay;
}
private void Update()
{
// Verificar se o valor máximo do mainSlider mudou e atualizar o do delayedSlider
if (mainSlider.maxValue != delayedSlider.maxValue)
{
UpdateDelayedSliderMaxValue();
}
// Verificar se o dano é maior ou igual a 30% do valor máximo do mainSlider
float damagePercentage = Mathf.Abs(targetValue - mainSlider.value) / mainSlider.maxValue;
if (damagePercentage >= damageThreshold)
{
isTakingDamage = true;
}
// Verificar se o Slider com atraso está tomando dano e a porcentagem está dentro do limiar
if (isTakingDamage && delayedSlider.value != mainSlider.value)
{
// Mudança de cor para amareloBranco
delayedSliderFill.color = amareloBranco;
}
else
{
// Manter a cor amarela
delayedSliderFill.color = amarelo;
}
// Atualizar o valor do Slider com atraso
if (currentValue != targetValue)
{
currentValue = Mathf.MoveTowards(currentValue, targetValue, reductionRate * Time.deltaTime);
delayedSlider.value = currentValue;
}
// Verificar se o Slider com atraso alcançou o mesmo valor do Slider principal
if (currentValue == mainSlider.value)
{
isTakingDamage = false;
}
// Atualizar o valor de destino com base no Slider principal
targetValue = mainSlider.value;
}
// Função para atualizar o valor máximo do delayedSlider
private void UpdateDelayedSliderMaxValue()
{
delayedSlider.maxValue = mainSlider.maxValue;
}
}