Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using UnityEngine.UI;
- public class UI_GunAimController : MonoBehaviour
- {
- [Header("Позиция оружия относительно робота")]
- [SerializeField] ModulType modulType;
- [Header("Image прицела, который нужно вкл/откл")]
- [SerializeField] Image gunCrosshairImage;
- [Header("RectTransform прицела, который нужно перемещать на экране")]
- [SerializeField] private RectTransform rectTransform;
- [Header("Текущий модуль оружия")]
- [SerializeField] private ModulBasys currentModul;
- [Header("Максимальный угол, для отключения image")]
- [SerializeField] private float maxAngle;
- private void Awake()
- {
- EventController.Singleton.d_SetNewModul += SetNewModul;
- EventController.Singleton.d_ModulClear += ModulClear;
- }
- private void OnEnable()
- {
- gunCrosshairImage = GetComponent<Image>();
- }
- private void LateUpdate()
- {
- if (currentModul == null)
- {
- gunCrosshairImage.enabled = false;
- return;
- }
- DrawGunCrosshair(currentModul.GetGunTarget());
- }
- private void DrawGunCrosshair(Vector3 gunTarget)
- {
- //Отключаем изображение прицела если
- //Текущий модуль не включен
- if (currentModul.ModulStatus != ModulStatus.On)
- {
- gunCrosshairImage.enabled = false;
- return;
- }
- //угол между вектором камеры вперед и вектором модуля вперед больше заданной величины
- if (UI_WorldToScreen.CheckAngle(maxAngle, EventController.PlayerDirectionForward, currentModul.GetDirectionForward()) == false)
- {
- gunCrosshairImage.enabled = false;
- return;
- }
- gunCrosshairImage.enabled = true;
- //Получаем экранную координату положения цели
- gunTarget = UI_WorldToScreen.SetScreenPosition(gunTarget, 0);
- //Склаживаем движение прицела по экрану
- if (GameController.aimLerp != 0)
- {
- gunTarget = UI_WorldToScreen.AimLerp(rectTransform.position, gunTarget, GameController.aimLerp);
- }
- //Назначаем координату положения прицела на экране
- rectTransform.position = gunTarget;
- }
- private void OnDestroy()
- {
- //Debug.Log("DestroyEventController");
- if (EventController.Singleton != null)
- {
- EventController.Singleton.d_SetNewModul -= SetNewModul;
- EventController.Singleton.d_ModulClear -= ModulClear;
- }
- }
- private void SetNewModul(ModulBasys modul)
- {
- //Debug.Log("Call delegate SetNewModul " + modul.modulType.ToString());
- if (modul.modulType == modulType)
- {
- currentModul = modul;
- }
- }
- //Вызывается через делагат из наследников класса modulBasys
- private void ModulClear(ModulBasys modul)
- {
- if (currentModul != null)
- {
- if (currentModul.idModul == modul.idModul)
- {
- currentModul = null;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement