Stratasys-450mc-VR/Assets/XRI_Examples/SocketInteractors/Scripts/PerlerMachine/PerlerMachineController.cs

60 lines
1.8 KiB
C#
Raw Normal View History

namespace UnityEngine.XR.Content.Interaction
{
/// <summary>
/// This class is responsible for creating the perler sockets grid and turning on/off the machine.
/// </summary>
public class PerlerMachineController : MonoBehaviour
{
static readonly string k_EmissionKeyword = "_EMISSION";
[SerializeField]
[Tooltip("The emissive materials that will change state whenever the machine is turned on/off")]
Material[] m_EmissiveMaterials;
bool m_MachineActive;
void Awake()
{
DisableEmissiveMaterials();
}
#if UNITY_EDITOR
void OnDestroy()
{
EnableEmissiveMaterials();
}
#endif
void DisableEmissiveMaterials()
{
foreach (var material in m_EmissiveMaterials)
material.DisableKeyword(k_EmissionKeyword);
}
void EnableEmissiveMaterials()
{
foreach (var material in m_EmissiveMaterials)
material.EnableKeyword(k_EmissionKeyword);
}
/// <summary>
/// Call this method to activate or deactivate the machine. This will also turn on/off its lights.
/// Used by the BatterySlot GameObject socket.
/// </summary>
/// <param name="active">Value of <see langword="true"/> to activate the machine; <see langword="false"/> otherwise.</param>
public void SetMachineActive(bool active)
{
// It's the same state?
if (active == m_MachineActive)
return;
// Change the machine light state
m_MachineActive = active;
if (m_MachineActive)
EnableEmissiveMaterials();
else
DisableEmissiveMaterials();
}
}
}