Example #1
0
        static void RenderGizmos(TerrainSettings resizer, GizmoType gizmoType)               // TODO remove this render gizmo stuff
        {
            Terrain     terrain     = resizer.GetComponent <Terrain>();
            TerrainData terrainData = terrain.terrainData;


            bool bAdjustPlane  = EditorPrefs.GetBool(PrefName_AdjustPlane, false);
            bool bAdjustHeight = EditorPrefs.GetBool(PrefName_AdjustHeight, false);
            bool bShowHalfSize = EditorPrefs.GetBool(PrefName_ShowHalfSize, false);

            // Border
            if (bAdjustPlane || bAdjustHeight)
            {
                DrawBox(terrain, Vector3.zero, terrainData.size, Color.white);
            }

            // Half size
            if (bAdjustPlane && bShowHalfSize)
            {
                float minX = terrainData.size.x * 0.25f;
                float minZ = terrainData.size.z * 0.25f;
                float maxX = terrainData.size.x - minX;
                float maxZ = terrainData.size.z - minZ;
                DrawBox(terrain, new Vector3(minX, 0, minZ), new Vector3(maxX, terrainData.size.y, maxZ), Color.yellow);
            }
        }
 public NoiseGenerator(TerrainSettings _settings)
 {
     job           = new ChunkNoiseJob();
     job.frequency = _settings.frequency;
     job.offset    = _settings.offset;
     job.noise     = new Noise(_settings.seed);
 }
Example #3
0
    //Create a list object of a new population that contains new indivduals defined by terrain settings
    public List <TerrainSettings> createPopulation(int populationToCreate, int mapSize)

    {
        //Setup starting varaibles
        List <TerrainSettings> population = new List <TerrainSettings>(); //Current Population

        //Create a new indivdual and add it to the population for every indivdual needed as specified by the 'populationToCreate' variable
        for (int x = 0; x < populationToCreate;)
        {
            //Setup the terrain settings object
            TerrainSettings terrainSettings = new TerrainSettings();

            //Set settings values
            terrainSettings.Width       = mapSize;
            terrainSettings.Height      = mapSize;
            terrainSettings.Depth       = randomInt(1, 50);
            terrainSettings.Scale       = randomFloat(0.0001f, 30.00f);
            terrainSettings.Seed        = randomInt(1, 10000);
            terrainSettings.Octaves     = randomInt(1, 10);
            terrainSettings.Persistance = randomFloat(0.01f, 1.00f);
            terrainSettings.Lacunarity  = randomFloat(0.01f, 20.00f);
            terrainSettings.OffsetX     = randomFloat(0.00f, 500.00f);
            terrainSettings.OffsetY     = randomFloat(0.00f, 500.00f);

            //Create terrain settings object
            population.Add(terrainSettings);
            x++;
        }
        return(population);
    }
Example #4
0
 private static TerrainData RemoveIslandsAndPeninsulas(TerrainData data, TerrainSettings settings)
 {
     for (int x = 0; x < data.xSize; x++)
     {
         for (int z = 0; z < data.zSize; z++)
         {
             if (!data.IsOceanTile(x, z))
             {
                 List <TileData> edgeAdjacentOcean = data.GetEdgeAdjacentTilesOfType(x, z, TileType.OceanFloor);
                 if (edgeAdjacentOcean.Count == 2)
                 {
                     Vector3 directionOne = edgeAdjacentOcean[0].Position - data.GetTileAtCoordinates(x, z).Position;
                     directionOne = directionOne.normalized;
                     Vector3 directionTwo = edgeAdjacentOcean[1].Position - data.GetTileAtCoordinates(x, z).Position;
                     directionTwo = directionTwo.normalized;
                     if (Vector3.Angle(directionOne, directionTwo) > 90)
                     {
                         Vector3 position = new Vector3(x * settings.tileSize, 0, z * settings.tileSize);
                         data.GetTileAtCoordinates(x, z).ReplaceTile(TileType.OceanFloor, position, Vector3.zero);
                     }
                 }
                 else if (edgeAdjacentOcean.Count > 2)
                 {
                     Vector3 position = new Vector3(x * settings.tileSize, 0, z * settings.tileSize);
                     data.GetTileAtCoordinates(x, z).ReplaceTile(TileType.OceanFloor, position, Vector3.zero);
                 }
             }
         }
     }
     return(data);
 }
    // OnInspector GUI
    public override void OnInspectorGUI()
    {
        if (GUILayout.Button("Generate"))
        {
            TerrainSettings settings = GameObject.FindGameObjectWithTag("GameManager").GetComponentInChildren <TerrainSettings>();

            PlaneSurface mySurface = settings.gameObject.GetComponent <PlaneSurface>();
            if (mySurface == null)
            {
                mySurface = settings.gameObject.AddComponent <PlaneSurface>();
            }

            mySurface.maxHeight   = (int)planeSize / 2;
            mySurface.width       = baseWidth;
            mySurface.length      = baseLength;
            mySurface.planeLength = planeSize;

            mySurface.tmpNodeObjects = new List <GameObject>();

            mySurface.populateNodes();
            mySurface.createPlanes();

            Debug.Log("Terrain generated.");
        }
    }
