//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, September 06, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using TableConfig; using System; namespace Snxxz.UI { public class WorldMapAreaBehaviour : MonoBehaviour { [SerializeField] GameObject m_Conainter; public GameObject container { get { return m_Conainter; } } [SerializeField] BoundedDrag m_BoundedDrag; [SerializeField] PointerDownUp m_MapButton; [SerializeField] ScaleTween m_ScaleTween; [SerializeField] Image m_MapBackGround; [SerializeField] Text m_AreaName; [SerializeField] Text m_AreaLevel; [SerializeField] Text m_AreaCamp; [SerializeField] Transform m_Locked; [SerializeField] Transform m_PlayerHead; [SerializeField] MaterialsContainer m_Materials; [SerializeField] PressTip m_PressTip; [SerializeField] WorldMapUnLockTip m_UnLockTip; [SerializeField] Transform m_NewUnLockArrowPoint; [SerializeField] RectTransform m_NewUnLockTip; public Transform newUnLockArrowPoint { get { return m_NewUnLockArrowPoint; } } public Transform playerHead { get { return m_PlayerHead; } } WorldMapArea m_MapArea; float downTime = 0f; MapModel model { get { return ModelCenter.Instance.GetModel(); } } TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel(); } } private void Awake() { m_MapButton.AddPointerDownListener(OnPointerDown); m_MapButton.AddPointerUpListener(OnPointerUp); m_MapButton.AddPointerClickListener(OnPointerClick); } public void Init(WorldMapArea _area) { m_MapArea = _area; m_ScaleTween.SetStartState(); DrawArea(); m_PressTip.enabled = !model.IsMapUnlocked(m_MapArea.id); if (m_NewUnLockTip != null) { m_NewUnLockTip.gameObject.SetActive(m_MapArea.id != model.newUnlockedMap && model.newUnlockMapTip == m_MapArea.id); } CheckAchievementGuide(); } public void SetMaterial(string _materialName) { m_MapBackGround.material = m_Materials.GetMaterial(_materialName); } public void BeginUnLockShow() { StartCoroutine("Co_UnLockShow"); } private void DrawArea() { try { var unLocked = model.IsMapUnlocked(m_MapArea.id); var mapConfig = Config.Instance.Get(m_MapArea.id); m_AreaName.text = mapConfig.Name; m_AreaLevel.text = mapConfig.LV.ToString(); m_Locked.gameObject.SetActive(!unLocked); m_MapBackGround.material = unLocked ? m_Materials.GetMaterial("Normal") : m_Materials.GetMaterial("Gray"); } catch (Exception ex) { DebugEx.Log(ex); } } private void OnDisable() { StopAllCoroutines(); } private void OnPointerDown() { m_ScaleTween.Play(false); downTime = Time.time; var mapId = m_MapArea.id; if (!model.IsMapUnlocked(mapId)) { m_UnLockTip.Display(mapId); } } private void OnPointerUp() { m_ScaleTween.Play(true); } private void OnPointerClick() { var isUnLocked = model.IsMapUnlocked(m_MapArea.id); if (isUnLocked || Time.time - downTime < 0.3f) { if (isUnLocked) { if (m_MapArea.id == PlayerDatas.Instance.baseData.MapID) { SysNotifyMgr.Instance.ShowTip("NowWorldMap"); } else { if (PlayerDatas.Instance.hero != null) { PlayerDatas.Instance.hero.StopAll(); } MapTransferUtility.Instance.Clear(); model.RequestMapTransport(m_MapArea.id); } } } } IEnumerator Co_UnLockShow() { m_MapBackGround.material = m_Materials.GetMaterial("Lerp"); var timer = 0f; while (timer < 1f) { timer += Time.deltaTime; var t = Mathf.Clamp01(timer); m_MapBackGround.material.SetFloat("_GrayScale", t); yield return null; } m_MapBackGround.material = m_Materials.GetMaterial("Normal"); } private void CheckAchievementGuide() { if (AchievementGoto.guideAchievementId != 0) { var config = Config.Instance.Get(AchievementGoto.guideAchievementId); if (config.Type == 37 && config.Condition[0] == m_MapArea.id) { var guideEffect = AchievementGuideEffectPool.Require(4); guideEffect.transform.SetParentEx(m_MapButton.transform, Vector3.zero, Vector3.zero, Vector3.one); } } } } }