1
0
forked from cgvr/DeltaVR
Files
DeltaVR3DModelGeneration/Assets/_PROJECT/Scripts/ModeGeneration/ShapeDetection/ShapeScannerRay.cs

93 lines
2.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShapeScannerRay : MonoBehaviour
{
public Material _activeMaterial;
public Material _passiveMaterial;
public string scannableTag = "ShapeScannable";
private ShapeScanner _scanner;
private MeshRenderer[] meshRenderers;
private HashSet<GameObject> collidingObjects;
private bool _collisionRequired;
void Awake()
{
meshRenderers = GetComponentsInChildren<MeshRenderer>();
collidingObjects = new HashSet<GameObject>();
}
// Update is called once per frame
void Update()
{
}
public void Initialize(ShapeScanner scanner, bool collisionRequired, Material activeMaterial, Material passiveMaterial)
{
_scanner = scanner;
_collisionRequired = collisionRequired;
_activeMaterial = activeMaterial;
_passiveMaterial = passiveMaterial;
foreach (MeshRenderer meshRenderer in meshRenderers)
{
meshRenderer.material = _passiveMaterial;
}
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == scannableTag)
{
collidingObjects.Add(other.gameObject);
// Only activate when this was the first object that entered collision
if (collidingObjects.Count == 1)
{
foreach (MeshRenderer meshRenderer in meshRenderers)
{
meshRenderer.material = _activeMaterial;
}
if (_collisionRequired)
{
_scanner.IncrementCorrectRayCount();
}
else
{
_scanner.DecrementCorrectRayCount();
}
}
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.tag == "ShapeScannable")
{
collidingObjects.Remove(other.gameObject);
if (collidingObjects.Count == 0)
{
foreach (MeshRenderer meshRenderer in meshRenderers)
{
meshRenderer.material = _passiveMaterial;
}
if (_collisionRequired)
{
_scanner.DecrementCorrectRayCount();
}
else
{
_scanner.IncrementCorrectRayCount();
}
}
}
}
public HashSet<GameObject> GetCollidingObjects()
{
return collidingObjects;
}
}