Example #6
0
    protected override void OnCreate()
    {
        entityManager = World.Active.EntityManager;
        playerSystem  = World.Active.GetOrCreateSystem <PlayerEntitySystem>();

        UpdateCurrentCellIndex();
        previousCellIndex = new int2(100);

        sectorArchetype = entityManager.CreateArchetype(
            ComponentType.ReadWrite <LocalToWorld>(),
            ComponentType.ReadWrite <Translation>(),
            ComponentType.ReadWrite <RenderMeshProxy>()
            );

        float3 matrixRoot = new float3(currentCellIndex.x, 0, currentCellIndex.y);

        sectorMatrix = new Matrix <Entity>(5, Allocator.Persistent, matrixRoot);
        cellMatrix   = new Matrix <CellMatrixItem>(5, Allocator.Persistent, matrixRoot);

        EntityQueryDesc sectorSortQueryDesc = new EntityQueryDesc {
            All  = new ComponentType[] { typeof(AdjacentCell), typeof(SectorCell), typeof(WorleyNoise.PointData) },
            None = new ComponentType[] { typeof(Tags.TerrainEntity) }
        };

        sectorSortQuery = GetEntityQuery(sectorSortQueryDesc);

        worley       = TerrainSettings.CellWorley();
        topologyUtil = new TopologyUtil().Construct();
    }
    public TerrainSettings LoadTerrainSettings()
    {
        if (saveFileNameList.Count >= 1)
        {
            string path = Application.persistentDataPath + "/" + selectedName + ".ter";
            //string path = Application.persistentDataPath + "/TerrainSettings.fun";
            if (File.Exists(path))
            {
                BinaryFormatter formatter = new BinaryFormatter();
                FileStream      stream    = new FileStream(path, FileMode.Open);

                TerrainSettings terrainSettings = formatter.Deserialize(stream) as TerrainSettings;
                stream.Close();
                return(terrainSettings);
            }
            else
            {
                Debug.LogError("(Terrain)Save file not found at: " + path);
                return(null);
            }
        }
        else
        {
            return(null);
        }
    }
Example #8
0
 public static TerrainData GenerateLandmasses(TerrainData data, TerrainSettings settings, NoiseMap noiseMap)
 {
     noiseMap.XRandomOffset = Random.Range(0, 10000);
     noiseMap.ZRandomOffset = Random.Range(0, 10000);
     for (int x = 0; x < data.xSize; x++)
     {
         for (int z = 0; z < data.zSize; z++)
         {
             Vector3 position   = new Vector3(x * settings.tileSize, 0, z * settings.tileSize);
             float   noiseValue = noiseMap.GetLayeredPerlinValueAtPosition(x, z);
             if (noiseValue < settings.oceanPercent)
             {
                 data.GetTileAtCoordinates(x, z).ReplaceTile(TileType.OceanFloor, position, Vector3.zero);
                 data.GetTileAtCoordinates(x, z).elevationValue = noiseValue;
             }
             else if (noiseValue > settings.mountainLevel)
             {
                 data.GetTileAtCoordinates(x, z).ReplaceTile(TileType.Mountain, position, Vector3.zero);
                 data.GetTileAtCoordinates(x, z).elevationValue = noiseValue;
             }
             else
             {
                 data.GetTileAtCoordinates(x, z).ReplaceTile(TileType.Plains, position, Vector3.zero);
                 data.GetTileAtCoordinates(x, z).elevationValue = noiseValue;
             }
         }
     }
     return(data);
 }
