SFX_TopographicScannable.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Linq;
  2. using UnityEngine;
  3. // ReSharper disable once CheckNamespace
  4. namespace QFX.SFX
  5. {
  6. public sealed class SFX_TopographicScannable : MonoBehaviour
  7. {
  8. public Material ScannableMaterial;
  9. public SFX_AnimationModule HighlightIntensity;
  10. private Material _scannableMaterialInstance;
  11. private float _startTime;
  12. public bool IsHighlighted { get; private set; }
  13. public void Highlight()
  14. {
  15. IsHighlighted = true;
  16. _startTime = Time.time;
  17. }
  18. public void Hide()
  19. {
  20. IsHighlighted = false;
  21. Reset();
  22. }
  23. private void Reset()
  24. {
  25. _scannableMaterialInstance.SetFloat("_Alpha", HighlightIntensity.Evaluate(0));
  26. }
  27. private void Start()
  28. {
  29. _scannableMaterialInstance = new Material(ScannableMaterial);
  30. foreach (var rend in GetComponentsInChildren<Renderer>())
  31. {
  32. var materials = rend.materials.ToList();
  33. materials.Add(_scannableMaterialInstance);
  34. rend.materials = materials.ToArray();
  35. }
  36. Reset();
  37. }
  38. private void Update()
  39. {
  40. if (!IsHighlighted)
  41. return;
  42. var time = Time.time - _startTime;
  43. var evalIntensity = HighlightIntensity.Evaluate(time);
  44. _scannableMaterialInstance.SetFloat("_Alpha", evalIntensity);
  45. }
  46. }
  47. }