/// <summary> /// 读取json数据 /// </summary> /// <param name="mapArea"></param> private void ReadJsonData(GamingMapArea mapArea) { if (mapArea == null) { return; } EditorGamingMap gamingMap = EditorGamingMapData.LoadGamingMapFromJson(mapArea.GetGamingMapId()); if (gamingMap != null) { EditorArea[] areas = gamingMap.areaList; if (areas != null && areas.Length > 0) { for (int iArea = 0; iArea < areas.Length; iArea++) { EditorArea area = areas[iArea]; if (area.areaId == mapArea.m_AreaId) { mapArea.Init(area, this); } } } } }
public void Init(PlanetPanel panel, EditorArea[] areas, uint mapId) { m_Panel = panel; m_GamingMapId = mapId; m_PlanetAreas.Clear(); if (areas != null && areas.Length > 0) { EditorPlanet planet = m_Panel.m_Root.GetPreviewPlanet(mapId); if (planet != null) { m_MiniMapSize = planet.minimapSize; m_FixedStarRes = planet.bgmapRes; m_FixedStarScale = planet.bgmapScale.ToVector2(); if (m_FixedStarContainer != null) { m_FixedStarContainer.rectTransform.sizeDelta = m_FixedStarScale; } m_FixedStarPos = planet.bgmapPos.ToVector2(); m_FixedStarObj = StarMapEditorRoot.FindResAsset(m_FixedStarRes); } for (int iArea = 0; iArea < areas.Length; iArea++) { EditorArea editorArea = areas[iArea]; if (editorArea == null) { continue; } CreateElement(editorArea, planet); } } RefreshMap(); }
public void UpdateElements(EditorArea[] areas) { if (areas == null || areas.Length <= 0) { if (m_PlanetAreas != null && m_PlanetAreas.Count > 0) { for (int iPlanet = m_PlanetAreas.Count - 1; iPlanet >= 0; iPlanet--) { PlanetAreaElement areaElement = m_PlanetAreas[iPlanet]; if (areaElement != null) { if (areaElement.m_AreaData != null) { Debug.LogError("PlanetAreaContainer " + m_GamingMapId + " 删除了 " + areaElement.m_AreaData.areaId); } m_PlanetAreas.Remove(areaElement); GameObject.DestroyImmediate(areaElement.gameObject); } } } return; } for (int iArea = 0; iArea < areas.Length; iArea++) { EditorArea editorArea = areas[iArea]; PlanetAreaElement element = GetElement(editorArea.areaId); if (element == null) { CreateElement(editorArea, null); Debug.LogError("PlanetAreaContainer " + m_GamingMapId + " 新增了 " + editorArea.areaId); } else { element.Init(editorArea, null); } } if (m_PlanetAreas != null && m_PlanetAreas.Count > 0) { for (int iPlanet = m_PlanetAreas.Count - 1; iPlanet >= 0; iPlanet--) { PlanetAreaElement areaElement = m_PlanetAreas[iPlanet]; EditorArea editorArea = GetArea(areaElement.m_AreaData.areaId, areas); if (editorArea == null) { if (areaElement.m_AreaData != null) { Debug.LogError("PlanetAreaContainer " + m_GamingMapId + " 删除了 " + areaElement.m_AreaData.areaId); } m_PlanetAreas.Remove(areaElement); GameObject.DestroyImmediate(areaElement.gameObject); } } } }
/// <summary> /// 创建区域 /// </summary> /// <param name="area"></param> private GamingMapArea CreateArea(EditorArea area) { GameObject areaObj = new GameObject(); areaObj.transform.SetParent(transform); GamingMapArea mapArea = areaObj.AddComponent <GamingMapArea>(); mapArea.Init(area, this); return(mapArea); }
private void CreateElement(EditorArea editorArea, EditorPlanet planet) { GameObject planetArea = GameObject.Instantiate(m_Panel.m_PlanetAreaElementPrefab); planetArea.SetActive(true); planetArea.transform.SetParent(transform); planetArea.transform.localPosition = Vector3.zero; PlanetAreaElement planetElement = planetArea.GetComponent <PlanetAreaElement>(); if (planetElement != null) { EditorStarMapArea starMapArea = m_Panel.m_Root.GetPreviewArea(planet, editorArea.areaId); planetElement.Init(editorArea, starMapArea); m_PlanetAreas.Add(planetElement); } }
public void Init(EditorArea area, EditorStarMapArea starMapArea) { if (area == null) { return; } if (rectTrans == null) { rectTrans = GetComponent <RectTransform>(); } if (starMapArea != null) { m_Res = starMapArea.area_res; rectTrans.anchoredPosition = starMapArea.position.ToVector2(); m_Resobj = StarMapEditorRoot.FindResAsset(m_Res); } m_AreaData = area; gameObject.name = area.areaName; if (m_Tip == null) { Transform tipTrans = transform.Find("tip"); if (tipTrans != null) { m_Tip = tipTrans.gameObject.GetComponent <Text>(); } } if (m_Tip != null) { m_Tip.text = ""; EditorLeap[] leaps = area.leapList; if (leaps != null && leaps.Length > 0) { EditorLeap leap = leaps[0]; if (leap.leapType == (int)LeapType.Main) { m_Tip.text = "主"; } else if (leap.leapType == (int)LeapType.Child) { m_Tip.text = "副"; } } } }
/// <summary> /// 获取某个地图某个区域的Locations /// </summary> /// <param name="mapId"></param> /// <param name="areaId"></param> /// <returns></returns> public static EditorLocation[] GetEditorLocations(uint mapId, ulong areaId) { EditorGamingMap map = EditorGamingMapData.LoadGamingMapFromJson(mapId); if (map != null && map.areaList != null && map.areaList.Length > 0) { for (int iArea = 0; iArea < map.areaList.Length; iArea++) { EditorArea area = map.areaList[iArea]; if (area.areaId == areaId) { return(area.locationList); } } } return(null); }
private void SaveArea(EditorGamingMap gamingData, List <EditorStarMapArea> areaList, ref ulong areaId) { if (gamingData == null || gamingData.areaList == null || gamingData.areaList.Length <= 0) { return; } EditorArea[] editorAreas = gamingData.areaList; for (int iArea = 0; iArea < editorAreas.Length; iArea++) { EditorArea editorArea = editorAreas[iArea]; if (editorArea == null) { continue; } EditorStarMapArea starMapArea = new EditorStarMapArea(); areaList.Add(starMapArea); starMapArea.areaId = editorArea.areaId; starMapArea.areaType = editorArea.areaType; starMapArea.areaName = editorArea.areaName; PlanetAreaElement areaElement = m_PlanetPanel.GetElement(gamingData.gamingmapId, editorArea.areaId); if (areaElement != null) { starMapArea.area_res = areaElement.m_Res; starMapArea.childrenAreaList = editorArea.childrenAreaList; if (editorArea.leapList != null && editorArea.leapList.Length > 0) { starMapArea.area_leap_type = editorArea.leapList[0].leapType; } starMapArea.position = new EditorPosition2D(areaElement.GetPosition()); } if (editorArea.areaType == (int)AreaType.Titan) { if (areaId > 0) { Debug.LogError(gamingData.gamingmapName + "存在多个泰坦区域:" + editorArea.areaId); } else { areaId = editorArea.areaId; } } } }
private void RefreshMap() { float widthRate = m_MiniMapSize / m_ActMapWidth; float heightRate = m_MiniMapSize / m_ActMapHeight; if (m_PlanetAreas != null && m_PlanetAreas.Count > 0) { for (int iArea = 0; iArea < m_PlanetAreas.Count; iArea++) { PlanetAreaElement element = m_PlanetAreas[iArea]; EditorArea areaData = element.m_AreaData; if (areaData == null) { continue; } EditorPosition editorPosition = areaData.position; element.GetComponent <RectTransform>().anchoredPosition = new Vector2(editorPosition.x * widthRate, editorPosition.z * heightRate); //element.transform.position = new Vector3(editorPosition.x*widthRate- m_MiniMapWidth/2,editorPosition.z*heightRate - m_MiniMapHeight/2,0); } } if (m_MiniMap == null) { Transform miniMap = transform.Find("map"); RectTransform miniMapRect = null; if (miniMap == null) { GameObject imageObj = new GameObject("map"); imageObj.transform.SetParent(transform); Image image = imageObj.AddComponent <Image>(); image.color = new Color(1, 0, 0, 0.5f); miniMapRect = image.rectTransform; } else { miniMapRect = miniMap.GetComponent <RectTransform>(); } m_MiniMap = miniMapRect; } m_MiniMap.SetAsFirstSibling(); m_MiniMap.anchoredPosition3D = Vector3.zero; m_MiniMap.sizeDelta = m_MiniMapSize * Vector2.one; }
/// <summary> /// 初始化 /// </summary> /// <param name="area"></param> /// <param name="map"></param> public void Init(EditorArea area, GamingMap map) { m_GamingMap = map; m_AreaId = area.areaId; m_EditorArea = area; m_AreaName = area.areaName; m_AreaType = (AreaType)area.areaType; m_FatherArea = area.fatherArea; m_RelieveCreatue = area.relieveCreature; if (area.childrenAreaList != null && area.childrenAreaList.Length > 0) { m_ChildAreas = new List <ulong>(); for (int iChild = 0; iChild < area.childrenAreaList.Length; iChild++) { m_ChildAreas.Add(area.childrenAreaList[iChild]); } } else { m_ChildAreas = null; } //gameObject.name = string.Format("Area_{0}", m_AreaName); gameObject.name = string.Format("{0}_{1}", m_AreaName, m_AreaId); AreaSpawner areaSpawner = map.GetAreaSpawner(m_AreaId); AdjustTransform(areaSpawner); if (m_EditorArea != null) { CreateRoots(m_EditorArea); m_EditorArea = null; } if (area.sceneMissionReleaseId != null && area.sceneMissionReleaseId.Length > 0) { m_MissionList = new List <int>(area.sceneMissionReleaseId); } }
/// <summary> /// 创建根节点 /// </summary> private void CreateRoots(EditorArea area) { if (m_TreasureRoot == null || m_TreasureRoot.gameObject == null) { CreateTreasureRoot(); } else { m_TreasureRoot.Clear(false); } m_TreasureRoot.Init(area.treasureList); if (m_MineralRoot == null || m_MineralRoot.gameObject == null) { CreateMineralRoot(); } else { m_MineralRoot.Clear(false); } m_MineralRoot.Init(area.mineralList); //创建CreatureRoot if (m_CreatureRoot == null || m_CreatureRoot.gameObject == null) { GameObject creatureRootObj = new GameObject("CreatureRoot"); creatureRootObj.transform.SetParent(transform); creatureRootObj.transform.localPosition = Vector3.zero; creatureRootObj.transform.localRotation = Quaternion.identity; m_CreatureRoot = creatureRootObj.AddComponent <CreatureRoot>(); } else { m_CreatureRoot.Clear(false); } m_CreatureRoot.Init(area.creatureList, area.teleportList); //创建TeleportRoot if (m_TeleportRoot == null || m_TeleportRoot.gameObject == null) { GameObject teleportRootObj = new GameObject("TeleportRoot"); teleportRootObj.transform.SetParent(transform); teleportRootObj.transform.localPosition = Vector3.zero; teleportRootObj.transform.localRotation = Quaternion.identity; m_TeleportRoot = teleportRootObj.AddComponent <TeleportRoot>(); } else { m_TeleportRoot.Clear(false); } m_TeleportRoot.Init(area.teleportList, this); //创建LocationRoot if (m_LocationRoot == null || m_LocationRoot.gameObject == null) { GameObject locationRootObj = new GameObject("LocationRoot"); locationRootObj.transform.SetParent(transform); locationRootObj.transform.localPosition = Vector3.zero; locationRootObj.transform.localRotation = Quaternion.identity; m_LocationRoot = locationRootObj.AddComponent <LocationRoot>(); } else { m_LocationRoot.Clear(false); } m_LocationRoot.Init(area.locationList); //创建LeapRoot if (m_LeapRoot == null || m_LeapRoot.gameObject == null) { CreateLeapRoot(); } else { m_LeapRoot.Clear(false); } m_LeapRoot.Init(area.leapList); if (m_TriggerRoot == null || m_TriggerRoot.gameObject == null) { CreateTriggerRoot(); } else { m_TriggerRoot.Clear(false); } m_TriggerRoot.Init(area.triggerList); }
private void OnEnable() { m_Target = target as PlanetAreaElement; m_AreaData = m_Target.m_AreaData; }
public override void OnInspectorGUI() { EditorGUI.indentLevel = 0; GUILayout.BeginVertical("box"); if (m_Teleports != null && m_Teleports.Count > 0) { for (int iTeleport = 0; iTeleport < m_Teleports.Count; iTeleport++) { m_ShowTeleportPoup[iTeleport] = EditorGUILayout.Foldout(m_ShowTeleportPoup[iTeleport], m_ShowTeleportNames[iTeleport]); if (m_ShowTeleportPoup[iTeleport]) { EditorGUI.indentLevel = 1; int[] chanelList = m_Teleports[iTeleport].ChanelList; if (chanelList != null && chanelList.Length > 0) { GUILayout.BeginVertical("box"); if (m_Target.m_SelectLocation == null) { m_Target.m_SelectLocation = new List <TeleportRoot.TeleportInfo>(); } for (int iChanel = 0; iChanel < chanelList.Length; iChanel++) { GUILayout.BeginVertical("box"); TeleportChanelVO chanelVO = ConfigVO <TeleportChanelVO> .Instance.GetData(chanelList[iChanel]); if (chanelVO != null) { TeleportRoot.TeleportInfo info = m_Target.GetTeleportInfo(chanelVO.ID); if (info == null) { info = new TeleportRoot.TeleportInfo(chanelVO.ID, -1); m_Target.m_SelectLocation.Add(info); } EditorGUILayout.LabelField("通道ID", chanelList[iChanel].ToString()); EditorGamingMap gamingMap = EditorGamingMapData.LoadGamingMapFromJson(chanelVO.EndGamingMap); if (gamingMap != null) { EditorGUILayout.LabelField("终点地图", gamingMap.gamingmapName); EditorArea area = gamingMap.GetAreaByAreaId(chanelVO.EndGamingMapArea); if (area != null) { EditorGUILayout.LabelField("终点区域", area.areaName); } } EditorLocation[] locations = GamingMap.GetEditorLocations(chanelVO.EndGamingMap, chanelVO.EndGamingMapArea); if (locations != null && locations.Length > 0) { string[] m_LocationIdArray = null; List <string> locationIds = new List <string>(); for (int iLocation = 0; iLocation < locations.Length; iLocation++) { EditorLocation location = locations[iLocation]; if (location.locationType == (int)LocationType.TeleportIn) { string locationStr = string.Format("{0}_{1}", locations[iLocation].locationName, locations[iLocation].locationId); locationIds.Add(locationStr); } } m_LocationIdArray = locationIds.ToArray(); info.m_SelectIndex = EditorGUILayout.Popup("Location ID", info.m_SelectIndex, m_LocationIdArray); } } GUILayout.EndVertical(); } GUILayout.EndVertical(); } } } } GUILayout.EndVertical(); }