Example #9
0
 private void OnValidate()
 {
     if (terrainSettings == null)
     {
         terrainSettings = new TerrainSettings();
     }
 }
Example #10
0
 public CpuMeshGenerator(Action <GeneratedDataInfo <MeshData[]> > columnDataCallback, Action <GeneratedDataInfo <MeshData> > chunkDataCallback, TerrainSettings Settings)
 {
     this._columnDataCallback = columnDataCallback;
     this._chunkDataCallback  = chunkDataCallback;
     this._settings           = Settings;
     Initialize();
 }
Example #11
0
 public TerrainChunkProvider(TerrainSettings terrainSettings)
 {
     if (TerrainGenerator.Instance == null)
     {
         new TerrainGenerator(terrainSettings);
     }
 }
Example #12
0
    public static TerrainData GenerateBiomes(TerrainData data, TerrainSettings settings)
    {
        Dictionary <TileType, Vector2> biomesToClimateValues = new Dictionary <TileType, Vector2>()
        {
            { TileType.Desert, settings.desert },
            { TileType.Forest, settings.forest },
            { TileType.Plains, settings.plains },
            { TileType.RainForest, settings.rainForest },
            { TileType.Taiga, settings.taiga },
            { TileType.Tundra, settings.tundra }
        };

        foreach (var tile in data.tiles)
        {
            if (!tile.type.IsWaterTile() && tile.type != TileType.Mountain)
            {
                Vector2  tileBiomeValue  = new Vector2(tile.moistureValue, tile.temperatureValue);
                TileType closestBiome    = TileType.Plains;
                float    closestDistance = float.MaxValue;
                foreach (var biome in biomesToClimateValues)
                {
                    if (Vector2.Distance(tileBiomeValue, biome.Value) < closestDistance)
                    {
                        closestDistance = Vector2.Distance(tileBiomeValue, biome.Value);
                        closestBiome    = biome.Key;
                    }
                }
                tile.type = closestBiome;
            }
        }
        return(data);
    }
Example #13
0
 public TerrainData(float[,] heightMap, Color[] colorMap, MeshData meshData, Vector2Int size, TerrainSettings settings)
 {
     this.heightMap = heightMap;
     this.meshData  = meshData;
     this.colorMap  = colorMap;
     this.size      = size;
     this.settings  = settings;
 }
Example #14
0
    public TopologyUtil Construct()
    {
        groupSimplex  = TerrainSettings.GroupSimplex();
        heightSimplex = TerrainSettings.HeightSimplex();
        slopeSimplex  = new SimplexNoise(TerrainSettings.seed, 0.1f);

        return(this);
    }
 public ChunkGenerator(TerrainSettings terrainSettings, Density density, ObjectPool chunkPool, List <ObjectSpawner> spawners, int maxChunksPerFrame) : base(chunkPool)
 {
     this.terrainSettings   = terrainSettings;
     this.density           = density;
     this.spawners          = spawners;
     this.maxChunksPerFrame = maxChunksPerFrame;
     chunksToGenerate       = new Queue <Chunk>();
 }
 // use when creating
 public TerrainBuilder(int width, int height, int seed)
 {
     Seed          = seed;
     Width         = width;
     Height        = height;
     _presetLoader = new GradiantPresetLoader(GameServer.Instance.AppDirectory + "GradientPresets" + GameServer.sepChar);
     Settings      = new TerrainSettings(width, height, seed, string.Empty, string.Empty, string.Empty);
     Logger.Log("Terrain initialized.");
 }
 // use when creating
 public TerrainBuilder(int width, int height, int seed)
 {
     Seed = seed;
     Width = width;
     Height = height;
     _presetLoader = new GradiantPresetLoader (GameServer.Instance.AppDirectory + "GradientPresets" + GameServer.sepChar);
     Settings = new TerrainSettings (width, height, seed, string.Empty, string.Empty, string.Empty);
     Logger.Log("Terrain initialized.");
 }
