DRHPS/code-csharp/en_US/BattleAttack_Siplett_LiquidFill.cs
2025-04-08 11:31:35 +08:00

103 lines
3.6 KiB
C#

using System.Collections;
using UnityEngine;
public class BattleAttack_Siplett_LiquidFill : MonoBehaviour
{
[SerializeField]
private Transform Liquid;
[SerializeField]
private Vector3 StartingPosition;
[SerializeField]
private Vector3 EndingPosition;
[SerializeField]
private Vector3 StartingSize;
[SerializeField]
private Vector3 EndingSize;
[SerializeField]
private Transform BackgroundLiquid;
[SerializeField]
private Vector3 BackgroundStartingPosition;
[SerializeField]
private Vector3 BackgroundEndingPosition;
[SerializeField]
private Vector3 BackgroundStartingSize;
[SerializeField]
private Vector3 BackgroundEndingSize;
[Space(10f)]
[SerializeField]
private Transform LiquidSurface;
[Space(10f)]
[SerializeField]
private float LiquidRiseSpeed;
[SerializeField]
private float BackgroundLiquidRiseSpeed;
private void Awake()
{
BackgroundLiquid.GetComponent<SpriteRenderer>().size = new Vector2(2.1f, 0f);
StartingPosition += BattleSystem.Instance.transform.position;
EndingPosition += BattleSystem.Instance.transform.position;
BackgroundStartingPosition += BattleSystem.Instance.transform.position;
BackgroundEndingPosition += BattleSystem.Instance.transform.position;
LiquidSurface.position = Vector3.one * 500f;
LiquidSurface.localScale = new Vector2(LiquidSurface.localScale.x, 0f);
Liquid.position = StartingPosition;
Liquid.localScale = StartingSize;
BackgroundLiquid.position = BackgroundStartingPosition;
BackgroundLiquid.localScale = BackgroundStartingSize;
StartCoroutine(LiquidFill());
StartCoroutine(BackgroundLiquidFill());
}
private IEnumerator LiquidFill()
{
LiquidSurface.position = Vector3.one * 500f;
yield return new WaitForSeconds(0.25f);
float progress = 0f;
float duration = LiquidRiseSpeed;
Vector3 startPosition = Liquid.position;
Vector3 startScale = Liquid.localScale;
while (progress < 1f)
{
progress += Time.deltaTime / duration;
Liquid.position = Vector3.Lerp(startPosition, EndingPosition, progress);
Liquid.localScale = Vector3.Lerp(startScale, EndingSize, progress);
LiquidSurface.position = new Vector3(Liquid.position.x, Liquid.position.y + Liquid.localScale.y / 2f, Liquid.position.z);
yield return null;
}
Liquid.position = EndingPosition;
Liquid.localScale = EndingSize;
}
private IEnumerator BackgroundLiquidFill()
{
yield return new WaitForSeconds(0.25f);
float progress = 0f;
float duration = BackgroundLiquidRiseSpeed;
Vector3 startPosition = BackgroundLiquid.position;
_ = BackgroundLiquid.localScale;
SpriteRenderer BackgroundSpriteRenderer = BackgroundLiquid.GetComponent<SpriteRenderer>();
while (progress < 1f)
{
progress += Time.deltaTime / duration;
BackgroundLiquid.position = Vector3.Lerp(startPosition, BackgroundEndingPosition, progress);
BackgroundSpriteRenderer.size = new Vector2(2.1f, Mathf.Lerp(StartingSize.y, BackgroundEndingSize.y, progress));
LiquidSurface.localScale = new Vector2(LiquidSurface.localScale.x, Mathf.Lerp(0f, 1f, progress));
yield return null;
}
BackgroundLiquid.position = BackgroundEndingPosition;
}
}