Untitled

 avatar
unknown
plain_text
5 months ago
2.7 kB
4
Indexable
using UnityEngine;
using TouchScript;
using TouchScript.Pointers;

public class FireworksOnPress : MonoBehaviour
{
    public ParticleSystem fireworks;
    public Camera rayCastCamera;
    public float maxRaycastDistance = 100f;
    public AudioSource fireworks1;
    public float minDistanceBetweenPresses = 0f;
    public float pressDelay = 0f;

    private Vector3 lastPressPosition;
    private bool isFirstPress = true;
    private float lastPressTime = -1f;

    void Start()
    {
        if (rayCastCamera == null)
        {
            rayCastCamera = Camera.main;
            if (rayCastCamera == null)
            {
                Debug.LogError("No camera assigned and no main camera found!");
            }
        }
    }

    private void OnEnable()
    {
        if (TouchManager.Instance != null)
        {
            TouchManager.Instance.PointersPressed += HandlePointersPressed;
        }
    }

    private void OnDisable()
    {
        if (TouchManager.Instance != null)
        {
            TouchManager.Instance.PointersPressed -= HandlePointersPressed;
        }
    }

    private void HandlePointersPressed(object sender, PointerEventArgs e)
    {
        foreach (var pointer in e.Pointers)
        {
            if (Time.time - lastPressTime < pressDelay) continue;
            lastPressTime = Time.time;

            Ray ray = rayCastCamera.ScreenPointToRay(pointer.Position);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, maxRaycastDistance))
            {
                if (isFirstPress || Vector3.Distance(hit.point, lastPressPosition) >= minDistanceBetweenPresses)
                {
                    SpawnFireworks(hit.point);
                    lastPressPosition = hit.point;
                    isFirstPress = false;
                }
                else
                {
                    Debug.Log("Press too close to the previous one. Minimum distance: " + minDistanceBetweenPresses);
                }
            }
        }
    }

    void SpawnFireworks(Vector3 position)
    {
        Debug.Log("Spawning fireworks at: " + position);
        ParticleSystem newFireworks = Instantiate(fireworks);
        AudioSource newFireworksAudio = Instantiate(fireworks1);
        newFireworksAudio.pitch = Random.Range(0.8f, 1.2f);
        newFireworksAudio.Play();
        newFireworks.transform.position = position;
        newFireworks.Play();

        Destroy(newFireworksAudio.gameObject, newFireworksAudio.clip.length);
        Destroy(newFireworks.gameObject, newFireworks.main.duration);
    }
}
Editor is loading...
Leave a Comment