Ejemplo n.º 1
0
        void Update()
        {
            if (dataLoadOver)
            {
                //根据按键更新showGUI
                if (Input.GetKeyDown(switchGUIKey))
                {
                    showGUI = !showGUI;
                }
                //根据showGUI更新GUI的显示
                if (showGUI && !ui_StarMapToolsBasePanel.activeSelf || !showGUI && ui_StarMapToolsBasePanel.activeSelf)
                {
                    ui_StarMapToolsBasePanel.SetActive(!ui_StarMapToolsBasePanel.activeSelf);
                }
                //核心内容
                if (showGUI)
                {
                    //判断是否处于新建游戏的状态
                    if (UIRoot.instance.galaxySelect.starmap.galaxyData != null)
                    {
                        if (SearchNext)
                        {
                            LoadResAmount.isOn = false;
                            UIRoot.instance.galaxySelect.Rerand();
                        }
                        //更新数据
                        if (galaxy != UIRoot.instance.galaxySelect.starmap.galaxyData)
                        {
                            TitleText.text = "新游戏模式";
                            galaxy         = UIRoot.instance.galaxySelect.starmap.galaxyData;
                            StarList.ClearOptions();
                            ResultList.ClearOptions();
                            foreach (StarData star in galaxy.stars)
                            {
                                StarList.options.Add(new Dropdown.OptionData(star.name));
                            }
                            StarList.value = -1;
                            StarList.RefreshShownValue();
                            if (SearchNext)
                            {
                                SearchButton.onClick.Invoke();
                            }
                        }
                    }
                    //判断是否处于游戏中
                    else if (GameMain.galaxy != null)
                    {
                        SearchNext = false;
                        //更新数据
                        if (galaxy != GameMain.galaxy)
                        {
                            TitleText.text = "读档模式";
                            galaxy         = GameMain.galaxy;
                            StarList.ClearOptions();
                            ResultList.ClearOptions();
                            foreach (StarData star in galaxy.stars)
                            {
                                StarList.options.Add(new Dropdown.OptionData(star.name));
                            }
                            StarList.value = -1;
                            StarList.RefreshShownValue();
                        }
                        //传送功能
                        if (Input.GetKeyDown(tpKey))
                        {
                            object target = galaxy.StarById(StarList.value + 1);
                            GameMain.data.ArriveStar((StarData)target);
                            if (PlanetList.value > 0)
                            {
                                target = ((StarData)target).planets[PlanetList.value - 1];
                            }
                            StartCoroutine(wait(target));
                        }
                    }
                    //等待数据加载
                    else if (TitleText.text != "等待数据")
                    {
                        TitleText.text = "等待数据";
                        StarList.ClearOptions();
                        PlanetList.ClearOptions();
                        ResultList.ClearOptions();
                        InfoText.text = "";
                        SearchNext    = false;
                    }
                    if (loadingStarData)
                    {
                        var star = galaxy.StarById(StarList.value + 1);
                        if (star.loaded || !LoadResAmount.isOn)
                        {
                            loadingStarData = false;
                        }
                        PlanetList.value = -1;
                        PlanetList.RefreshShownValue();
                    }
                }
            }
            //加载数据
            else if (UIRoot.instance.overlayCanvas.transform != null && GameMain.instance != null)
            {
                //加载UI
                ui_StarMapToolsBasePanel = GameObject.Instantiate(prefab_StarMapToolsBasePanel, UIRoot.instance.overlayCanvas.transform);
                ui_StarMapToolsBasePanel.transform.Find("TitleText").gameObject.AddComponent <Drag>();
                ui_StarMapToolsBasePanel.SetActive(false);
                //获取控件
                TitleText        = ui_StarMapToolsBasePanel.transform.Find("TitleText").GetComponent <Text>();
                StarList         = ui_StarMapToolsBasePanel.transform.Find("StarList").GetComponent <Dropdown>();
                PlanetList       = ui_StarMapToolsBasePanel.transform.Find("PlanetList").GetComponent <Dropdown>();
                InfoText         = ui_StarMapToolsBasePanel.transform.Find("InfoText").GetComponent <InputField>();
                LoadResAmount    = ui_StarMapToolsBasePanel.transform.Find("LoadResAmount").GetComponent <Toggle>();
                OptionsList      = ui_StarMapToolsBasePanel.transform.Find("OptionsList").GetComponent <ScrollRect>();
                SearchNextToggle = ui_StarMapToolsBasePanel.transform.Find("SearchNextToggle").GetComponent <Toggle>();
                DysonLuminoText  = ui_StarMapToolsBasePanel.transform.Find("DysonLuminoText").GetComponent <InputField>();
                DistanceText     = ui_StarMapToolsBasePanel.transform.Find("DistanceText").GetComponent <InputField>();
                ResultList       = ui_StarMapToolsBasePanel.transform.Find("ResultList").GetComponent <Dropdown>();
                SearchButton     = ui_StarMapToolsBasePanel.transform.Find("SearchButton").GetComponent <Button>();
                var TempToggle = OptionsList.content.Find("TempToggle").GetComponent <Toggle>();
                //获取数据
                var TempStarTypes        = starSearcher.AllStarTypes;
                var TempPlanteTypes      = starSearcher.AllPlanteTypes;
                var TempSingularityTypes = starSearcher.AllSingularityTypes;
                var TempVeinTypes        = starSearcher.AllVeinTypes;
                //各种选项的列表
                var StarTypesToggleList        = new List <Toggle>();
                var PlanteTypesToggleList      = new List <Toggle>();
                var SingularityTypesToggleList = new List <Toggle>();
                var VeinTypesToggleList        = new List <Toggle>();
                //实例化
                for (int i = 0; i < TempStarTypes.Count; i++)
                {
                    var toggle = GameObject.Instantiate <Toggle>(TempToggle, TempToggle.transform.parent).GetComponent <RectTransform>();
                    toggle.Find("Label").GetComponent <Text>().text = TempStarTypes[i];
                    toggle.GetComponent <Toggle>().isOn             = true;
                    toggle.anchorMax = new Vector2((float)0.25, (float)(1 - i * 0.1));
                    toggle.anchorMin = new Vector2(0, (float)(1 - (i + 1) * 0.1));
                    toggle.gameObject.SetActive(true);
                    StarTypesToggleList.Add(toggle.GetComponent <Toggle>());
                }
                for (int i = 0; i < TempPlanteTypes.Count; i++)
                {
                    var toggle = GameObject.Instantiate <Toggle>(TempToggle, TempToggle.transform.parent).GetComponent <RectTransform>();
                    toggle.Find("Label").GetComponent <Text>().text = TempPlanteTypes[i];
                    toggle.anchorMax = new Vector2((float)0.5, (float)(1 - i * 0.1));
                    toggle.anchorMin = new Vector2((float)0.25, (float)(1 - (i + 1) * 0.1));
                    toggle.gameObject.SetActive(true);
                    PlanteTypesToggleList.Add(toggle.GetComponent <Toggle>());
                }
                for (int i = 0; i < TempSingularityTypes.Count; i++)
                {
                    var toggle = GameObject.Instantiate <Toggle>(TempToggle, TempToggle.transform.parent).GetComponent <RectTransform>();
                    toggle.Find("Label").GetComponent <Text>().text = TempSingularityTypes[i];
                    toggle.anchorMax = new Vector2((float)0.75, (float)(1 - i * 0.1));
                    toggle.anchorMin = new Vector2((float)0.5, (float)(1 - (i + 1) * 0.1));
                    toggle.gameObject.SetActive(true);
                    SingularityTypesToggleList.Add(toggle.GetComponent <Toggle>());
                }
                for (int i = 0; i < TempVeinTypes.Count; i++)
                {
                    var toggle = GameObject.Instantiate <Toggle>(TempToggle, TempToggle.transform.parent).GetComponent <RectTransform>();
                    toggle.Find("Label").GetComponent <Text>().text = TempVeinTypes[i];
                    toggle.anchorMax = new Vector2(1, (float)(1 - i * 0.1));
                    toggle.anchorMin = new Vector2((float)0.75, (float)(1 - (i + 1) * 0.1));
                    toggle.gameObject.SetActive(true);
                    VeinTypesToggleList.Add(toggle.GetComponent <Toggle>());
                }
                //切换恒星事件
                StarList.onValueChanged.AddListener(delegate {
                    PlanetList.ClearOptions();
                    if (StarList.value >= 0 && StarList.value < galaxy.starCount)
                    {
                        var star = galaxy.StarById(StarList.value + 1);
                        if (LoadResAmount.isOn && UIRoot.instance.galaxySelect.starmap.galaxyData != null && !star.loaded)
                        {
                            star.Load();
                        }
                        PlanetList.options.Add(new Dropdown.OptionData("恒星"));
                        foreach (PlanetData planet in star.planets)
                        {
                            PlanetList.options.Add(new Dropdown.OptionData(planet.name));
                        }
                        PlanetList.value = -1;
                        PlanetList.RefreshShownValue();
                    }
                });
                //切换星球事件
                PlanetList.onValueChanged.AddListener(delegate {
                    var star = galaxy.StarById(StarList.value + 1);
                    if (PlanetList.value > 0 && PlanetList.value <= star.planetCount)
                    {
                        var planet       = star.planets[PlanetList.value - 1];
                        var info         = planet.name + "的信息:\n";
                        info            += "词条:" + planet.singularityString + "\n";//词条
                        info            += "类型:" + planet.typeString + "\n";
                        string waterType = "未知";
                        switch (planet.waterItemId)
                        {
                        case -1:
                            waterType = "熔岩";
                            break;

                        case 0:
                            waterType = "无";
                            break;

                        default:
                            waterType = LDB.ItemName(planet.waterItemId);
                            break;
                        }
                        info += "海洋类型:" + waterType + "\n";
                        if (planet.type != EPlanetType.Gas && planet.veinSpotsSketch != null)
                        {
                            info += "矿物信息:" + "\n";
                            for (int i = 0; i < LDB.veins.Length; i++)
                            {
                                var name      = LDB.veins.dataArray[i].name;
                                object amount = planet.veinAmounts[i + 1];
                                if (planet.veinSpotsSketch[i + 1] == 0)
                                {
                                    amount = "无";
                                }
                                else if ((long)amount == 0)
                                {
                                    if (!LoadResAmount.isOn)
                                    {
                                        amount = "有";
                                    }
                                    else if (UIRoot.instance.galaxySelect.starmap.galaxyData != null)
                                    {
                                        amount          = "正在加载";
                                        loadingStarData = true;
                                    }
                                    else
                                    {
                                        amount = "未加载,靠近后显示";
                                    }
                                }
                                else if (i + 1 == 7)
                                {
                                    amount = (long)amount * (double)VeinData.oilSpeedMultiplier + " /s";
                                }
                                info += "    " + name + ":" + amount + "\n";
                            }
                        }
                        InfoText.text = info;
                    }
                    else if (PlanetList.value == 0)
                    {
                        var info = star.name + "星系的信息:" + (loadingStarData?"正在加载":"") + "\n";
                        info    += "恒星类型:" + star.typeString + "\n";
                        info    += "星球数量:" + star.planetCount + "\n";
                        info    += "光度:" + star.dysonLumino.ToString() + "\n";
                        info    += "距离初始星系恒星:" + ((star.uPosition - galaxy.StarById(1).uPosition).magnitude / 2400000.0).ToString() + "光年\n";
                        info    += "星球列表:";
                        foreach (PlanetData planet in star.planets)
                        {
                            info += "-" + planet.typeString + "  " + planet.singularityString;
                        }
                        info += "\n矿物信息:" + "\n";
                        for (int i = 0; i < LDB.veins.Length; i++)
                        {
                            var name      = LDB.veins.dataArray[i].name;
                            object amount = star.GetResourceAmount(i + 1);
                            if (star.GetResourceSpots(i + 1) == 0)
                            {
                                amount = "无";
                            }
                            else if ((long)amount == 0)
                            {
                                if (!LoadResAmount.isOn)
                                {
                                    amount = "有";
                                }
                                else if (UIRoot.instance.galaxySelect.starmap.galaxyData != null)
                                {
                                    amount          = "正在加载";
                                    loadingStarData = true;
                                }
                                else
                                {
                                    amount = "未加载,靠近后显示";
                                }
                            }
                            else if (i + 1 == 7)
                            {
                                amount = (long)amount * (double)VeinData.oilSpeedMultiplier + " /s";
                            }
                            info += "    " + name + ":" + amount + "\n";
                        }
                        InfoText.text = info;
                    }
                });
                //搜索事件
                SearchButton.onClick.AddListener(delegate {
                    SearchNext = false;
                    starSearcher.galaxyData = galaxy;
                    starSearcher.Clear();
                    float.TryParse(DysonLuminoText.text == "" ? "0":DysonLuminoText.text, out starSearcher.dysonLumino);
                    float.TryParse(DistanceText.text == ""?"1000": DistanceText.text, out starSearcher.distance);
                    foreach (Toggle toggle in StarTypesToggleList)
                    {
                        if (toggle.isOn)
                        {
                            var typeString = toggle.transform.Find("Label").GetComponent <Text>().text;
                            starSearcher.StarTypes.Add(typeString);
                        }
                    }
                    foreach (Toggle toggle in PlanteTypesToggleList)
                    {
                        if (toggle.isOn)
                        {
                            var typeString = toggle.transform.Find("Label").GetComponent <Text>().text;
                            starSearcher.PlanteTypes.Add(typeString);
                        }
                    }
                    foreach (Toggle toggle in SingularityTypesToggleList)
                    {
                        if (toggle.isOn)
                        {
                            var typeString = toggle.transform.Find("Label").GetComponent <Text>().text;
                            starSearcher.SingularityTypes.Add(typeString);
                        }
                    }
                    foreach (Toggle toggle in VeinTypesToggleList)
                    {
                        if (toggle.isOn)
                        {
                            var typeString = toggle.transform.Find("Label").GetComponent <Text>().text;
                            starSearcher.VeinTypes.Add(typeString);
                        }
                    }
                    SerachResult = starSearcher.Search();
                    ResultList.ClearOptions();
                    foreach (StarData star in SerachResult)
                    {
                        ResultList.options.Add(new Dropdown.OptionData(star.name));
                    }
                    ResultList.value = -1;
                    ResultList.RefreshShownValue();
                    if (SerachResult.Count == 0 && SearchNextToggle.isOn)
                    {
                        SearchNext = true;
                    }
                });
                //切换搜索结果事件
                ResultList.onValueChanged.AddListener(delegate {
                    StarList.value = SerachResult[ResultList.value].index;
                    StarList.RefreshShownValue();
                });
                dataLoadOver = true;
            }
        }