Files
JJBB/Assets/Project/Script/GUI/StroyCopy/CaptureFlagMiniMapCtr.cs

279 lines
8.7 KiB
C#
Raw Permalink Normal View History

2024-08-23 15:49:34 +08:00
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<int, Image> itemDic = new Dictionary<int, Image>(); //
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<ObjManager>.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<RectTransform>();
}
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<Image>(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<RectTransform>().anchoredPosition = newPos;
itemDic[kv.Id] = newOne;
Show(kv.Id, kv.BornCampIndex);
}
}
}
private RectTransform mainPlayRect;
public void MainPlayerPos()
{
if (m_pointMainPlayer != null && Singleton<ObjManager>.Instance.MainPlayer != null && SceneMapFix.Instance() != null)
{
Vector3 newPos = SceneMapFix.Instance().ScenePosToMapPosVec3(Singleton<ObjManager>.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);
}
}
}