using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; using OscJack; public class OscHandler : MonoBehaviour { [SerializeField] public CanvasGroup intro; [SerializeField] public CanvasGroup main; [SerializeField] public VideoPlayer videoPlayer; [SerializeField] public Image mask; [SerializeField] OscConnection _connection = null; // Start is called before the first frame update void Start() { setupOsc(); } // Update is called once per frame void Update() { } public void setupOsc() { Debug.Log("Setting up OSC server..."); var port = _connection?.port ?? 0; var server = OscMaster.GetSharedServer(port); // if(server.IsRunning){ server.MessageDispatcher.AddCallback("/reset", (string address, OscDataHandle data) => { onReset(); } ); server.MessageDispatcher.AddCallback("/go", (string address, OscDataHandle data) => { Debug.Log("/go message received"); videoPlayer.Stop(); videoPlayer.time = 0; videoPlayer.Play(); videoPlayer.loopPointReached += (VideoPlayer vp) => { StartCoroutine(FadeCanvasGroup(intro, 1, 0, 1f)); StartCoroutine(FadeCanvasGroup(main, 0, 1, 1f)); }; } ); server.MessageDispatcher.AddCallback("/inputTime", (string address, OscDataHandle data) => { float duration = data.GetElementAsFloat(0); Debug.Log("/inputTime message received"+duration); onInputTime(duration); } ); server.MessageDispatcher.AddCallback("/end", (string address, OscDataHandle data) => { Debug.Log("/end message received"); ; StartCoroutine(FadeCanvasGroup(main, 1, 0, 1f)); } ); // } } private IEnumerator FadeCanvasGroup(CanvasGroup canvasGroup, float startAlpha, float endAlpha, float duration) { 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; } public void onInputTime(float duration) { Debug.Log("Start decreasing fill over time: " + duration); if (mask != null) { StopCoroutine("DecreaseFill"); StartCoroutine(DecreaseFill(duration)); } } private IEnumerator DecreaseFill(float duration) { float elapsed = 0f; mask.fillAmount = 1f; while (elapsed < duration) { elapsed += Time.deltaTime; mask.fillAmount = Mathf.Lerp(1f, 0f, elapsed / duration); yield return null; } mask.fillAmount = 0f; } public void onReset() { Debug.Log("/reset message received"); videoPlayer.Stop(); intro.alpha = 0f; main.alpha = 0f; } }