using Games.Events; using GCGame.Table; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class SceneMapLogicUI : MonoBehaviour { private static SceneMapLogicUI instance; public static SceneMapLogicUI Instance { get { return instance; } } public class FriendNPCData { public int sceneId; public int roleBaseId; public string m_name; public string m_headIcon; public Vector3 m_pos; } public class ServerPointInfo { public int monsterId; public RectTransform rect; public Slider slider; public bool del; } public GameObject m_NpcPanel; public GameObject m_NpcPanelItem; public GameObject m_pointMainPlayer; public GameObject m_pointDot; public GameObject m_pointServer; public GameObject m_pointTransport; public GameObject m_pointNpc; public GameObject m_pointOtherPlayer; public GameObject m_pointEnemy; public GameObject m_pointFriend; public GameObject m_pointTeam; public GameObject m_pointMonster; public GameObject m_PointSameForce; public GameObject m_CallMonster; public Text SceneName; public RawImage m_SceneMapImage; public RectTransform m_MapRoot; private MapInterface m_mapInterface = new MapInterface(); private List serverPoints = new List(); int serverPoint = -1; float lastFreshTime = 0; int m_CurrentSceneID = -1; void Awake() { if(instance == null) { instance = this; } Hashtable calbackMoveparam6 = new Hashtable(); calbackMoveparam6["name"] = "OnServerPointFresh"; MessageEventCallBack fun6 = OnServerPointFresh; calbackMoveparam6.Add("callFun", fun6); Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.OnServerPointFresh, calbackMoveparam6); Games.Events.EventDispatcher.Instance.Add(Games.Events.EventId.UpdateUpRightSceneLineInfo, UpdateSceneLineInfo); Games.Events.EventDispatcher.Instance.Add(Games.Events.EventId.OnSceneMapFixLoadOver, InitNpcInfo); Games.Events.EventDispatcher.Instance.Add(Games.Events.EventId.OnServerPointFresh, UpdateOtherPoint); } void OnDestroy() { if(instance != null) { instance = null; } Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.OnServerPointFresh, "OnServerPointFresh"); Games.Events.EventDispatcher.Instance.Remove(Games.Events.EventId.OnServerPointFresh, UpdateOtherPoint); Games.Events.EventDispatcher.Instance.Remove(Games.Events.EventId.OnSceneMapFixLoadOver, InitNpcInfo); Games.Events.EventDispatcher.Instance.Remove(Games.Events.EventId.UpdateUpRightSceneLineInfo, UpdateSceneLineInfo); } public void UpdateOtherPoint(object args) { GC_RET_SAME_FORCE_TYPE_USERS_POS packet = (GC_RET_SAME_FORCE_TYPE_USERS_POS)args; if (packet == null || m_mapInterface==null) return; List poss = new List(); for(int i=0;i 0) { m_mapInterface.InitOtherPoint(m_CallMonster, m_PointSameForce); } _started = true; m_mapInterface.ResetNavPoint(); } public void InitNpcInfo(object args) { InitNpcInfo(); InitTransport(); } private bool _started; private void OnEnable() { if (_started) m_mapInterface.ResetNavPoint(); if(m_CurrentSceneID != GameManager.gameManager.m_RunningScene) { UpdateSceneLineInfo(null); } Games.Events.EventDispatcher.Instance.Dispatch(Games.Events.EventId.OpenMap, null); } public void OnServerPointFresh(Hashtable addparam, Hashtable sendparam) { if (sendparam.ContainsKey("data") == false) return; GC_SCENE_MONSTER_INFO packet = (GC_SCENE_MONSTER_INFO)sendparam["data"]; if (packet.HasParam) return; for(int i=0;i indexs = new List(); for(int i=0;i(); if (rect == null) return; pointObj.transform.SetParent(m_pointServer.transform.parent); pointObj.transform.localScale = m_pointServer.transform.localScale; if (rect != null) { rect.anchoredPosition3D = m_mapInterface.ScenePosToMapPosVec3(new Vector3(info.MonsterPosX / 100.0f,0, info.MonsterPosY / 100.0f)); } pointObj.SetActive(true); Image head = pointObj.GetComponent(); if(head != null) { Tab_CharModel charModel = TableManager.GetCharModelByID(roleBass.CharModelID, 0); if(charModel!=null) { LoadAssetBundle.Instance.SetImageSprite(head, charModel.HeadPic); } } Slider hpSlider = pointObj.GetComponentInChildren(); if(hpSlider != null) { hpSlider.value = (info.MonsterHP * 1.0f) / (info.MonsterMaxHP * 1.0f); } Text Name = pointObj.GetComponentInChildren(); if (Name != null) { Name.text = roleBass.Name; } ServerPointInfo serverPoint = new ServerPointInfo(); serverPoint.monsterId = info.MonsterId; serverPoint.rect = rect; serverPoint.slider = hpSlider; serverPoint.del = false; serverPoints.Add(serverPoint); } public void Update() { MainPlayerPos(); if (m_mapInterface != null) { m_mapInterface.UpdateMap(); m_mapInterface.UpdateNavPoint(); } if(serverPoint > 0) { if(Time.time - lastFreshTime > 0.5f) { lastFreshTime = Time.time; if(serverPoint == 1) { AskMonster(); } if (serverPoint == 2) { AskSameForce(); } } } } private void AskSameForce() { CG_REQ_SAME_FORCE_TYPE_USERS_POS req = (CG_REQ_SAME_FORCE_TYPE_USERS_POS)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_SAME_FORCE_TYPE_USERS_POS); req.Nilparam = 1; req.SendPacket(); } private void AskMonster() { CG_GUILD_UNION_MATCH_REQ req = (CG_GUILD_UNION_MATCH_REQ)PacketDistributed.CreatePacket(MessageID.PACKET_CG_GUILD_UNION_MATCH_REQ); req.SetParam(0); req.SetType((int)CG_GUILD_UNION_MATCH_REQ.UNION_MATCH_REQ.MONSTER_INFO); req.SendPacket(); } public void MainPlayerPos() { if(m_pointMainPlayer != null && Singleton.Instance.MainPlayer!=null && SceneMapFix.Instance()!=null) { RectTransform rect = m_pointMainPlayer.GetComponent(); Vector3 newPos = SceneMapFix.Instance().ScenePosToMapPosVec3(Singleton.Instance.MainPlayer.Position, m_MapRoot); rect.anchoredPosition3D = newPos; } } public void Click_Close() { m_NpcPanel.SetActive(false); UIManager.CloseUI(UIInfo.SceneMapRoot); } bool CanSwitchWorldMap() { if(GameManager.gameManager.PlayerDataPool.pvpIfo._PvpBattleSceneId == GameManager.gameManager.RunningScene) { return false; } return true; } public void Click_OpenWorldMap() { if(!CanSwitchWorldMap()) { GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{81002}")); return; } UIManager.CloseUI(UIInfo.SceneMapRoot); UIManager.ShowUI(UIInfo.WorldMapWindow); } public void InitTransport() { var teleTables = TableManager.GetTeleport().Values; foreach (var tele in teleTables) if (tele.SrcSceneID == GameManager.gameManager.RunningScene) { if (m_mapInterface == null) return; var point = new MapInterface.PointInfoData { m_name = tele.TeleportName, m_pos = Games.Scene.ActiveScene.GetTerrainPosition(new Vector3(tele.SrcPosX,0, tele.SrcPosZ)), m_cloneObj = m_pointTransport, }; m_mapInterface.ClonePoint(point); } } public void InitNpcInfo() { m_NPCPannels.AddRange(m_NPCCachePannels); m_NPCCachePannels.Clear(); for(int i=0;i< m_NPCPannels.Count;i++) { m_NPCPannels[i].SetActive(false); } var curTabSceneNPCDic = TableManager.GetSceneNpc().Values; foreach (var sceneNpcInfo in curTabSceneNPCDic) { if (sceneNpcInfo.SceneID == GameManager.gameManager.RunningScene) { Tab_RoleBaseAttr curRoleBase = TableManager.GetRoleBaseAttrByID(sceneNpcInfo.DataID, 0); if (curRoleBase != null) { if (curRoleBase.Camp == 1 && curRoleBase.IsShowInMap == 1) { FriendNPCData data = new FriendNPCData(); data.sceneId = sceneNpcInfo.SceneID; data.m_name = curRoleBase.Name; data.roleBaseId = curRoleBase.Id; data.m_headIcon = ""; Tab_CharModel modeTable = TableManager.GetCharModelByID(curRoleBase.CharModelID, 0); if (modeTable != null) { data.m_headIcon = modeTable.HeadPic; } data.m_pos = new Vector3(sceneNpcInfo.PosX, 0, sceneNpcInfo.PosZ); CreateNpcPoint(data); CreateNpcPanelItem(data); } CreateMonsterPoint(curRoleBase); } } } } //打开NPC列表面板 public void Click_OpenNpcPanel() { if (m_NpcPanel == null) return; if(m_NpcPanel.activeSelf) { m_NpcPanel.SetActive(false); return; } m_NpcPanel.SetActive(true); } List m_NPCCachePannels = new List(); List m_NPCPannels = new List(); //创建该场景中的NPC列表 public void CreateNpcPanelItem(FriendNPCData data) { if (m_NpcPanelItem == null) return; GameObject npcItem = null; if(m_NPCPannels.Count > 0) { npcItem = m_NPCPannels[0]; m_NPCPannels.RemoveAt(0); } if(npcItem==null) npcItem = UnityEngine.Object.Instantiate(m_NpcPanelItem) as GameObject; if (npcItem == null) return; m_NPCCachePannels.Add(npcItem); npcItem.SetActive(true); npcItem.transform.SetParent(m_NpcPanelItem.transform.parent, false); npcItem.transform.localScale = m_NpcPanelItem.transform.localScale; Transform childName = npcItem.transform.Find("name"); if(childName!=null) { Text name = childName.gameObject.GetComponent(); if (name != null) name.text = data.m_name; } Transform childHeadIcon = npcItem.transform.Find("headIcon"); if (childHeadIcon != null) { Image icon = childHeadIcon.gameObject.GetComponent(); if (icon != null) LoadAssetBundle.Instance.SetImageSprite(icon, data.m_headIcon); } Transform childIcon = npcItem.transform.Find("icon"); if (childIcon != null) { Tab_RoleBaseAttr curRoleBase = TableManager.GetRoleBaseAttrByID(data.roleBaseId, 0); if(curRoleBase!=null && curRoleBase.SceneNpcType>=0) { childIcon.gameObject.SetActive(true); Image icon = childIcon.gameObject.GetComponent(); if (icon != null) LoadAssetBundle.Instance.SetImageSprite(icon, GetNpcTypeSprite(curRoleBase.SceneNpcType)); } else { childIcon.gameObject.SetActive(false); } } Transform childButton = npcItem.transform.Find("Button"); if (childButton != null) { Button btn = childButton.gameObject.GetComponent