You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
5.2 KiB
160 lines
5.2 KiB
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class SetChoiceEffect : MonoBehaviour
|
|
{
|
|
|
|
[SerializeField]
|
|
public RawImage rawImage;
|
|
|
|
Material material;
|
|
|
|
public float FlashDuration = 0.1f; // Duration for the flash effect
|
|
public float FadeDuration = 1.0f; // Duration for the fade effect
|
|
|
|
public float MinFadeAmount = 0.2f; // Minimum fade amount for discard effect
|
|
public int FlashCount = 3; // Number of flashes for discard effect
|
|
public float ShortFadeDuration = 0.1f; // Duration for short fade effect
|
|
|
|
public float ImageOffsetY = 0.05f; // Offset for the image in the shader
|
|
|
|
public CanvasGroup mainCanvas;
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
|
|
if (rawImage == null)
|
|
{
|
|
rawImage = GetComponentInChildren<RawImage>();
|
|
}
|
|
|
|
if (rawImage != null)
|
|
{
|
|
material = rawImage.material;
|
|
// material = rawImage.GetComponent<Renderer>().material;
|
|
setChoice("reset"); // Set default effect
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("RawImage component not found on this GameObject.");
|
|
}
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
material.SetFloat("_OffsetY", ImageOffsetY);
|
|
|
|
}
|
|
|
|
private IEnumerator FadeCanvasGroup(CanvasGroup canvasGroup, float startAlpha, float endAlpha, float duration, Action onComplete = null, float delay = 0f)
|
|
{
|
|
if (delay > 0f)
|
|
yield return new WaitForSeconds(delay);
|
|
|
|
canvasGroup.alpha = startAlpha;
|
|
float elapsedTime = 0f;
|
|
|
|
while (elapsedTime < duration)
|
|
{
|
|
elapsedTime += Time.deltaTime;
|
|
canvasGroup.alpha = Mathf.Lerp(startAlpha, endAlpha, elapsedTime / duration);
|
|
yield return null;
|
|
}
|
|
|
|
canvasGroup.alpha = endAlpha;
|
|
onComplete?.Invoke();
|
|
}
|
|
|
|
|
|
private IEnumerator FadeCoroutine(string name, float from, float to, float duration, Action onComplete = null, float delay = 0f)
|
|
{
|
|
if (delay > 0f)
|
|
yield return new WaitForSeconds(delay);
|
|
|
|
float elapsedTime = 0f;
|
|
while (elapsedTime < duration)
|
|
{
|
|
float t = elapsedTime / duration;
|
|
// Ease in-out (smoothstep)
|
|
float easeT = t * t * (3f - 2f * t);
|
|
float value = Mathf.Lerp(from, to, easeT);
|
|
|
|
material.SetFloat(name, value);
|
|
elapsedTime += Time.deltaTime;
|
|
yield return null;
|
|
}
|
|
material.SetFloat(name, to); // Ensure final value is set
|
|
|
|
onComplete?.Invoke(); // Invoke the callback if provided
|
|
}
|
|
public void Reset()
|
|
{
|
|
if (material != null)
|
|
{
|
|
// material.SetFloat("_BloomIntensity", MinBloomAmount);
|
|
// material.SetFloat("_BloomThreshold", MaxBloomThreshold);
|
|
material.SetFloat("_FadeAmount", 1.0f);
|
|
// mainCanvas.alpha = 1.0f; // Reset canvas alpha
|
|
|
|
material.SetFloat("_FlashAmount", 0.0f);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("Material is not assigned.");
|
|
}
|
|
}
|
|
public void setChoice(string type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case "save":
|
|
|
|
material.SetFloat("_FadeAmount", 1.0f);
|
|
|
|
StartCoroutine(FadeCoroutine("_FlashAmount", 0.0f, 1.0f, FlashDuration / 2,
|
|
() =>
|
|
{
|
|
StartCoroutine(FadeCoroutine("_FlashAmount", material.GetFloat("_FlashAmount"), 0.0f, FlashDuration / 2, () =>
|
|
{
|
|
StartCoroutine(FadeCoroutine("_FadeAmount", material.GetFloat("_FadeAmount"), 0.0f, FadeDuration));
|
|
// StartCoroutine(FadeCanvasGroup(mainCanvas, mainCanvas.alpha, 0.0f, FadeDuration,null, FlashDuration));
|
|
}, FlashDuration));
|
|
|
|
}
|
|
));
|
|
|
|
|
|
break;
|
|
case "discard":
|
|
|
|
for (int i = 0; i < FlashCount; ++i)
|
|
{
|
|
StartCoroutine(FadeCoroutine("_FadeAmount", 1.0f, MinFadeAmount, ShortFadeDuration, () =>
|
|
{
|
|
StartCoroutine(FadeCoroutine("_FadeAmount", MinFadeAmount, 1.0f, ShortFadeDuration));
|
|
}, i * ShortFadeDuration * 2));
|
|
|
|
// StartCoroutine(FadeCanvasGroup(mainCanvas, 1.0f, MinFadeAmount, ShortFadeDuration, () =>
|
|
// {
|
|
// StartCoroutine(FadeCanvasGroup(mainCanvas, MinFadeAmount, 1.0f, ShortFadeDuration));
|
|
// }, i * ShortFadeDuration * 2));
|
|
}
|
|
StartCoroutine(FadeCoroutine("_FadeAmount", material.GetFloat("_FadeAmount"), 0.0f, FadeDuration, null, ShortFadeDuration * FlashCount * 2));
|
|
// StartCoroutine(FadeCanvasGroup(mainCanvas, mainCanvas.alpha, 0.0f, FadeDuration, null, ShortFadeDuration * FlashCount * 2));
|
|
|
|
break;
|
|
case "reset":
|
|
Reset();
|
|
break;
|
|
default:
|
|
Debug.LogWarning("Unknown effect type: " + type);
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|