コード例 #1
0
 public void SeasonalChangeUpdate(TerrainInfo info)
 {
     if (info.AreSeasonsChanging)
     {
         // if total elapsed time
         if (ElapsedTimeTotal < TotalSeasonChangeDuration)
         {
             var dTime = Time.deltaTime;
             ElapsedTimeTotal     += dTime;
             ElapsedTimePerSeason += dTime;
         }
         else
         {
             info.AreSeasonsChanging = false;
             ElapsedTimeTotal        = 0.0f;
             ElapsedTimePerSeason    = 0.0f;
             info.CurrentSeason      = SeasonType.kSpring;
             AssignSplatMap.DoSplat(info, info.CurrentSeason, SeasonAmmount);
             UpdateBiomeContent(info, info.CurrentSeason);
             info.ContentGenerator.PlaceNature(info);
             Debug.Log($"SEASON TRANSITION END {info.CurrentSeason}");
             return;
         }
         if (ElapsedTimePerSeason >= SeasonTimeLength)
         {
             Debug.LogFormat("Changing season from {0} to {1}", (SeasonType)info.CurrentSeason, (SeasonType)info.CurrentSeason + 1);
             info.CurrentSeason = info.CurrentSeason + 1;
             UpdateBiomeContent(info, info.CurrentSeason);
             AssignSplatMap.DoSplat(info, info.CurrentSeason);
             info.ContentGenerator.PlaceNature(info);
             ElapsedTimePerSeason = 0.0f;
         }
     }
 }
コード例 #2
0
 // A lot of stuff can be paralelized, stuff is decoupled for clarity when developing, in the end will be re-facced so shit that can get run paralel will
 public void GenerateTerrainOnDemand()
 {
     TerrainInfo.HeightMap = NoiseGeneration.GenerateTerrain(TerrainInfo);
     TerrainInfo._Terrain.terrainData.SetHeights(0, 0, TerrainInfo.HeightMap);
     TerrainInfo.TemperatureMap = NoiseGeneration.GenerateTemperatureMap(TerrainInfo.TerrainWidth, TerrainInfo.TerrainHeight, TerrainInfo.HeightMap);
     TerrainInfo.MoistureMap    = NoiseGeneration.GenerateMoistureMap(TerrainInfo.TerrainWidth, TerrainInfo.TerrainHeight, TerrainInfo.HeightMap);
     ApplyErosion();
     AssignSplatMap.DoSplat(TerrainInfo);
     TerrainInfo.BiomeMap = BiomeGeneration.GenerateBiomeMap(TerrainInfo);
     ContentManager.InitializeBiomePlacementObjects(TerrainInfo);
     ContentGenerator.GenerateBiomeContent(TerrainInfo);
 }
コード例 #3
0
 // A lot of stuff can be paralelized, stuff is decoupled for clarity when developing, in the end will be re-facced so shit that can get run paralel will
 public void GenerateTerrainOnDemand(bool onlyUseTerrainParameteters = false)
 {
     TerrainInfo.HeightMap = NoiseGeneration.GenerateTerrain(TerrainInfo);
     TerrainInfo._Terrain.terrainData.SetHeights(0, 0, TerrainInfo.HeightMap);
     if (TerrainInfo.GenerateTerrain)
     {
         TerrainInfo.TemperatureMap = NoiseGeneration.GenerateTemperatureMap(TerrainInfo.TerrainWidth, TerrainInfo.TerrainHeight, TerrainInfo.HeightMap, TerrainInfo);
         TerrainInfo.MoistureMap    = NoiseGeneration.GenerateMoistureMap(TerrainInfo.TerrainWidth, TerrainInfo.TerrainHeight, TerrainInfo.HeightMap);
     }
     if (!onlyUseTerrainParameteters)
     {
         ApplyErosion();
         TerrainInfo.BiomeMap = BiomeGeneration.GenerateBiomeMap(TerrainInfo);
         var RoadList = RoadGenerator.GenerateRoad(TerrainInfo, SplineScript);
         AssignSplatMap.DoSplat(TerrainInfo);
         ContentManager.InitializeBiomePlacementObjects(TerrainInfo);
         ContentGenerator.PlaceHousesNearRoads(RoadList, TerrainInfo, ContentManager.GetParentContentObject());
         ContentGenerator.GenerateBiomeContent(TerrainInfo);
     }
 }
