using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using GCGame.Table; using UnityEngine.EventSystems; // 夺旗战右侧mini地图 public class CaptureFlagMiniMapCtr : MonoBehaviour { private static CaptureFlagMiniMapCtr instance; public static CaptureFlagMiniMapCtr Instance { get { return instance; } } private Dictionary itemDic = new Dictionary(); // public Image prefab; // 地图图片 public float scale; // 3维 -> 2维 长度比 public Animator anim; public Button switchBtn; // 切换至组队信息按钮 public Button showBtn; // 隐藏按钮 public Button hideBtn; // 显示按钮 #region new private void Awake() { if (instance == null) { instance = this; } switchBtn.onClick.AddListener(OnSwitchOffBtnClick); showBtn.onClick.AddListener(OnShowOrHideBtnClick); hideBtn.onClick.AddListener(OnShowOrHideBtnClick); MissionDialogAndLeftTabsLogic.SetSwitch(UIInfo.CaptureFlagMiniMap); MissionDialogAndLeftTabsLogic.Instance().SetSwitchBtn(); } public void Show(int id, int camp) { if(itemDic.ContainsKey(id)) { LoadAssetBundle.Instance.SetImageSprite(itemDic[id], GetCampFlagSpriteName(camp)); } } private void OnDestroy() { if (instance != null) { instance = null; } MissionDialogAndLeftTabsLogic.m_SwitchIndex = null; } private void OnSwitchOffBtnClick() { //anim.Play("SwitchOff"); if (MissionDialogAndLeftTabsLogic.Instance() == null) { UIManager.ShowUI(UIInfo.MissionInfoController, delegate (bool bSuccess, object param) { if (bSuccess == false) return; MissionDialogAndLeftTabsLogic.SetSwitch(UIInfo.CaptureFlagMiniMap); MissionDialogAndLeftTabsLogic.Instance().SetSwitchBtn(); }); } else { MissionDialogAndLeftTabsLogic.Instance().HideMissionDialog(true); MissionDialogAndLeftTabsLogic.SetSwitch(UIInfo.CaptureFlagMiniMap); MissionDialogAndLeftTabsLogic.Instance().SetSwitchBtn(); } UIManager.CloseUI(UIInfo.CaptureFlagMiniMap); } private void OnShowOrHideBtnClick() { var clipInfo = anim.GetCurrentAnimatorStateInfo(0); if (clipInfo.IsName("SwitchOn") || clipInfo.IsName("Show")) { anim.Play("Hide"); } else if (clipInfo.IsName("Hide")) { anim.Play("Show"); } } private string GetCampFlagSpriteName(int camp) { string result = ""; switch (camp) { case 0: result = "flagZhong"; break; case 1: result = "flagTian"; break; case 2: result = "flagDi"; break; case 3: result = "flagRen"; break; } return result; } #endregion public RawImage MapImage; public GameObject m_pointMainPlayer; public GameObject m_pointDot; private MapInterface m_mapInterface = new MapInterface(); void OnEnable() { anim.Play("SwitchOn"); Games.Events.EventDispatcher.Instance.Add(Games.Events.EventId.OnChangeSceneOver, OnChangeScene); if (MissionDialogAndLeftTabsLogic.Instance() != null) { MissionDialogAndLeftTabsLogic.Instance().HideMissionDialog(false); MissionDialogAndLeftTabsLogic.SetSwitch(UIInfo.CaptureFlagMiniMap); } } void OnDisable() { Games.Events.EventDispatcher.Instance.Remove(Games.Events.EventId.OnChangeSceneOver, OnChangeScene); if (MissionDialogAndLeftTabsLogic.Instance() != null) MissionDialogAndLeftTabsLogic.Instance().HideMissionDialog(true); } public void OnChangeScene(object param) { if (MissionDialogAndLeftTabsLogic.Instance() != null) { MissionDialogAndLeftTabsLogic.Instance().HideMissionDialog(false); MissionDialogAndLeftTabsLogic.SetSwitch(UIInfo.CaptureFlagMiniMap); } } public void OpenMissionLeftTab() { if (MissionDialogAndLeftTabsLogic.Instance() == null) { UIManager.ShowUI(UIInfo.MissionInfoController, delegate (bool bSuccess, object param) { if (bSuccess == false) return; MissionDialogAndLeftTabsLogic.SetSwitch(UIInfo.CaptureFlagMiniMap); MissionDialogAndLeftTabsLogic.Instance().SetSwitchBtn(); UIManager.CloseUI(UIInfo.CaptureFlagMiniMap); }); } else { MissionDialogAndLeftTabsLogic.Instance().HideMissionDialog(true); MissionDialogAndLeftTabsLogic.SetSwitch(UIInfo.CaptureFlagMiniMap); MissionDialogAndLeftTabsLogic.Instance().SetSwitchBtn(); UIManager.CloseUI(UIInfo.CaptureFlagMiniMap); } } //点击场景地图图片时的寻路 public void OnSceneMapClick(PointerEventData eventData) { if (m_mapInterface != null) { var mainPlayer = Singleton.Instance.MainPlayer; if (mainPlayer != null) { if (mainPlayer.isAutoCombat) { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{9009}")); return; } var movePos = m_mapInterface.ScreenPosToScenePos(eventData.position); if (movePos == null) mainPlayer.StopMove(); else mainPlayer.MainPlayMoveToPos(movePos.Value); } } } void Start() { if (null == SceneMapFix.Instance()) { ResourceManager.InstantiateResource("Prefab/Logic/SceneMapFix", "SceneMapFix"); } Tab_SceneClass sceneInfo = TableManager.GetSceneClassByID(GameManager.gameManager.RunningScene, 0); if (sceneInfo == null) return; if (m_mapInterface == null) m_mapInterface = new MapInterface(); m_mapInterface.Init(MapImage.rectTransform, null, null, null, null); m_mapInterface.InitNavPointPrefab(m_pointDot); if (MapImage != null && string.IsNullOrEmpty(sceneInfo.SceneMapTexture) == false) { m_mapInterface.SetMapImage(sceneInfo.SceneMapTexture, MapImage); } mainPlayRect = m_pointMainPlayer.GetComponent(); } public void Update() { MainPlayerPos(); if (m_mapInterface != null) { m_mapInterface.UpdateNavPoint(); } } private void CaptureFlagInit() { var tab = TableManager.GetCrossSerFlagPoint().Values; itemDic.Clear(); foreach (var kv in tab) { if (kv != null) { Image newOne = Instantiate(prefab); newOne.transform.SetParent(MapImage.rectTransform); newOne.transform.localScale = Vector3.one; newOne.gameObject.SetActive(true); Vector3 tabPos = new Vector3(kv.BornPosX, 0.0f, kv.BornPosZ); var newPos = SceneMapFix.Instance().ScenePosToMapPosVec3(tabPos, MapImage.rectTransform); newOne.GetComponent().anchoredPosition = newPos; itemDic[kv.Id] = newOne; Show(kv.Id, kv.BornCampIndex); } } } private RectTransform mainPlayRect; public void MainPlayerPos() { if (m_pointMainPlayer != null && Singleton.Instance.MainPlayer != null && SceneMapFix.Instance() != null) { Vector3 newPos = SceneMapFix.Instance().ScenePosToMapPosVec3(Singleton.Instance.MainPlayer.Position, MapImage.rectTransform); mainPlayRect.anchoredPosition3D = newPos; mainPlayRect.transform.SetAsLastSibling(); } } public void UpdateFlag(SynCrossSerFlagInfo info) { if (itemDic.Count == 0) { CaptureFlagInit(); } for (int i = 0; i < info.pointInfo.Count; ++i) { Show(info.pointInfo[i].Index, info.pointInfo[i].CampIndex); } } }