HudTargetView.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // MIT License
  2. // https://gitlab.com/ilnprj
  3. // Copyright (c) 2020 ilnprj
  4. using UnityEngine;
  5. namespace RadarComponents {
  6. /// <summary>
  7. /// Hud Item View
  8. /// </summary>
  9. public class HudTargetView : BaseTargetView
  10. {
  11. private float centerX;
  12. private float centerY;
  13. private Vector2 posTarget;
  14. private Vector3 forward;
  15. private Vector3 toOther;
  16. private const int DIVIDE_CONSTANT = 2;
  17. private HudRadar radarContainer;
  18. protected override void Awake()
  19. {
  20. base.Awake();
  21. radarContainer = GetComponentInParent<HudRadar>();
  22. }
  23. public override void UpdateViewTarget()
  24. {
  25. posTarget = new Vector2(locator.CameraPlayer.WorldToScreenPoint(targetTransform.position).x, locator.CameraPlayer.WorldToScreenPoint(targetTransform.position).y);
  26. centerX = Screen.width / DIVIDE_CONSTANT;
  27. centerY = Screen.height / DIVIDE_CONSTANT;
  28. forward = locator.CameraPlayer.transform.TransformDirection(Vector3.forward);
  29. toOther = targetTransform.position - Camera.main.transform.position;
  30. if (Vector3.Dot(forward, toOther) < 0)
  31. {
  32. float yPos = radarContainer.TargetsFadeOut ? -100 : 0;
  33. posTarget = new Vector2(posTarget.x, yPos);
  34. }
  35. if (!radarContainer.TargetsFadeOut)
  36. {
  37. CalibrateInsindeScreen();
  38. }
  39. posTarget = new Vector2(centerX - posTarget.x, centerY - posTarget.y);
  40. iconTarget.rectTransform.anchoredPosition = new Vector2(-posTarget.x, -posTarget.y);
  41. }
  42. private void CalibrateInsindeScreen()
  43. {
  44. float minPos = centerX - rootTransform.sizeDelta.x / DIVIDE_CONSTANT;
  45. float maxPos = centerX + rootTransform.sizeDelta.x / DIVIDE_CONSTANT;
  46. float minPosY = centerY - rootTransform.sizeDelta.y / DIVIDE_CONSTANT;
  47. float maxPosY = centerY + rootTransform.sizeDelta.y / DIVIDE_CONSTANT;
  48. posTarget = new Vector2(Mathf.Clamp(posTarget.x, minPos + (iconTarget.rectTransform.rect.width / DIVIDE_CONSTANT), maxPos - (iconTarget.rectTransform.rect.width / DIVIDE_CONSTANT)),
  49. Mathf.Clamp(posTarget.y, minPosY + (iconTarget.rectTransform.rect.height / DIVIDE_CONSTANT), maxPosY - (iconTarget.rectTransform.rect.height / DIVIDE_CONSTANT)));
  50. }
  51. }
  52. }