コード例 #4
0
    public void DrawNoiseParameterGUI(TerrainInfo info, Dictionary <string, bool> EditorWidgetFoldouts)
    {
        EditorWidgetFoldouts["TerrainGenerationWidget"] = EditorGUILayout.Foldout(EditorWidgetFoldouts["TerrainGenerationWidget"], "TerrainGenerationWidget");
        if (EditorWidgetFoldouts["TerrainGenerationWidget"])
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("DebugPlane coloring");
            SerializedNoiseParameter.TerrainTextureType = (TextureType)EditorGUI.EnumPopup(EditorGUILayout.GetControlRect(), SerializedNoiseParameter.TerrainTextureType);
            GUILayout.EndHorizontal();
            var noiseScale = EditorGUI.FloatField(EditorGUILayout.GetControlRect(), "Noise Scale", SerializedNoiseParameter.NoiseScale);
            SerializedNoiseParameter.NoiseScale = noiseScale <= 0 ? 0.0001f : noiseScale;
            var baseFrequency = EditorGUI.FloatField(EditorGUILayout.GetControlRect(), "Base Frequecny", SerializedNoiseParameter.BaseFrequency);
            SerializedNoiseParameter.BaseFrequency = baseFrequency <= 0 ? 0.0001f : baseFrequency;
            var persistance = EditorGUI.FloatField(EditorGUILayout.GetControlRect(), "Persistance", SerializedNoiseParameter.Persistance);
            SerializedNoiseParameter.Persistance = persistance <= 0 ? 0.0001f : persistance;
            var lacunarity = EditorGUI.FloatField(EditorGUILayout.GetControlRect(), "Lacunarity", SerializedNoiseParameter.Lacunarity);
            SerializedNoiseParameter.Lacunarity = lacunarity <= 0 ? 0.0001f : lacunarity;
            var octaves = EditorGUI.IntField(EditorGUILayout.GetControlRect(), "Number of octaves", SerializedNoiseParameter.NumberOfOctaves);
            SerializedNoiseParameter.NumberOfOctaves     = octaves <= 0 ? 1 : octaves;
            SerializedNoiseParameter.Seed                = EditorGUI.TextField(EditorGUILayout.GetControlRect(), "Seed", SerializedNoiseParameter.Seed);
            SerializedNoiseParameter.UserOffset          = EditorGUI.Vector2Field(EditorGUILayout.GetControlRect(), "User Offset", SerializedNoiseParameter.UserOffset);
            SerializedNoiseParameter.GlobalNoiseAddition = EditorGUI.FloatField(EditorGUILayout.GetControlRect(), "Global noise add", SerializedNoiseParameter.GlobalNoiseAddition);
            SerializedNoiseParameter.CustomFunction      = (CustomFunctionType)EditorGUI.EnumPopup(EditorGUILayout.GetControlRect(), SerializedNoiseParameter.CustomFunction);
            if (SerializedNoiseParameter.CustomFunction == CustomFunctionType.kCustom)
            {
                var customExponent = EditorGUI.FloatField(EditorGUILayout.GetControlRect(), "Custom Exponent", SerializedNoiseParameter.CustomExponent);
                SerializedNoiseParameter.CustomExponent = customExponent <= 0 ? 0.0001f : customExponent;
            }
            GUILayout.BeginHorizontal();
            GUILayout.Label("Pick a generation type");
            info.GenerationType = (GenerationType)EditorGUI.EnumPopup(EditorGUILayout.GetControlRect(), info.GenerationType);
            GUILayout.EndHorizontal();

            if (GUI.Button(EditorGUILayout.GetControlRect(), "Paint the terrain!"))
            {
                if (info.GenerationType != GenerationType.kSingleRun)
                {
                    Debug.LogWarningFormat("WARNING: Parameter _GenerationType is {0}, needs to be kSingleRun (can't paint terrain in runtime), changing to single run.", info.GenerationType.ToString());
                    info.GenerationType = GenerationType.kSingleRun;
                }
                AssignSplatMap.DoSplat(info);
            }
            GUILayout.Label("Saved noise presets");
            GUILayout.BeginHorizontal(GUILayout.Width(250));
            var lastIndex = CurrentSelectedIndexNoise;
            CurrentSelectedIndexNoise = EditorGUILayout.Popup(CurrentSelectedIndexNoise, AllNoiseParameterNames, GUILayout.Width(250));
            DeleteFailsafe            = lastIndex != CurrentSelectedIndexNoise ? 0 : DeleteFailsafe;
            if (GUILayout.Button(string.Format("Delete selected preset ({0})", DeleteFailsafe), GUILayout.MaxWidth(200)))
            {
                if (DeleteFailsafe == 2)
                {
                    DeleteFailsafe = 0;
                    SerializationManager.DeleteNoiseParameter(AllNoiseParameterNames[CurrentSelectedIndexNoise]);
                    SerializedNoiseParameters.RemoveAt(CurrentSelectedIndexNoise);
                    TryGeneratingSavedNoiseParameters(info, false);
                }
                else
                {
                    DeleteFailsafe++;
                }
            }
            GUILayout.EndHorizontal();
            if (GUI.Button(EditorGUILayout.GetControlRect(), "Load preset"))
            {
                TryGeneratingSavedNoiseParameters(info, true);
            }
            EditorGUI.LabelField(EditorGUILayout.GetControlRect(), "Terrain parameter serializer, saves the current terrain preset configuration.");
            NoisePresetName = EditorGUI.TextField(EditorGUILayout.GetControlRect(), "Terrain preset name: ", NoisePresetName);
            if (GUI.Button(EditorGUILayout.GetControlRect(), "Save preset"))
            {
                SerializedNoiseParameter.NoiseParameterName = NoisePresetName;
                SerializationManager.SaveNoiseParameters(NoisePresetName, SerializedNoiseParameter);
                TryGeneratingSavedNoiseParameters(info, false);
            }
        }
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        SetCorrectNoiseParams(SerializedNoiseParameter, ref info);
        EditorPrefs.SetInt("ParameterPresetNoiseIdx", CurrentSelectedIndexNoise);
    }