//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, April 11, 2018 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections.Generic; using System; namespace Snxxz.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()); } } 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 pools = new Dictionary(); 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(); 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(); } } }