少年修仙传客户端代码仓库
client_linchunjie
2018-08-27 d106f11e7f44c748f595da36e0cdfd54849649e6
System/WorldMap/WorldMapWin.cs
@@ -1,232 +1,231 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Wednesday, September 06, 2017
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using TableConfig;
namespace Snxxz.UI
{
    public class WorldMapWin : Window
    {
        [SerializeField] Button m_LocalMap;
        [SerializeField] Button m_Close;
        [SerializeField] BoundedDrag m_BoudedDrag;
        [SerializeField] AreaBehaviourTable[] m_AreaBehaviours;
        [SerializeField] ScaleTween m_ScaleTween;
        [SerializeField] Transform m_ContainerPlayerHead;
        [SerializeField] Image m_PlayerHead;
        [SerializeField] ScreenMoveTo m_UnLockBehaviour;
        [SerializeField] Transform m_EffectMask;
        [SerializeField] Transform m_ContainerNewUnLock;
        MapModel model { get { return ModelCenter.Instance.GetModel<MapModel>(); } }
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_LocalMap.AddListener(OpenLocalMap);
            m_Close.AddListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
            m_EffectMask.gameObject.SetActive(false);
            m_UnLockBehaviour.gameObject.SetActive(false);
            m_ContainerNewUnLock.gameObject.SetActive(false);
        }
        protected override void OnAfterOpen()
        {
            WindowCenter.Instance.CloseImmediately<MainInterfaceWin>();
            WindowCenter.Instance.CloseImmediately<KnapSackWin>();
        }
        protected override void OnPreClose()
        {
            model.wannaLookLocalMap = 0;
        }
        protected override void OnAfterClose()
        {
        }
        protected override void OnActived()
        {
            base.OnActived();
            Init();
        }
        public override void CloseClick()
        {
            base.CloseClick();
            if (!WindowJumpMgr.Instance.IsJumpState)
            {
                WindowCenter.Instance.Open<MainInterfaceWin>();
            }
        }
        void Init()
        {
            var worldMapAreaKeys = model.GetWorldMapAreas();
            var mapAreas = new List<WorldMapArea>();
            for (int i = 0; i < worldMapAreaKeys.Count; i++)
            {
                var key = worldMapAreaKeys[i];
                WorldMapArea area;
                if (model.TryGetWorldMapArea(key, out area))
                {
                    mapAreas.Add(area);
                }
            }
            var job = PlayerDatas.Instance.baseData.Job;
            m_PlayerHead.SetSprite(GeneralConfig.Instance.GetJobHeadPortrait(job, 0));
            WorldMapAreaBehaviour playerAtBehaviour = null;
            var currentMapId = PlayerDatas.Instance.baseData.MapID;
            for (int i = 0; i < m_AreaBehaviours.Length; i++)
            {
                var behaviourTable = m_AreaBehaviours[i];
                WorldMapArea area;
                if (FindData(int.Parse(behaviourTable.id), mapAreas, out area))
                {
                    behaviourTable.areaBehaviour.gameObject.SetActive(true);
                    behaviourTable.areaBehaviour.container.SetActive(true);
                    behaviourTable.areaBehaviour.Init(area);
                    if (behaviourTable.id == currentMapId.ToString())
                    {
                        playerAtBehaviour = behaviourTable.areaBehaviour;
                        m_ContainerPlayerHead.SetParentEx(behaviourTable.areaBehaviour.playerHead, Vector3.zero, Vector3.zero, Vector3.one);
                    }
                }
                else
                {
                    behaviourTable.areaBehaviour.gameObject.SetActive(false);
                    behaviourTable.areaBehaviour.container.SetActive(false);
                }
            }
            if (model.newUnLockedMap != 0)
            {
                StopCoroutine("Co_MapUnLockShow");
                StartCoroutine("Co_MapUnLockShow", model.newUnLockedMap);
                model.newUnLockedMap = 0;
            }
            else
            {
                EffectMgr.Instance.PlayUIEffect(1143, 3500, this.transform, false);
                if (playerAtBehaviour != null)
                {
                    var localPosition = -playerAtBehaviour.container.transform.localPosition.SetZ(0);
                    localPosition = new Vector3(Mathf.Clamp(localPosition.x, m_BoudedDrag.moveArea.Left, m_BoudedDrag.moveArea.Right),
                      Mathf.Clamp(localPosition.y, m_BoudedDrag.moveArea.Bottom, m_BoudedDrag.moveArea.Top));
                    m_BoudedDrag.currentPosition = m_BoudedDrag.destPosition = localPosition;
                }
                else
                {
                    m_BoudedDrag.currentPosition = m_BoudedDrag.destPosition = Vector3.zero;
                }
                m_BoudedDrag.actionable = false;
                m_ScaleTween.SetStartState();
                m_ScaleTween.Play(() =>
                {
                    m_BoudedDrag.currentScale = m_BoudedDrag.destScale = m_BoudedDrag.defaultScale;
                    m_BoudedDrag.actionable = true;
                });
            }
        }
        bool FindData(int _id, List<WorldMapArea> _areas, out WorldMapArea _area)
        {
            for (int i = 0; i < _areas.Count; i++)
            {
                var area = _areas[i];
                if (area.id == _id)
                {
                    _area = area;
                    return true;
                }
            }
            _area = default(WorldMapArea);
            return false;
        }
        IEnumerator Co_MapUnLockShow(int _mapId)
        {
            windowInfo.raycastTarget = false;
            var mapId = _mapId;
            WorldMapAreaBehaviour areaBehaviour = null;
            for (int i = 0; i < m_AreaBehaviours.Length; i++)
            {
                var behaviourTable = m_AreaBehaviours[i];
                if (behaviourTable.id == mapId.ToString())
                {
                    areaBehaviour = behaviourTable.areaBehaviour;
                }
            }
            if (areaBehaviour == null)
            {
                yield break;
            }
            m_EffectMask.gameObject.SetActive(true);
            EffectMgr.Instance.PlayUIEffect(1143, 3500, this.transform, false);
            yield return WaitingForSecondConst.WaitMS2000;
            areaBehaviour.SetMaterial("Lerp");
            var localPosition = -areaBehaviour.transform.localPosition.SetZ(0);
            localPosition = new Vector3(Mathf.Clamp(localPosition.x, m_BoudedDrag.moveArea.Left, m_BoudedDrag.moveArea.Right),
              Mathf.Clamp(localPosition.y, m_BoudedDrag.moveArea.Bottom, m_BoudedDrag.moveArea.Top));
            m_BoudedDrag.currentPosition = m_BoudedDrag.destPosition = localPosition;
            EffectMgr.Instance.PlayUIEffect(3053, 3500, areaBehaviour.transform, false);
            yield return WaitingForSecondConst.WaitMS1000;
            m_EffectMask.gameObject.SetActive(false);
            areaBehaviour.BeginUnLockShow();
            m_ContainerNewUnLock.gameObject.SetActive(true);
            m_ContainerNewUnLock.SetParentEx(areaBehaviour.newUnLockArrowPoint != null ? areaBehaviour.newUnLockArrowPoint : areaBehaviour.transform,
                Vector3.zero, Vector3.zero, Vector3.one);
            windowInfo.raycastTarget = true;
        }
        public void TestMapUnLockShow(int _mapId)
        {
            StopCoroutine("Co_MapUnLockShow");
            StartCoroutine("Co_MapUnLockShow", _mapId);
        }
        private void OpenLocalMap()
        {
            WindowCenter.Instance.Close<WorldMapWin>();
            WindowCenter.Instance.Open<LocalMapWin>();
        }
        [System.Serializable]
        class AreaBehaviourTable
        {
            public string id;
            public WorldMapAreaBehaviour areaBehaviour;
        }
    }
}
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Wednesday, September 06, 2017
//--------------------------------------------------------
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using TableConfig;
namespace Snxxz.UI
{
    public class WorldMapWin : Window
    {
        [SerializeField] Button m_LocalMap;
        [SerializeField] Button m_Close;
        [SerializeField] BoundedDrag m_BoudedDrag;
        [SerializeField] AreaBehaviourTable[] m_AreaBehaviours;
        [SerializeField] ScaleTween m_ScaleTween;
        [SerializeField] Transform m_ContainerPlayerHead;
        [SerializeField] Image m_PlayerHead;
        [SerializeField] ScreenMoveTo m_UnLockBehaviour;
        [SerializeField] Transform m_EffectMask;
        [SerializeField] Transform m_ContainerNewUnLock;
        MapModel model { get { return ModelCenter.Instance.GetModel<MapModel>(); } }
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            m_LocalMap.AddListener(OpenLocalMap);
            m_Close.AddListener(CloseClick);
        }
        protected override void OnPreOpen()
        {
            m_EffectMask.gameObject.SetActive(false);
            m_UnLockBehaviour.gameObject.SetActive(false);
            m_ContainerNewUnLock.gameObject.SetActive(false);
        }
        protected override void OnAfterOpen()
        {
            WindowCenter.Instance.CloseImmediately<MainInterfaceWin>();
            WindowCenter.Instance.CloseImmediately<KnapSackWin>();
        }
        protected override void OnPreClose()
        {
            model.wannaLookLocalMap = 0;
        }
        protected override void OnAfterClose()
        {
            if (!WindowJumpMgr.Instance.IsJumpState)
            {
                WindowCenter.Instance.Open<MainInterfaceWin>();
            }
        }
        protected override void OnActived()
        {
            base.OnActived();
            Init();
        }
        public override void CloseClick()
        {
            base.CloseClick();
        }
        void Init()
        {
            var worldMapAreaKeys = model.GetWorldMapAreas();
            var mapAreas = new List<WorldMapArea>();
            for (int i = 0; i < worldMapAreaKeys.Count; i++)
            {
                var key = worldMapAreaKeys[i];
                WorldMapArea area;
                if (model.TryGetWorldMapArea(key, out area))
                {
                    mapAreas.Add(area);
                }
            }
            var job = PlayerDatas.Instance.baseData.Job;
            m_PlayerHead.SetSprite(GeneralConfig.Instance.GetJobHeadPortrait(job, 0));
            WorldMapAreaBehaviour playerAtBehaviour = null;
            var currentMapId = PlayerDatas.Instance.baseData.MapID;
            for (int i = 0; i < m_AreaBehaviours.Length; i++)
            {
                var behaviourTable = m_AreaBehaviours[i];
                WorldMapArea area;
                if (FindData(int.Parse(behaviourTable.id), mapAreas, out area))
                {
                    behaviourTable.areaBehaviour.gameObject.SetActive(true);
                    behaviourTable.areaBehaviour.container.SetActive(true);
                    behaviourTable.areaBehaviour.Init(area);
                    if (behaviourTable.id == currentMapId.ToString())
                    {
                        playerAtBehaviour = behaviourTable.areaBehaviour;
                        m_ContainerPlayerHead.SetParentEx(behaviourTable.areaBehaviour.playerHead, Vector3.zero, Vector3.zero, Vector3.one);
                    }
                }
                else
                {
                    behaviourTable.areaBehaviour.gameObject.SetActive(false);
                    behaviourTable.areaBehaviour.container.SetActive(false);
                }
            }
            if (model.newUnLockedMap != 0)
            {
                StopCoroutine("Co_MapUnLockShow");
                StartCoroutine("Co_MapUnLockShow", model.newUnLockedMap);
                model.newUnLockedMap = 0;
            }
            else
            {
                EffectMgr.Instance.PlayUIEffect(1143, 3500, this.transform, false);
                if (playerAtBehaviour != null)
                {
                    var localPosition = -playerAtBehaviour.container.transform.localPosition.SetZ(0);
                    localPosition = new Vector3(Mathf.Clamp(localPosition.x, m_BoudedDrag.moveArea.Left, m_BoudedDrag.moveArea.Right),
                      Mathf.Clamp(localPosition.y, m_BoudedDrag.moveArea.Bottom, m_BoudedDrag.moveArea.Top));
                    m_BoudedDrag.currentPosition = m_BoudedDrag.destPosition = localPosition;
                }
                else
                {
                    m_BoudedDrag.currentPosition = m_BoudedDrag.destPosition = Vector3.zero;
                }
                m_BoudedDrag.actionable = false;
                m_ScaleTween.SetStartState();
                m_ScaleTween.Play(() =>
                {
                    m_BoudedDrag.currentScale = m_BoudedDrag.destScale = m_BoudedDrag.defaultScale;
                    m_BoudedDrag.actionable = true;
                });
            }
        }
        bool FindData(int _id, List<WorldMapArea> _areas, out WorldMapArea _area)
        {
            for (int i = 0; i < _areas.Count; i++)
            {
                var area = _areas[i];
                if (area.id == _id)
                {
                    _area = area;
                    return true;
                }
            }
            _area = default(WorldMapArea);
            return false;
        }
        IEnumerator Co_MapUnLockShow(int _mapId)
        {
            windowInfo.raycastTarget = false;
            var mapId = _mapId;
            WorldMapAreaBehaviour areaBehaviour = null;
            for (int i = 0; i < m_AreaBehaviours.Length; i++)
            {
                var behaviourTable = m_AreaBehaviours[i];
                if (behaviourTable.id == mapId.ToString())
                {
                    areaBehaviour = behaviourTable.areaBehaviour;
                }
            }
            if (areaBehaviour == null)
            {
                yield break;
            }
            m_EffectMask.gameObject.SetActive(true);
            EffectMgr.Instance.PlayUIEffect(1143, 3500, this.transform, false);
            yield return WaitingForSecondConst.WaitMS2000;
            areaBehaviour.SetMaterial("Lerp");
            var localPosition = -areaBehaviour.transform.localPosition.SetZ(0);
            localPosition = new Vector3(Mathf.Clamp(localPosition.x, m_BoudedDrag.moveArea.Left, m_BoudedDrag.moveArea.Right),
              Mathf.Clamp(localPosition.y, m_BoudedDrag.moveArea.Bottom, m_BoudedDrag.moveArea.Top));
            m_BoudedDrag.currentPosition = m_BoudedDrag.destPosition = localPosition;
            EffectMgr.Instance.PlayUIEffect(3053, 3500, areaBehaviour.transform, false);
            yield return WaitingForSecondConst.WaitMS1000;
            m_EffectMask.gameObject.SetActive(false);
            areaBehaviour.BeginUnLockShow();
            m_ContainerNewUnLock.gameObject.SetActive(true);
            m_ContainerNewUnLock.SetParentEx(areaBehaviour.newUnLockArrowPoint != null ? areaBehaviour.newUnLockArrowPoint : areaBehaviour.transform,
                Vector3.zero, Vector3.zero, Vector3.one);
            windowInfo.raycastTarget = true;
        }
        public void TestMapUnLockShow(int _mapId)
        {
            StopCoroutine("Co_MapUnLockShow");
            StartCoroutine("Co_MapUnLockShow", _mapId);
        }
        private void OpenLocalMap()
        {
            WindowCenter.Instance.Close<WorldMapWin>();
            WindowCenter.Instance.Open<LocalMapWin>();
        }
        [System.Serializable]
        class AreaBehaviourTable
        {
            public string id;
            public WorldMapAreaBehaviour areaBehaviour;
        }
    }
}