Example #1
0
    IEnumerator LoadingFile()
    {
        while (SavingMapProcess)
            yield return null;

        Undo.Current.Clear();

        bool AllFilesExists = true;
        string Error = "";
        if (!System.IO.Directory.Exists(FolderParentPath))
        {
            Error = "Map folder does not exist:\n" + FolderParentPath;
            Debug.LogWarning(Error);
            AllFilesExists = false;
        }

        if (AllFilesExists && !System.IO.File.Exists(LoadedMapFolderPath + ScenarioFileName + ".lua"))
        {
            AllFilesExists = SearchForScenario();

            if (!AllFilesExists)
            {
                Error = "Scenario.lua does not exist:\n" + LoadedMapFolderPath + ScenarioFileName + ".lua";
                Debug.LogWarning(Error);
            }
        }

        if (AllFilesExists)
        {
            string ScenarioText = System.IO.File.ReadAllText(LoadedMapFolderPath + ScenarioFileName + ".lua");

            if (!ScenarioText.StartsWith("version = 3") && ScenarioText.StartsWith("version ="))
            {
                AllFilesExists = SearchForScenario();

                if (!AllFilesExists)
                {
                    Error = "Wrong scenario file version. Should be 3, is " + ScenarioText.Remove(11).Replace("version =", "");
                    Debug.LogWarning(Error);
                }
            }

            if (AllFilesExists && !ScenarioText.StartsWith("version = 3"))
            {
                AllFilesExists = SearchForScenario();

                if (!AllFilesExists)
                {
                    Error = "Selected file is not a proper scenario.lua file. ";
                    Debug.LogWarning(Error);
                }
            }
        }

        if (AllFilesExists && !System.IO.File.Exists(EnvPaths.GamedataPath + "/env.scd"))
        {
            Error = "No source files in gamedata folder: " + EnvPaths.GamedataPath;
            Debug.LogWarning(Error);
            AllFilesExists = false;
        }

        if (AllFilesExists)
        {
            // Begin load
            LoadRecentMaps.MoveLastMaps(ScenarioFileName, FolderName, FolderParentPath);
            LoadingMapProcess = true;
            InfoPopup.Show(true, "Loading map...\n( " + ScenarioFileName + ".lua" + " )");
            EditMenu.gameObject.SetActive(true);
            Background.SetActive(false);
            yield return null;

            ScenarioLuaFile = new ScenarioLua();
            SaveLuaFile = new SaveLua();
            TablesLuaFile = new TablesLua();
            AsyncOperation ResUn = Resources.UnloadUnusedAssets();
            while (!ResUn.isDone)
            {
                yield return null;
            }

            // Scenario LUA
            if (ScenarioLuaFile.Load(FolderName, ScenarioFileName, FolderParentPath))
            {
                //Map Loaded
                MapCenterPoint = Vector3.zero;
                MapCenterPoint.x = (GetMapSizeX() / 20f);
                MapCenterPoint.z = -1 * (GetMapSizeY() / 20f);
            }

            CameraControler.Current.MapSize = Mathf.Max(ScenarioLuaFile.Data.Size[0], ScenarioLuaFile.Data.Size[1]);
            CameraControler.Current.RestartCam();

            InfoPopup.Show(true, "Loading map...\n(" + ScenarioLuaFile.Data.map + ")");
            yield return null;

            // SCMAP
            LoadScmapFile = HeightmapControler.StartCoroutine(ScmapEditor.Current.LoadScmapFile());
            System.GC.Collect();

            yield return LoadScmapFile;

            if(ScmapEditor.Current.map.VersionMinor == 0)
            {
                Error = "scmap file not loaded!\n" + MapLuaParser.Current.ScenarioLuaFile.Data.map;

                InfoPopup.Show(false);
                LoadingMapProcess = false;
                ResetUI();
                ReturnLoadingWithError(Error);

                yield return null;
                StopCoroutine(LoadingFileCoroutine);
            }

            CameraControler.Current.RestartCam();

            if (HeightmapControler.map.VersionMinor >= 60)
                EditMenu.MapInfoMenu.SaveAsFa.isOn = true;
            else
                EditMenu.MapInfoMenu.SaveAsSc.isOn = true;

            InfoPopup.Show(true, "Loading map...\n(" + ScenarioLuaFile.Data.save + ")");
            yield return null;

            if (loadSave)
            {
                // Save LUA
                SaveLuaFile.Load();
                SetSaveLua();
                System.GC.Collect();
                //LoadSaveLua();
                yield return null;

                Coroutine UnitsLoader = StartCoroutine(SaveLuaFile.LoadUnits());
                yield return UnitsLoader;
            }

            // Load Props
            if (LoadProps)
            {
                PropsMenu.gameObject.SetActive(true);

                PropsMenu.AllowBrushUpdate = false;
                PropsMenu.StartCoroutine(PropsMenu.LoadProps());
                while (PropsMenu.LoadingProps)
                {
                    InfoPopup.Show(true, "Loading map...\n( Loading props " + PropsMenu.LoadedCount + "/" + ScmapEditor.Current.map.Props.Count + ")");
                    yield return null;
                }
                System.GC.Collect();
                PropsMenu.gameObject.SetActive(false);
            }

            if (LoadDecals)
            {
                DecalsMenu.gameObject.SetActive(true);

                //DecalsMenu.AllowBrushUpdate = false;
                DecalsMenu.StartCoroutine(DecalsMenu.LoadDecals());
                while (DecalsInfo.LoadingDecals)
                {
                    InfoPopup.Show(true, "Loading map...\n( Loading decals " + DecalsMenu.LoadedCount + "/" + ScmapEditor.Current.map.Decals.Count + ")");
                    yield return null;
                }
                System.GC.Collect();
                DecalsMenu.gameObject.SetActive(false);
            }

            if (TablesLuaFile.Load(FolderName, ScenarioFileName, FolderParentPath))
            {
                //Map Loaded
            }

            int ParsedVersionValue = AppMenu.GetVersionControll(FolderName);

            if(ParsedVersionValue > 0)
            {
                ScenarioLuaFile.Data.map_version = ParsedVersionValue;
            }

            InfoPopup.Show(false);
            WindowStateSever.WindowStateSaver.ChangeWindowName(FolderName);
            LoadingMapProcess = false;

            RenderMarkersConnections.Current.UpdateConnections();

            EditMenu.Categorys[0].GetComponent<MapInfo>().UpdateFields();

            MapLuaParser.Current.UpdateArea();

            GenericInfoPopup.ShowInfo("Map successfully loaded!\n" + FolderName + "/" + ScenarioFileName + ".lua");
        }
        else
        {
            ResetUI();
            ReturnLoadingWithError(Error);

        }
    }