예제 #1
0
        /// <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);
                        }
                    }
                }
            }
        }
예제 #2
0
        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();
        }
예제 #3
0
        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);
                    }
                }
            }
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        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);
            }
        }
예제 #6
0
        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 = "副";
                    }
                }
            }
        }
예제 #7
0
        /// <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);
        }
예제 #8
0
        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;
                    }
                }
            }
        }
예제 #9
0
        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;
        }
예제 #10
0
        /// <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);
            }
        }
예제 #11
0
        /// <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;
 }
예제 #13
0
        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();
        }