Example #18
0
        protected override void Awake()
        {
            base.Awake();

            terrainSettings      = GetComponent <TerrainSettings>();
            terrainChunkProvider = new TerrainChunkProvider(terrainSettings);

            IsReadyEvent.Set();
        }
Example #19
0
    public TerrainGenerator(TerrainSettings settings)
    {
        this.settings = settings;
        noiseFilters  = new INoiseFilter[settings.noiseLayers.Length];

        for (int i = 0; i < noiseFilters.Length; i++)
        {
            noiseFilters[i] = NoiseFilterFactory.CreateNoiseFilter(settings.noiseLayers[i].noiseSettings);
        }
    }
Example #20
0
        public static TerrainChunk Create(Vector2 position,
                                          TerrainSettings settings,
                                          Transform parent,
                                          float[,] heightMap)
        {
            var terrainChunk = new GameObject().AddComponent <TerrainChunk>();

            terrainChunk.InitiateChunk(position, settings, parent, heightMap);
            return(terrainChunk);
        }
Example #21
0
    public static TerrainData GenerateTemperatureLevels(TerrainData data, TerrainSettings settings)
    {
        TileData equator         = null;
        float    closestDistance = float.MaxValue;

        foreach (var tile in data.tiles)
        {
            if (Vector3.Distance(tile.Position, settings.equatorPosition) < closestDistance)
            {
                equator         = tile;
                closestDistance = Vector3.Distance(tile.Position, settings.equatorPosition);
            }
        }
        if (equator != null)
        {
            equator.temperatureValue = 1f;
            bool allTilesEvaluated = false;
            while (!allTilesEvaluated)
            {
                foreach (var tile in data.tiles)
                {
                    if (tile.temperatureValue == 0)
                    {
                        List <TileData> adjacentTiles    = data.GetAllEdgeAdjacentTiles(tile.xCoordinate, tile.zCoordinate);
                        float           highestTempValue = 0;
                        for (int i = 0; i < adjacentTiles.Count; i++)
                        {
                            if (adjacentTiles[i].temperatureValue > highestTempValue)
                            {
                                highestTempValue = adjacentTiles[i].temperatureValue;
                            }
                        }
                        if (highestTempValue != 0)
                        {
                            tile.temperatureValue = Mathf.Clamp(highestTempValue - settings.temperatureDegradeRate, .001f, 1);
                        }
                    }
                }
                allTilesEvaluated = true;
                foreach (var tile in data.tiles)
                {
                    if (tile.temperatureValue == 0)
                    {
                        allTilesEvaluated = false;
                        break;
                    }
                }
            }
        }
        else
        {
            Debug.LogWarning("Equator = null");
        }
        return(data);
    }
Example #22
0
        void OnSceneGUI()
        {
            TerrainSettings terrainResizer = (TerrainSettings)target;
            Terrain         terrain        = terrainResizer.GetComponent <Terrain>();

            // Draw bounds
            Handles.color = Color.yellow;
            Vector3 size = Vector3.Scale(terrain.terrainData.size, terrainResizer.transform.localScale);

            Handles.DrawWireCube(terrainResizer.transform.position + size * 0.5f, size);
        }
Example #23
0
 // Use this for initialization
 void Awake()
 {
     terrainManager  = ScriptableObject.CreateInstance <TerrainManager>();
     terrainSettings = ScriptableObject.CreateInstance <TerrainSettings>();
     if (gameMaster != this)
     {
         gameMaster = this;
         DontDestroyOnLoad(this);
     }
     GameObject NewTerrain = TerrainExtensions.CreateTerrain(new Vector3(0f, 0f, 0f));
 }
