Add gems
Was this helpful?
Was this helpful?
using NRKernal;
using NRKernal.NRExamples;
using UnityEngine;
public class GemSpawner : MonoBehaviour
{
public GemBehaviour Gem;
public GameObject GemPrefab;
public ReticleBehaviour Reticle;
public static Vector3 RandomInTriangle(Vector3 v1, Vector3 v2)
{
float u = Random.Range(0.0f, 1.0f);
float v = Random.Range(0.0f, 1.0f);
if (v + u > 1)
{
v = 1 - v;
u = 1 - u;
}
return (v1 * u) + (v2 * v);
}
public Vector3 FindRandomLocation(GameObject plane)
{
// Select random triangle in Mesh
var mesh = plane.GetComponent<PolygonPlaneVisualizer>().m_PlaneMesh;
var triangles = mesh.triangles;
var triangle = triangles[(int) Random.Range(0, triangles.Length - 1)] / 3 * 3;
var vertices = mesh.vertices;
var randomInTriangle = RandomInTriangle(vertices[triangle], vertices[triangle + 1]);
var randomPoint = plane.transform.TransformPoint(randomInTriangle);
randomPoint.y = Reticle.CurrentPlane.GetComponent<NRTrackableBehaviour>().Trackable.GetCenterPose().position.y;
return randomPoint;
}
public void SpawnGem(GameObject plane)
{
var gemClone = Instantiate(GemPrefab);
gemClone.transform.position = FindRandomLocation(plane);
Gem = gemClone.GetComponent<GemBehaviour>();
}
private void Update()
{
if (Reticle.CurrentPlane != null)
{
if (Gem == null)
{
SpawnGem(Reticle.CurrentPlane);
}
}
}
} private void OnTriggerEnter(Collider other)
{
var Gem = other.GetComponent<GemBehaviour>();
if (Gem != null)
{
Destroy(other.gameObject);
}
}