123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- using System;
- using UnityEngine;
- using UnityEngine.UI;
- namespace HQFPSWeapons.UserInterface
- {
- public class InteractionInterface : UserInterfaceBehaviour
- {
- [BHeader("GENERAL", true)]
- [SerializeField]
- private Animator m_MainAnimator = null;
- [SerializeField]
- private Animator m_SwapAnimator = null;
- [Space]
- [SerializeField]
- private Text m_MainText = null;
- [Space]
- [SerializeField]
- [Group]
- private WeaponSwappingModule m_WeaponSwapping = new WeaponSwappingModule();
- private RaycastData m_RaycastData;
- private ItemPickup m_ItemPickup;
- public override void OnPostAttachment()
- {
- Player.RaycastData.AddChangeListener(OnPlayerRaycastChanged);
- Player.EquippedItem.AddChangeListener(ChangeVisibilityOfSwapIcon);
- }
- private void OnPlayerRaycastChanged(RaycastData raycastData)
- {
- bool show = raycastData != null && raycastData.IsInteractive;
- m_RaycastData = raycastData;
- if (show)
- {
- m_MainAnimator.SetBool("Show", true);
- if (m_WeaponSwapping.SwapIcon != null)
- {
- bool enableSwapUI = false;
- m_MainText.text = m_RaycastData.InteractiveObject.InteractionText;
- // Current item
- SaveableItem currentItem = Player.EquippedItem.Get();
- if (currentItem != null && Player.ItemIsSwappable.Try(currentItem))
- {
- // Detected item
- ItemPickup pickup = m_RaycastData.InteractiveObject as ItemPickup;
-
- //Make sure the item is swappable and check if the inventory is full
- enableSwapUI = pickup != null && Player.ItemIsSwappable.Try(pickup.ItemInstance) &&
- Player.Inventory.GetContainerWithFlags(pickup.TargetContainers).ContainerIsFull();
- if (enableSwapUI)
- {
- m_ItemPickup = pickup;
- m_ItemPickup.NeedToSwap = true;
- m_WeaponSwapping.EquippedItemImg.sprite = Player.EquippedItem.Val.Data.Icon;
- m_WeaponSwapping.GroundItemImg.sprite = m_ItemPickup.ItemInstance.Data.Icon;
- }
- }
- EnableSwapUI(enableSwapUI);
- }
- }
- else
- {
- m_MainAnimator.SetBool("Show", false);
- m_SwapAnimator.SetBool("Show", false);
- if (m_ItemPickup != null)
- {
- m_ItemPickup.NeedToSwap = false;
- m_ItemPickup = null;
- }
- }
- }
- private void ChangeVisibilityOfSwapIcon(SaveableItem item)
- {
- bool enable = (item != null);
- if(enable)
- m_WeaponSwapping.EquippedItemImg.sprite = item.Data.Icon;
- if(Player.RaycastData != null)
- EnableSwapUI(enable);
- }
- private void Update()
- {
- if (m_ItemPickup != null)
- UpdateSwapFill(m_ItemPickup.InterractionProgress);
- }
- private void EnableSwapUI(bool enable)
- {
- if (Player.RaycastData.Val != null)
- {
- if (Player.RaycastData.Val.IsInteractive)
- {
- m_MainAnimator.SetBool("Show", !enable);
- m_SwapAnimator.SetBool("Show", enable);
- }
- }
- else
- {
- m_MainAnimator.SetBool("Show", false);
- m_SwapAnimator.SetBool("Show", false);
- }
- if (m_ItemPickup != null && enable == false)
- m_ItemPickup.NeedToSwap = false;
- }
- private void UpdateSwapFill(float amount)
- {
- m_WeaponSwapping.SwapIcon.fillAmount = amount * (1 / m_ItemPickup.SwapTime);
- }
- #region Internal
- #pragma warning disable 0649
- [Serializable]
- private struct WeaponSwappingModule
- {
- public Image SwapIcon;
- public Image EquippedItemImg;
- public Image GroundItemImg;
- }
- #endregion
- }
- }
|