63 lines
2.7 KiB
C#
63 lines
2.7 KiB
C#
|
|
using System.Collections;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using UnityEngine;
|
||
|
|
using TMPro;
|
||
|
|
|
||
|
|
public class TerribleHealthBarScript : MonoBehaviour
|
||
|
|
{
|
||
|
|
public Color fullHealthColor;
|
||
|
|
public Color fullDeathColor;
|
||
|
|
public Color subtractionColor;
|
||
|
|
public GameObject healthVisual;
|
||
|
|
public GameObject actualHealthVisual;
|
||
|
|
public GameObject deathVisual;
|
||
|
|
public float smoothSpeed = 0.1f;
|
||
|
|
public TextMeshProUGUI text;
|
||
|
|
private Damageable healthScript;
|
||
|
|
|
||
|
|
private Vector3 initialScale;
|
||
|
|
private Vector3 initialPosition;
|
||
|
|
private Vector3 targetScale;
|
||
|
|
private Vector3 targetPosition;
|
||
|
|
private Color targetActualColor;
|
||
|
|
|
||
|
|
void Start()
|
||
|
|
{
|
||
|
|
healthScript = transform.parent.GetComponent<Damageable>();
|
||
|
|
initialScale = healthVisual.transform.localScale;
|
||
|
|
initialPosition = healthVisual.transform.position;
|
||
|
|
targetScale = initialScale;
|
||
|
|
targetPosition = initialPosition;
|
||
|
|
targetActualColor = actualHealthVisual.GetComponent<SpriteRenderer>().color;
|
||
|
|
}
|
||
|
|
|
||
|
|
void Update()
|
||
|
|
{
|
||
|
|
if (healthScript.gameObject.transform.localScale.x <= 0f)
|
||
|
|
{
|
||
|
|
transform.localScale = new Vector3(-1 * Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
transform.localScale = new Vector3(1 * Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z);
|
||
|
|
}//
|
||
|
|
|
||
|
|
float healthRatio = healthScript.damage / healthScript.maxDamage;
|
||
|
|
|
||
|
|
targetActualColor = Color.Lerp(fullDeathColor, fullHealthColor, healthRatio);
|
||
|
|
targetScale = new Vector3(Mathf.Lerp(0, 1, healthRatio) * initialScale.x, healthVisual.transform.localScale.y, healthVisual.transform.localScale.z);
|
||
|
|
targetPosition = new Vector3(Mathf.Lerp(-0.5f, 0, healthRatio), healthVisual.transform.localPosition.y, healthVisual.transform.localPosition.z);
|
||
|
|
text.text = healthScript.damage.ToString() + "/" + healthScript.maxDamage.ToString();
|
||
|
|
|
||
|
|
actualHealthVisual.transform.localScale = targetScale;
|
||
|
|
actualHealthVisual.transform.localPosition = targetPosition;
|
||
|
|
|
||
|
|
healthVisual.transform.localScale = Vector3.Lerp(healthVisual.transform.localScale, targetScale, smoothSpeed);
|
||
|
|
healthVisual.transform.localPosition = Vector3.Lerp(healthVisual.transform.localPosition, targetPosition, smoothSpeed);
|
||
|
|
|
||
|
|
actualHealthVisual.GetComponent<SpriteRenderer>().color = Color.Lerp(actualHealthVisual.GetComponent<SpriteRenderer>().color, targetActualColor, smoothSpeed);
|
||
|
|
deathVisual.GetComponent<SpriteRenderer>().color = Color.Lerp(deathVisual.GetComponent<SpriteRenderer>().color, targetActualColor * 0.5f, smoothSpeed);
|
||
|
|
healthVisual.GetComponent<SpriteRenderer>().color = subtractionColor;
|
||
|
|
}
|
||
|
|
}
|