//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, September 06, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System; namespace vnxbqy.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; MapAssetDownLoadProgress mapAssetDownLoadProgress; 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.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 = MapConfig.Get(m_MapArea.id); m_AreaName.text = mapConfig.Name; m_AreaLevel.text = mapConfig.LV.ToString(); m_Locked.SetActive(!unLocked); m_MapBackGround.material = unLocked ? m_Materials.GetMaterial("Normal") : m_Materials.GetMaterial("Gray"); } catch (Exception ex) { DebugEx.Log(ex); } } private void OnDisable() { if (mapAssetDownLoadProgress != null) { mapAssetDownLoadProgress.OnComplete(null); InGameDownLoad.Instance.RegisterMapAssetDownLoadOk(this.m_MapArea.id, () => { var config = MapConfig.Get(this.m_MapArea.id); ConfirmCancel.ShowPopConfirm( Language.Get("Mail101"), Language.Get("LoadMap1", config.Name), () => { model.RequestMapTransport(this.m_MapArea.id); } ); }); } 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(); var assetDownLoadProgress = InGameDownLoad.Instance.GetMapAssetDownLoadProgress(m_MapArea.id); if (assetDownLoadProgress < 1f) { if (mapAssetDownLoadProgress == null) { var behaviour = UIUtility.CreateWidget("MapAssetDownLoadProgress", "MapAssetDownLoadProgress"); mapAssetDownLoadProgress = behaviour.GetComponent(); behaviour.transform.SetParentEx(m_Conainter.transform, Vector3.zero, Vector3.zero, Vector3.one); } InGameDownLoad.Instance.UnRegisterMapAssetDownLoadOk(); mapAssetDownLoadProgress.mapId = m_MapArea.id; mapAssetDownLoadProgress.OnComplete(() => { model.RequestMapTransport(m_MapArea.id); }); if (InGameDownLoad.Instance.state == InGameDownLoad.State.DownLoad) { SysNotifyMgr.Instance.ShowTip("MapAssetDowning"); } else { InGameDownLoad.Instance.TryDownLoad(InGameDownLoad.Dominant.Whole); } } else { 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 = SuccessConfig.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); } } } } }