Example #24
0
    public void RequestTerrainData(TerrainSettings settings, Vector2 offset, Action <TerrainData> callback)
    {
        ThreadStart getTerrainData = delegate
        {
            TerrainData terrainData = GenerateTerrainData(settings, offset);
            lock (callbackQueue){
                callbackQueue.Enqueue(new TerrainThreadData(callback, terrainData));
            }
        };

        new Thread(getTerrainData).Start();
    }
    void Start()
    {
        terrain         = GetComponent <Terrain>();
        terrainData     = terrain.terrainData;
        terrainSettings = GameMaster.gameMaster.terrainSettings;

        gameObject.AddComponent <BoxCollider>();
        coll           = GetComponent <BoxCollider>();
        coll.isTrigger = true;
        coll.size      = new Vector3(terrainSettings.MapSize.x, 200f, terrainSettings.MapSize.z);
        coll.center    = new Vector3(terrainSettings.MapSize.x / 2, 0f, terrainSettings.MapSize.z / 2);
    }
Example #26
0
    protected override void OnCreate()
    {
        entityManager = World.Active.EntityManager;
        playerSystem  = World.Active.GetOrCreateSystem <PlayerEntitySystem>();
        cellSystem    = World.Active.GetOrCreateSystem <CellSystem>();
        monoBehaviour = GameObject.FindObjectOfType <DebugMonoBehaviour>();
        debugWorley   = TerrainSettings.CellWorley();
        topologyUtil  = new TopologyUtil().Construct();

        worleyCurrentMarker  = CreateCube(float3.zero, new float4(0, 1, 0, 1));
        worleyAdjacentMarker = CreateCube(float3.zero, new float4(0, 0, 1, 1));
    }
 // use when loading
 public TerrainBuilder(TerrainSettings settings)
 {
     Settings = settings;
     Seed = settings.seed;
     Width = settings.width;
     Height = settings.height;
     NoiseModule = FileManager.LoadObject<IModule> (settings.moduleFile, true);
     _presetLoader = new GradiantPresetLoader (GameServer.Instance.AppDirectory + "GradientPresets" + GameServer.sepChar);
     GradientPreset = _presetLoader.GetPreset (settings.preset);
     Gradient = GradientCreator.CreateGradientServer (new List<GradientPresets.GradientKeyData>(GradientPreset));
     LoadMap (settings.imageFile);
 }
 // use when loading
 public TerrainBuilder(TerrainSettings settings)
 {
     Settings       = settings;
     Seed           = settings.seed;
     Width          = settings.width;
     Height         = settings.height;
     NoiseModule    = FileManager.LoadObject <IModule> (settings.moduleFile, true);
     _presetLoader  = new GradiantPresetLoader(GameServer.Instance.AppDirectory + "GradientPresets" + GameServer.sepChar);
     GradientPreset = _presetLoader.GetPreset(settings.preset);
     Gradient       = GradientCreator.CreateGradientServer(new List <GradientPresets.GradientKeyData>(GradientPreset));
     LoadMap(settings.imageFile);
 }
Example #29
0
 public MeshJob(float[,] heightMap,
                TerrainSettings settings,
                int lod,
                Action callback,
                NativeArray <MeshData> result
                )
 {
     _result    = result;
     _callback  = callback;
     _heightMap = heightMap;
     _settings  = settings;
     _lod       = lod;
 }
Example #30
0
    public TerrainData GenerateTerrainData(TerrainSettings terrainSettings, Vector2Int size, Vector2 offset)
    {
        int width  = size.x;
        int height = size.y;

        AnimationCurve heightCurve = new AnimationCurve(terrainSettings.heightCurve.keys);

        float[,] heightMap = TerrainNoise.GenerateNoiseMap(width, height, terrainSettings.noiseSeed, terrainSettings.noiseScale, terrainSettings.octaves, terrainSettings.persistance, terrainSettings.lacunarity, offset, terrainSettings.normalizeMode);
        Color[]  colorMap = CreateColorMap(heightMap, terrainSettings.regions);
        MeshData meshData = MeshGenerator.GenerateMesh(heightMap, terrainSettings.heightScale, heightCurve);

        return(new TerrainData(heightMap, colorMap, meshData, size, terrainSettings));
    }
