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.

306 lines
8.5 KiB

5 months ago
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
using OscJack;
using TMPro;
public class OscHandler : MonoBehaviour
{
[SerializeField]
public CanvasGroup intro;
3 months ago
5 months ago
[SerializeField]
public CanvasGroup main;
5 months ago
[SerializeField]
public CanvasGroup light_mask;
5 months ago
[SerializeField]
public VideoPlayer videoPlayer;
[SerializeField]
public Image mask;
[SerializeField]
public float _fadeDuration = 1f;
[SerializeField]
5 months ago
public float _hintDuration = 0.5f;
[SerializeField]
public float _maskDuration = 0.2f;
3 months ago
[SerializeField]
public float _lastDurationToShow = 30f;
5 months ago
[SerializeField]
public TextMeshProUGUI statusText;
[SerializeField]
public CanvasGroup hint;
5 months ago
private IEnumerator coroutine_hint;
private IEnumerator coroutine_countdown;
4 months ago
SetChoiceEffect setChoiceEffect;
[SerializeField]
public TextMeshProUGUI stepText;
[SerializeField]
public CanvasGroup hintforChat;
4 months ago
[SerializeField]
public CanvasGroup hintforStep;
4 months ago
3 months ago
private IEnumerator coroutine_breath;
4 months ago
5 months ago
// Start is called before the first frame update
void Start()
{
4 months ago
setChoiceEffect = main?.GetComponent<SetChoiceEffect>();
5 months ago
}
// Update is called once per frame
void Update()
{
4 months ago
5 months ago
}
5 months ago
private IEnumerator FadeCanvasGroup(CanvasGroup canvasGroup, float startAlpha, float endAlpha, float duration, float delay = 0f)
5 months ago
{
5 months ago
if (delay > 0f)
yield return new WaitForSeconds(delay);
5 months ago
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;
}
private IEnumerator DecreaseFill(float duration)
{
float elapsed = 0f;
mask.fillAmount = 1f;
while (elapsed < duration)
{
elapsed += Time.deltaTime;
3 months ago
if (duration - elapsed > _lastDurationToShow)
{
mask.fillAmount = 0;
mask.gameObject.SetActive(false);
3 months ago
}
else
{
mask.gameObject.SetActive(true);
3 months ago
mask.fillAmount = Mathf.Lerp(0f, 1f, (duration - elapsed) / _lastDurationToShow);
}
5 months ago
yield return null;
}
mask.fillAmount = 0f;
}
4 months ago
public void onStatus(string status)
{
5 months ago
Debug.Log("/status message received: " + status);
videoPlayer.Stop();
4 months ago
if (coroutine_hint != null) StopCoroutine(coroutine_hint);
5 months ago
5 months ago
mask.fillAmount = 0f;
4 months ago
switch (status)
5 months ago
{
case "reset":
4 months ago
intro.alpha = 0f;
5 months ago
main.alpha = 0f;
// light_mask.alpha = 0f;
5 months ago
hint.alpha = 0f;
4 months ago
setChoiceEffect?.Reset();
5 months ago
break;
5 months ago
case "intro":
// StartCoroutine(FadeCanvasGroup(light_mask, 0f, 1f, _maskDuration));
5 months ago
StartCoroutine(FadeCanvasGroup(intro, 0f, 1f, _fadeDuration, _maskDuration));
4 months ago
5 months ago
5 months ago
videoPlayer.time = 0f;
4 months ago
videoPlayer.Play();
videoPlayer.loopPointReached += vp =>
{
Debug.Log("Video playback completed.");
StartCoroutine(FadeCanvasGroup(intro, 1f, 0f, _fadeDuration));
// StartCoroutine(FadeCanvasGroup(main, 0f, 1f, _fadeDuration));
videoPlayer.loopPointReached -= null;
};
5 months ago
break;
case "go":
// if (light_mask.alpha < 1f) StartCoroutine(FadeCanvasGroup(light_mask, light_mask.alpha, 1f, _fadeDuration));
5 months ago
StartCoroutine(FadeCanvasGroup(intro, intro.alpha, 0f, _fadeDuration));
StartCoroutine(FadeCanvasGroup(main, main.alpha, 1f, _fadeDuration));
4 months ago
5 months ago
break;
case "end":
4 months ago
if (intro.alpha > 0f) StartCoroutine(FadeCanvasGroup(intro, 1f, 0f, _fadeDuration));
5 months ago
StartCoroutine(FadeCanvasGroup(main, 1f, 0f, _fadeDuration));
// StartCoroutine(FadeCanvasGroup(light_mask, 1f, 0f, _maskDuration, _fadeDuration));
4 months ago
if (hint.alpha > 0f)
{
5 months ago
coroutine_hint = FadeCanvasGroup(hint, hint.alpha, 0f, _hintDuration);
StartCoroutine(coroutine_hint);
}
5 months ago
5 months ago
videoPlayer.Stop();
break;
default:
Debug.LogWarning("Unknown status: " + status);
break;
}
4 months ago
}
public void onCountDown(string time)
{
5 months ago
Debug.Log("/countdown message received: " + time);
if (mask != null)
{
4 months ago
if (time == "0")
{
mask.fillAmount = 0f;
}
else
{
if (coroutine_countdown != null) StopCoroutine(coroutine_countdown);
5 months ago
coroutine_countdown = DecreaseFill(float.Parse(time));
StartCoroutine(coroutine_countdown);
5 months ago
}
}
}
5 months ago
public void onInput(string input)
{
Debug.Log("/input message received: " + input);
4 months ago
4 months ago
if (input.Length == 0)
4 months ago
{
4 months ago
statusText.text = "";
// hintforChat.alpha = 0f;
if (hintforChat.alpha > 0f)
{
StartCoroutine(FadeCanvasGroup(hintforChat, hintforChat.alpha, 0f, _hintDuration));
}
5 months ago
}
4 months ago
else
4 months ago
{
3 months ago
if (hint.alpha < 1f)
{
if (coroutine_hint != null) StopCoroutine(coroutine_hint);
coroutine_hint = FadeCanvasGroup(hint, hint.alpha, 1f, _hintDuration);
StartCoroutine(coroutine_hint);
}
3 months ago
// statusText.text = input;
StartCoroutine(TypeWriter(statusText, input));
4 months ago
// hintforChat.alpha = 1f;
if (hintforChat.alpha < 1f)
{
StartCoroutine(FadeCanvasGroup(hintforChat, hintforChat.alpha, 1f, _hintDuration));
}
if (hint.alpha < 1f)
{
3 months ago
// if (coroutine_hint != null) StopCoroutine(coroutine_hint);
// coroutine_hint = FadeCanvasGroup(hint, hint.alpha, 1f, _hintDuration);
// StartCoroutine(coroutine_hint);
4 months ago
if (coroutine_hint != null) StopCoroutine(coroutine_hint);
3 months ago
coroutine_hint = BreathFade(hint);
4 months ago
StartCoroutine(coroutine_hint);
3 months ago
4 months ago
}
5 months ago
}
3 months ago
4 months ago
4 months ago
}
public void onHint(string text)
{
Debug.Log("/hint message received: " + text);
3 months ago
// stepText.text = text;
StartCoroutine(TypeWriter(stepText, text));
4 months ago
StartCoroutine(FadeCanvasGroup(hintforStep, hintforStep.alpha, 1f, _hintDuration));
3 months ago
if (coroutine_breath != null) StopCoroutine(coroutine_breath);
// coroutine_hint = FadeCanvasGroup(hint, hint.alpha, text.Length > 0 ? 1f : 0f, _hintDuration);
// StartCoroutine(coroutine_hint);
coroutine_breath = BreathFade(hintforStep);
StartCoroutine(coroutine_breath);
5 months ago
}
3 months ago
private IEnumerator BreathFade(CanvasGroup canvasGroup, float maxAlpha=1f, float minAlpha=0.33f,
float fadeInDuration=1.2f, float fadeOutDuration=1.2f, int cycles=20)
{
for (int i = 0; i < cycles; i++)
{
// Fade out
float elapsed = 0f;
while (elapsed < fadeOutDuration)
{
elapsed += Time.deltaTime;
canvasGroup.alpha = Mathf.Lerp(maxAlpha, minAlpha, elapsed / fadeOutDuration);
yield return null;
}
canvasGroup.alpha = minAlpha;
// Fade in
elapsed = 0f;
while (elapsed < fadeInDuration)
{
elapsed += Time.deltaTime;
canvasGroup.alpha = Mathf.Lerp(minAlpha, maxAlpha, elapsed / fadeInDuration);
yield return null;
}
canvasGroup.alpha = maxAlpha;
}
}
public IEnumerator TypeWriter(TextMeshProUGUI textComponent, string message, float typeSpeed = 0.2f)
{
textComponent.text = "";
foreach (char c in message)
{
textComponent.text += c;
yield return new WaitForSeconds(typeSpeed);
}
}
5 months ago
}