Skip to content
Snippets Groups Projects
FactSpawner.cs 1.73 KiB
Newer Older
  • Learn to ignore specific revisions
  • using System;
    using System.Collections;
    using System.Collections.Generic;
    using TMPro;
    using UnityEngine;
    
    public class FactSpawner : MonoBehaviour
    {
        public GameObject PointRepresentation;
        public string[] Facts = new String[100];
    
    
    
    
        void Start()
        {
            CommunicationEvents.TriggerEvent.AddListener(OnHit);
            CommunicationEvents.AddEvent.AddListener(SpawnPoint);
            CommunicationEvents.RemoveEvent.AddListener(DeletePoint);
        }
    
        public int GetFirstEmptyID()
        {
           
            for(int i = 0; i < Facts.Length; ++i)
            {
                if(Facts[i]== "")
                    return i;
            }
            return Facts.Length - 1;
       
        }
    
    
        public void SpawnPoint(RaycastHit hit, int id)
        {
            Debug.Log(id);
            GameObject point = GameObject.Instantiate(PointRepresentation);
            point.transform.position = hit.point;
            point.transform.up = hit.normal;
            string letter = ((Char)(64+id+1)).ToString();
            point.GetComponentInChildren<TextMeshPro>().text = letter;
            Facts[id] = letter;
        }
    
        public void DeletePoint(RaycastHit hit, int id)
        {
            GameObject point = hit.transform.gameObject;
            GameObject.Destroy(point);
            Facts[id] = "";
        }
    
        public void OnHit(RaycastHit hit)
        {
    
            if (hit.transform.gameObject.layer == LayerMask.NameToLayer("Point"))
            {
                //hit existing point, so delete it
                char letter = hit.transform.gameObject.GetComponentInChildren<TextMeshPro>().text.ToCharArray()[0];
                int id = letter - 65;
                CommunicationEvents.RemoveEvent.Invoke(hit,id);
            }
            else
            {
    
                CommunicationEvents.AddEvent.Invoke(hit, GetFirstEmptyID());
            }
        }
    
          
    
    }