Example #31
0
    // Use this for initialization
    void Awake()
    {
        terrainSettings        = ScriptableObject.CreateInstance <TerrainSettings>();
        ParticleSystemSelector = ScriptableObject.CreateInstance <ScriptableParticle>();
        terrainBiome           = ScriptableObject.CreateInstance <TerrainBiome>();
        terrainManager         = ScriptableObject.CreateInstance <TerrainManager>();
        if (gameMaster != this)
        {
            gameMaster = this;
        }
        DontDestroyOnLoad(this);

        TerrainExtensions.CreateTerrain(new Vector3(0, 0, 0));
    }
Example #32
0
    public void Setup()
    {
        if (Rules != null)
        {
            TerrainSettings s = new TerrainSettings();
            s.Rules       = Rules;
            s.PrefabRules = PrefabRules;

            s.MainMaterial         = MainMaterial;
            s.MainMaterialXTiling  = MainMaterialXTiling;
            s.MainMaterialYTiling  = MainMaterialYTiling;
            s.MainMaterialRotation = MainMaterialRotation;

            s.TopMaterial         = TopMaterial;
            s.TopMaterialXTiling  = TopMaterialXTiling;
            s.TopMaterialYTiling  = TopMaterialYTiling;
            s.TopMaterialRotation = TopMaterialRotation;
            s.DrawTopMeshCollider = DrawTopMeshCollider;
            s.DrawTopMeshRenderer = DrawTopMeshRenderer;

            s.DetailMaterial         = DetailMaterial;
            s.DetailMaterialXTiling  = DetailMaterialXTiling;
            s.DetailMaterialYTiling  = DetailMaterialYTiling;
            s.DetailMaterialRotation = DetailMaterialRotation;
            s.DrawDetailMeshRenderer = DrawDetailMeshRenderer;

            s.MainPlaneHeight   = MainPlaneHeight;
            s.TopPlaneHeight    = TopPlaneHeight;
            s.DetailPlaneHeight = DetailPlaneHeight;

            s.CornerMeshWidth = CornerMeshWidth;

            s.OriginalStartPoint = this.transform.position;
            s.DetailPlaneOffset  = new Vector3(0, .1f, -.2f);

            s.MainPlaneFollowTerrainCurve   = MainPlaneFollowTerrainCurve;
            s.DetailPlaneFollowTerrainCurve = DetailPlaneFollowTerrainCurve;

            s.ParentGameObjectName = this.name;
            s.terrainDisplayer     = this;


            TerrainManager = new TerrainManager(s);
            PrefabManager  = new PrefabManager(s);



            Cleanup();
        }
    }
Example #33
0
 public static void SetSingleShaderProperties(TerrainMeshBlend comp, TerrainSettings terrainScript)
 {
     GameObject activeObject = comp.gameObject;
     Terrain terrain = comp.Terrain;
     //activeObject.renderer.sharedMaterial.SetTexture("_Tex0", comp.SingleTerrainTexture);
     Texture terrainTexture = activeObject.renderer.sharedMaterial.GetTexture("_Tex0");
         for (int i = 0; i < terrain.terrainData.splatPrototypes.Length; i++)
         {
             if (terrain.terrainData.splatPrototypes[i].texture == terrainTexture)
             {
                 var tileVector = activeObject.renderer.sharedMaterial.GetVector("_TileSize");
                 tileVector.x = terrain.terrainData.splatPrototypes[i].tileSize.x;
                 activeObject.renderer.sharedMaterial.SetVector("_TileSize", tileVector);
                 if (terrainScript != null && !comp.HasDiffuseShader())
                 {
                     switch (i)
                     {
                         case 0:
                             activeObject.renderer.sharedMaterial.SetTexture("_BumpMap0", terrainScript.Bump0);
                             break;
                         case 1:
                             activeObject.renderer.sharedMaterial.SetTexture("_BumpMap0", terrainScript.Bump1);
                             break;
                         case 2:
                             activeObject.renderer.sharedMaterial.SetTexture("_BumpMap0", terrainScript.Bump2);
                             break;
                         case 3:
                             activeObject.renderer.sharedMaterial.SetTexture("_BumpMap0", terrainScript.Bump3);
                             break;
                         default:
                             break;
                     }
                 }
             }
     }
 }