//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, April 11, 2018
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
using System.Collections.Generic;
|
using System;
|
|
namespace vnxbqy.UI
|
{
|
|
public class AchievementGuideEffect : MonoBehaviour
|
{
|
[SerializeField] UIEffect m_Effect;
|
|
public UIEffect effect { get { return m_Effect; } }
|
public int pattern { get; set; }
|
|
float overTime = float.MaxValue;
|
RectTransform m_RectTransform;
|
RectTransform rectTransform { get { return m_RectTransform ?? (m_RectTransform = this.transform as RectTransform); } }
|
|
Window m_Window;
|
Window window { get { return m_Window ?? (m_Window = this.GetComponentInParent<Window>()); } }
|
|
private void Awake()
|
{
|
WindowCenter.Instance.windowBeforeCloseEvent += OnWindowBeforeClose;
|
}
|
|
private void OnDestroy()
|
{
|
WindowCenter.Instance.windowBeforeCloseEvent -= OnWindowBeforeClose;
|
}
|
|
private void OnWindowBeforeClose(Window _window)
|
{
|
if (this.enabled && window == _window)
|
{
|
AchievementGoto.guideAchievementId = 0;
|
AchievementGoto.achievementType = 0;
|
AchievementGuideEffectPool.Recycle(this);
|
m_Window = null;
|
}
|
}
|
|
private void LateUpdate()
|
{
|
if (Input.GetMouseButtonDown(0))
|
{
|
var sp = Input.mousePosition;
|
if (RectTransformUtility.RectangleContainsScreenPoint(this.transform as RectTransform, sp, CameraManager.uiCamera))
|
{
|
overTime = Time.realtimeSinceStartup + 0.03f;
|
}
|
}
|
|
if (Input.GetMouseButtonUp(0))
|
{
|
var sp = Input.mousePosition;
|
if (RectTransformUtility.RectangleContainsScreenPoint(this.transform as RectTransform, sp, CameraManager.uiCamera))
|
{
|
if (Time.realtimeSinceStartup > overTime)
|
{
|
AchievementGoto.guideAchievementId = 0;
|
AchievementGoto.achievementType = 0;
|
AchievementGuideEffectPool.Recycle(this);
|
m_Window = null;
|
overTime = float.MaxValue;
|
}
|
}
|
}
|
}
|
|
}
|
|
public class AchievementGuideEffectPool
|
{
|
static Dictionary<int, GameObjectPoolManager.GameObjectPool> pools = new Dictionary<int, GameObjectPoolManager.GameObjectPool>();
|
|
public static AchievementGuideEffect Require(int _pattern)
|
{
|
GameObjectPoolManager.GameObjectPool pool = null;
|
if (!pools.ContainsKey(_pattern))
|
{
|
var prefab = UILoader.LoadPrefab(StringUtility.Contact("AchievementGuideEffect_", _pattern));
|
if (prefab != null)
|
{
|
pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
pools[_pattern] = pool;
|
}
|
}
|
else
|
{
|
pool = pools[_pattern];
|
}
|
|
if (pool != null)
|
{
|
var instance = pool.Request();
|
var guideEffect = instance.GetComponent<AchievementGuideEffect>();
|
guideEffect.pattern = _pattern;
|
guideEffect.enabled = true;
|
if (guideEffect.effect != null)
|
{
|
guideEffect.effect.enabled = true;
|
}
|
return guideEffect;
|
}
|
else
|
{
|
return null;
|
}
|
}
|
|
public static void Recycle(AchievementGuideEffect _guideEffect)
|
{
|
var pattern = _guideEffect.pattern;
|
GameObjectPoolManager.GameObjectPool pool;
|
if (pools.TryGetValue(pattern, out pool))
|
{
|
pool.Release(_guideEffect.gameObject);
|
_guideEffect.enabled = false;
|
if (_guideEffect.effect != null)
|
{
|
_guideEffect.effect.enabled = false;
|
}
|
}
|
}
|
|
public static void Clear()
|
{
|
foreach (var key in pools.Keys)
|
{
|
var pool = pools[key];
|
if (pool != null)
|
{
|
pool.Clear();
|
}
|
}
|
pools.Clear();
|
}
|
|
}
|
|
}
|
|
|
|