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.

104 lines
3.1 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UltraCombos.Configuration;
public class tuio_event : MonoBehaviour
{
public movieController img;
public RectTransform canvas;
Dictionary<int, movieController> movies = new Dictionary<int, movieController>();
Dictionary<int, Vector2> pre_pos = new Dictionary<int, Vector2>();
[Config]
public bool VisualizeTouches = true;
[Config]
[Range(1, 30)]
public int frame_gap = 20;
[Config]
[Range(50, 300)]
public int delta_threshold = 100;
[Config]
[Range(128, 512)]
public int snow_size = 256;
[Config]
[Range(0.01f, 0.1f)]
public float img_fade_speed = 0.02f;
[Config]
[Range(0.01f, 5f)]
public float img_wait_sec = 2f;
//[Config]
[Range(0f, 1f)]
public float audio_volume = 1f;
void Update()
{
GetComponent<touchVisualizer>().enabled = VisualizeTouches;
var touches = TUIOManager.Instance.touches;
foreach (var id in touches.Keys)
{
movieController movie = null;
if (movies.ContainsKey(id) == false) // Add
{
//Debug.Log("Add");
GameObject g = Instantiate(img.gameObject, canvas, false);
g.name = id.ToString();
movie = g.AddComponent<movieController>();
movie.fade_speed = img_fade_speed;
movie.wait_sec = img_wait_sec;
movie.size = new Vector2(snow_size, snow_size);
movie.volume = audio_volume;
movie.id = id;
movies.Add(id, movie);
var rt = movie.transform as RectTransform;
rt.anchoredPosition = touches[id].position;
//movie.transform.position = touches[id].position;
pre_pos[id] = touches[id].position;
}
else //update
{
movie = movies[id];
if (Time.frameCount % frame_gap == 0)
{
var rt = movie.transform as RectTransform;
//rt.anchoredPosition = touches[id].position;
float delta_pos = Vector2.Distance(pre_pos[id], rt.anchoredPosition);
if (delta_pos > delta_threshold)
{
movie.force_destroy = true;
movie.destroy_timer = Time.time;
movies.Remove(id);
}
pre_pos[id] = touches[id].position;
}
}
}
var removes = new HashSet<int>();
foreach (var id in movies.Keys)
{
if (touches.ContainsKey(id) == false) // remove
{
removes.Add(id);
}
}
foreach (var id in removes)
{
if (movies[id].stat == 2 || movies[id].stat == 3)
{
movies[id].stat = 3;
movies[id].destroy_timer = Time.time;
movies.Remove(id);
}
}
}
}