//--------------------------------------------------------
|
// [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<Window>();
|
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<int, Dictionary<int, FunctionUnlockFlyObjectTarget>> targetDict = new Dictionary<int, Dictionary<int, FunctionUnlockFlyObjectTarget>>();
|
|
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<int, FunctionUnlockFlyObjectTarget> targets;
|
if (!targetDict.ContainsKey(typeToInt))
|
{
|
targetDict[typeToInt] = targets = new Dictionary<int, FunctionUnlockFlyObjectTarget>();
|
}
|
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;
|
}
|
|
}
|
|
}
|
|
|
|