VirtualNose.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using UnityEngine;
  2. namespace SicknessReduction.Visual
  3. {
  4. public class VirtualNose : MonoBehaviour
  5. {
  6. public GameObject prefabToSpawn;
  7. public Vector3 padding;
  8. public bool adjustToIpd = true;
  9. public float ipdFactor = 15.15f;
  10. private Camera cam;
  11. private GameObject nose;
  12. private IpdInfo ipdInfo;
  13. private Vector3 initalLocalScale;
  14. private void OnEnable()
  15. {
  16. cam = Camera.main;
  17. if (cam == null)
  18. {
  19. Debug.LogError("No main camera found. Cannot place virtual nose!");
  20. return;
  21. }
  22. ipdInfo = GetComponentInParent<IpdInfo>();
  23. if (ipdInfo == null)
  24. {
  25. Debug.LogError("No IPD Info found as parent of virtual nose");
  26. }
  27. if(adjustToIpd) ipdInfo.onIpdChanged += AdjustToIpd;
  28. nose = Instantiate(prefabToSpawn, cam.transform);
  29. nose.transform.localPosition = Vector3.forward * cam.nearClipPlane + padding;
  30. initalLocalScale = nose.transform.localScale;
  31. }
  32. private void AdjustToIpd(float ipdMeters)
  33. {
  34. Debug.Log($"Scaling nose with factor {ipdMeters * ipdFactor}");
  35. var newScale = initalLocalScale * (ipdMeters * ipdFactor * ipdFactor);
  36. nose.transform.localScale = newScale;
  37. }
  38. private void OnDisable()
  39. {
  40. ipdInfo.onIpdChanged -= AdjustToIpd;
  41. if (nose == null) return;
  42. Destroy(nose);
  43. }
  44. }
  45. }