//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, October 10, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using System; using UnityEngine.EventSystems; namespace vnxbqy.UI { public class FunctionUnlockFlyObjectTarget : MonoBehaviour, IPointerClickHandler { [SerializeField] FunctionUnlockType m_UnLockType = FunctionUnlockType.Treasure; [SerializeField] int[] m_Ids; [SerializeField] Transform m_ContainerLocked; [SerializeField] Transform m_ContainerUnLocked; [SerializeField] bool m_MainWinUnfold = false; public static event Action IsPlayerUiEffect; public bool mainWinUnFold { get { return m_MainWinUnfold; } } [SerializeField] int m_SkillGroup = 0; public int skillGroup { get { return m_SkillGroup; } } [SerializeField] UIEffect m_Effect; Window parentWindow; bool waitforShow = false; float showOverTime = 0f; public int[] IdList { get { return m_Ids; } set { m_Ids = value; } } public FunctionUnlockType Z_UnLockType { get { return m_UnLockType; } set { m_UnLockType = value; } } public void OnPointerClick(PointerEventData eventData) { for (int i = 0; i < m_Ids.Length; i++) { NewUnLockFunctionEffectRecorder.Remove(m_Ids[i]); } if (m_Effect != null) { m_Effect.Stop(); } } public void Prepare() { if (m_ContainerLocked != null) { m_ContainerLocked.SetActive(true); } if (m_ContainerUnLocked != null) { m_ContainerUnLocked.SetActive(false); } waitforShow = true; showOverTime = Time.time + 10f; } public void ResponseFunctionUnLock() { waitforShow = false; if (m_ContainerLocked != null) { m_ContainerLocked.SetActive(false); } if (m_ContainerUnLocked != null) { m_ContainerUnLocked.SetActive(true); } if (m_Effect != null) { for (int i = 0; i < m_Ids.Length; i++) { NewUnLockFunctionEffectRecorder.Record(m_Ids[i]); } m_Effect.Play(); } EffectMgr.Instance.PlayUIEffect(1033, 5500, this.transform, false); } private void Awake() { if (m_Ids == null) { return; } FunctionUnlockFlyObjectTargetCenter.Register(m_UnLockType, m_Ids, this); WindowCenter.Instance.windowAfterOpenEvent += OnAfterWindowOpen; } private void OnAfterWindowOpen(Window _window) { if (parentWindow == null || _window != parentWindow) { return; } for (int i = 0; i < m_Ids.Length; i++) { if (NewUnLockFunctionEffectRecorder.Contain(m_Ids[i])) { if (m_Effect != null) { m_Effect.Play(); } if (IsPlayerUiEffect != null) { IsPlayerUiEffect(); } break; } } } private void OnEnable() { parentWindow = this.GetComponentInParent(); if (m_Ids == null) { return; } for (int i = 0; i < m_Ids.Length; i++) { if (NewUnLockFunctionEffectRecorder.Contain(m_Ids[i])) { if (m_Effect != null && !m_Effect.IsPlaying) { m_Effect.Play(); if (IsPlayerUiEffect != null) { IsPlayerUiEffect(); } } break; } } } private void OnDestroy() { WindowCenter.Instance.windowAfterOpenEvent -= OnAfterWindowOpen; FunctionUnlockFlyObjectTargetCenter.UnRegister(m_UnLockType, m_Ids, this); } private void LateUpdate() { if (waitforShow && Time.time > showOverTime) { waitforShow = false; if (m_ContainerLocked != null && m_ContainerLocked.gameObject.activeInHierarchy) { m_ContainerLocked.SetActive(false); } if (m_ContainerUnLocked != null && !m_ContainerUnLocked.gameObject.activeInHierarchy) { m_ContainerUnLocked.SetActive(true); } } } } public class FunctionUnlockFlyObjectTargetCenter { static Dictionary> targetDict = new Dictionary>(); public static void Register(FunctionUnlockType _type, int[] _ids, FunctionUnlockFlyObjectTarget _target) { if (_target != null) { var typeToInt = (int)_type; for (int i = 0; i < _ids.Length; i++) { Dictionary targets; if (!targetDict.ContainsKey(typeToInt)) { targetDict[typeToInt] = targets = new Dictionary(); } else { targets = targetDict[typeToInt]; } targets[_ids[i]] = _target; } } } public static void UnRegister(FunctionUnlockType _type, int[] _ids, FunctionUnlockFlyObjectTarget _target) { try { for (int i = 0; i < _ids.Length; i++) { var id = _ids[i]; if (_target == targetDict[(int)_type][id]) { targetDict[(int)_type][id] = null; } } } catch (Exception ex) { DebugEx.Log(ex); } } public static FunctionUnlockFlyObjectTarget GetTarget(FunctionUnlockType _type, int _id) { FunctionUnlockFlyObjectTarget target = null; try { target = targetDict[(int)_type][_id]; } catch (Exception ex) { DebugEx.Log(ex); } return target; } } }