Advertisement
EagleOwle

UI_GunAimController

May 31st, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.46 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3.  
  4. public class UI_GunAimController : MonoBehaviour
  5. {
  6.     [Header("Позиция оружия относительно робота")]
  7.     [SerializeField] ModulType modulType;
  8.     [Header("Image прицела, который нужно вкл/откл")]
  9.     [SerializeField] Image gunCrosshairImage;
  10.     [Header("RectTransform прицела, который нужно перемещать на экране")]
  11.     [SerializeField] private RectTransform rectTransform;
  12.     [Header("Текущий модуль оружия")]
  13.     [SerializeField] private ModulBasys currentModul;
  14.     [Header("Максимальный угол, для отключения image")]
  15.     [SerializeField] private float maxAngle;
  16.  
  17.     private void Awake()
  18.     {
  19.         EventController.Singleton.d_SetNewModul += SetNewModul;
  20.         EventController.Singleton.d_ModulClear += ModulClear;
  21.     }
  22.  
  23.     private void OnEnable()
  24.     {
  25.         gunCrosshairImage = GetComponent<Image>();
  26.     }
  27.  
  28.     private void LateUpdate()
  29.     {
  30.         if (currentModul == null)
  31.         {
  32.             gunCrosshairImage.enabled = false;
  33.             return;
  34.         }
  35.  
  36.         DrawGunCrosshair(currentModul.GetGunTarget());
  37.     }
  38.  
  39.     private void DrawGunCrosshair(Vector3 gunTarget)
  40.     {
  41.         //Отключаем изображение прицела если
  42.         //Текущий модуль не включен
  43.         if (currentModul.ModulStatus != ModulStatus.On)
  44.         {
  45.             gunCrosshairImage.enabled = false;
  46.             return;
  47.         }
  48.         //угол между вектором камеры вперед и вектором модуля вперед больше заданной величины
  49.         if (UI_WorldToScreen.CheckAngle(maxAngle, EventController.PlayerDirectionForward, currentModul.GetDirectionForward()) == false)
  50.         {
  51.             gunCrosshairImage.enabled = false;
  52.             return;
  53.         }
  54.  
  55.         gunCrosshairImage.enabled = true;
  56.         //Получаем экранную координату положения цели
  57.         gunTarget = UI_WorldToScreen.SetScreenPosition(gunTarget, 0);
  58.         //Склаживаем движение прицела по экрану
  59.  
  60.         if (GameController.aimLerp != 0)
  61.         {
  62.             gunTarget = UI_WorldToScreen.AimLerp(rectTransform.position, gunTarget, GameController.aimLerp);
  63.         }
  64.  
  65.         //Назначаем координату положения прицела на экране
  66.         rectTransform.position = gunTarget;
  67.  
  68.     }
  69.  
  70.     private void OnDestroy()
  71.     {
  72.         //Debug.Log("DestroyEventController");
  73.  
  74.         if (EventController.Singleton != null)
  75.         {
  76.             EventController.Singleton.d_SetNewModul -= SetNewModul;
  77.             EventController.Singleton.d_ModulClear -= ModulClear;
  78.         }
  79.     }
  80.  
  81.     private void SetNewModul(ModulBasys modul)
  82.     {
  83.         //Debug.Log("Call delegate SetNewModul " + modul.modulType.ToString());
  84.         if (modul.modulType == modulType)
  85.         {
  86.             currentModul = modul;
  87.         }
  88.     }
  89.  
  90.     //Вызывается через делагат из наследников класса modulBasys
  91.     private void ModulClear(ModulBasys modul)
  92.     {
  93.         if (currentModul != null)
  94.         {
  95.             if (currentModul.idModul == modul.idModul)
  96.             {
  97.                 currentModul = null;
  98.             }
  99.         }
  100.     }
  101.  
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement