コード例 #1
0
    public override void OnInspectorGUI()
    {
        ProceduralTerrain terrainGen = (ProceduralTerrain)target;

        var settings = terrainGen.settings.Get();

        if (settings.maxRenderDistance < settings.minRenderDistance)
        {
            settings.maxRenderDistance = settings.minRenderDistance;
        }

        if (DrawDefaultInspector())
        {
            if (terrainGen.settings.autoUpdate)
            {
                terrainGen.Clear();
                terrainGen.Init();
            }
        }

        if (GUILayout.Button("Generate"))
        {
            terrainGen.Clear();
            terrainGen.Init();
        }
        if (GUILayout.Button("Clear"))
        {
            terrainGen.Clear();
        }
    }
コード例 #2
0
 private void Start()
 {
     pt = new ProceduralTerrain(worldSize, worldSize, passes);
     t.terrainData.size = new Vector3(worldSize * 2, maxHeight, worldSize * 2);
     t.terrainData.heightmapResolution = worldSize;
     Generate();
 }
コード例 #3
0
    private void OnEnable()
    {
        Terrain = (ProceduralTerrain)target;

        TerrainLayer_Containers = new ReorderableList(
            serializedObject,
            serializedObject.FindProperty("TerrainLayer_Containers"),
            true, true, true, true
            );

        TerrainLayer_Containers.drawHeaderCallback = rect =>
                                                     EditorGUI.LabelField(rect, "Terrain Layer Containers", EditorStyles.boldLabel);

        TerrainLayer_Containers.drawElementCallback = (
            Rect rect,
            int index,
            bool isActive,
            bool isFocused
            ) =>
                                                      EditorGUI.ObjectField(
            new Rect(
                rect.x,
                rect.y,
                rect.width,
                EditorGUIUtility.singleLineHeight
                ),
            TerrainLayer_Containers.serializedProperty.GetArrayElementAtIndex(index),
            GUIContent.none
            );
    }
コード例 #4
0
    public void CreateTerrain()
    {
        ProceduralTerrain proceduralTerrain =
            FindObjectOfType <ProceduralTerrain>();

        proceduralTerrain.CreateTerrain(allDivisions, meshSize, meshHeight,
                                        scale);
    }
コード例 #5
0
    public void drawMap()
    {
        mapSize              = mapSizeSetting * 5;
        noiseGenerator       = new PerlinNoise(mapSize, mapSize, seed, scale, numOctaves, persistance, lacunarity);
        transform.localScale = new Vector3(5, 1, 5);

        ClearMap();

        terrain = new ProceduralTerrain(noiseGenerator, chunkRenderDistance, terrains, maxMapHeight);
        terrain.Render(useTerrainColors);
    }
コード例 #6
0
ファイル: PhysicsTestsEdit.cs プロジェクト: akridge/niwrad
        public void TerrainGetCenter()
        {
            var n               = 10;
            var height          = 10;
            var terrain         = ProceduralTerrain.Generate(n, height, 030195, 1.5f, 0.5f);
            var middleOfTerrain = terrain.GetComponent <Terrain>().GetCenter();

            Assert.AreEqual(
                new Vector3((Mathf.Pow(2, n) + 1) / 2, height / 2, (Mathf.Pow(2, n) + 1) / 2),
                middleOfTerrain
                );
        }
コード例 #7
0
    private void Generate(ProceduralTerrain terrain)
    {
        switch (index)
        {
        case 0:
            terrain.typeFilter = new IslandFilter();
            break;

        default:
            terrain.typeFilter = new CoastFilter();
            break;
        }
        terrain.GenerateSharedMesh();
    }
コード例 #8
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        ProceduralTerrain terrain = (ProceduralTerrain)target;

        index = EditorGUILayout.Popup("Type", index, typeOptions);
        if (GUILayout.Button("Generate"))
        {
            Generate(terrain);
        }
        else if (GUILayout.Button("Randomize"))
        {
            terrain.seed = Random.Range(0, int.MaxValue);
        }
    }
コード例 #9
0
    void Awake()
    {
        Current = this;

        mainQueue = new CoroutineQueue(this);
        mainQueue.StartLoop();

        combineQueue = new CoroutineQueue(this);
        combineQueue.StartLoop();

        miscQueue = new CoroutineQueue(this);
        miscQueue.StartLoop();

        objectGenerator = ScriptableObject.CreateInstance <ObjectGenerator>();

        ChunkList = new List <ChunkData>();
    }
コード例 #10
0
    public override void OnInspectorGUI()
    {
        ProceduralTerrain terrain = (ProceduralTerrain)target;

        if (DrawDefaultInspector())
        {
            if (terrain.AutoUpdate)
            {
                terrain.CreateTerrain();
            }
        }

        if (GUILayout.Button("Recreate terrain"))
        {
            terrain.CreateTerrain();
        }
    }
コード例 #11
0
    private void Start()
    {
        pt = new ProceduralTerrain(worldSize, worldSize, passes);
        t.terrainData.size = new Vector3(worldSize * 2.5f, maxHeight, worldSize * 2.5f);
        t.terrainData.heightmapResolution = worldSize;
        Generate();
        for (int i = 0; i < 3; i++)
        {
            int xAs = Random.Range(0, 600);
            int yAs = Random.Range(0, 600);

            Vector3 pos = new Vector3(xAs, 0, yAs);

            float terrainHeight = t.SampleHeight(pos);
            pos.y = terrainHeight + 0.5f;
            Instantiate(boatParts[i], pos, Quaternion.identity);
        }
    }
コード例 #12
0
        public void PositionAboveGround()
        {
            var height  = 30;
            var terrain = ProceduralTerrain.Generate(10,
                                                     height,
                                                     030195,
                                                     1000,
                                                     0.8f
                                                     );

            terrain.layer = LayerMask.NameToLayer("Ground");
            var middleOfTerrain = terrain.GetComponent <Terrain>().GetCenter();

            var nbObjects = 1000;
            var goScale   = 2;
            var gos       = new GameObject[nbObjects];

            // Test that spawning above ground then correctly adjust slightly above
            foreach (var i in Enumerable.Range(0, nbObjects))
            {
                var go = GameObject.CreatePrimitive(PrimitiveType.Cube);
                var randomPositionOnTerrain = Random.insideUnitCircle * Mathf.Pow(2, 9);
                go.transform.position = middleOfTerrain +
                                        new Vector3(randomPositionOnTerrain.x, 0, randomPositionOnTerrain.y) +
                                        Vector3.up * height; // TODO: see @Utils.Spatial.PositionAboveGround
                var aboveGround = go.transform.position.PositionAboveGround(prefabHeight: goScale);
                Physics.Raycast(aboveGround, Vector3.down, out var hit, Mathf.Infinity);
                Assert.NotNull(hit.transform, "didn't hit");
                Assert.Equals(hit.transform.gameObject.layer, terrain.layer);
                Assert.Less(hit.transform.position.y as IComparable, aboveGround.y, "Ray-cast hit should be below object !");
                gos[i] = go;
            }


            // Cleanup
            foreach (var go in gos)
            {
                Object.DestroyImmediate(go);
            }
            Object.DestroyImmediate(terrain);
        }
コード例 #13
0
    IEnumerator GenerateChunk()
    {
        //Continue after loading message has been displayed
        yield return(ProceduralTerrain.Current.StartCoroutine(ProceduralTerrain.Current.DisplayChunkLoadMessage()));

        InitialiseArrays();
        terrainHeightMap = ProceduralTerrain.CalculateHeightMap(this);
        ProceduralTerrain.Current.GenerateTerrain(this);

        //Generate rest of chunk
        ProceduralTerrain.Current.GenerateHouses(this);
        ProceduralTerrain.Current.GenerateTrees(this);
        ProceduralTerrain.Current.GenerateVillageConnections(this); //Must be called after trees to avoid clipping
        ProceduralTerrain.Current.GenerateDetails(this);
        SplatMapGenerator.GenerateSplatMap(this);
        ProceduralTerrain.Current.GenerateGrass(this);

        //Continue after loading message has been hidden
        yield return(ProceduralTerrain.Current.StartCoroutine(ProceduralTerrain.Current.HideChunkLoadMessage()));

        //Alert ProceduralTerrain that chunk has been created
        ProceduralTerrain.Current.OnChunkCreated(this);
    }
コード例 #14
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        if (TerrainLayer_Containers != null)
        {
            TerrainLayer_Containers.DoLayoutList();
        }

        EditorGUI.BeginChangeCheck();

        EditorGUILayout.PropertyField(serializedObject.FindProperty("TerrainSize"));
        EditorGUILayout.PropertyField(serializedObject.FindProperty("TerrainHeight"));
        EditorGUILayout.PropertyField(serializedObject.FindProperty("CellSize"));

        serializedObject.ApplyModifiedProperties();

        ProceduralTerrain procedural_terrain = serializedObject.targetObject as ProceduralTerrain;

        if (GUILayout.Button("Generate") || (EditorGUI.EndChangeCheck() && procedural_terrain.AutoUpdate))
        {
            procedural_terrain.GenerateTerrain();
        }
    }
コード例 #15
0
 private void Awake()
 {
     spawnedFood = new List <Food>();
     terrain     = FindObjectOfType <ProceduralTerrain>();
 }
コード例 #16
0
 public void OnValidate()
 {
     spawnedFood = new List <Food>();
     terrain     = FindObjectOfType <ProceduralTerrain>();
 }
コード例 #17
0
 private void OnEnable()
 {
     terrain = (ProceduralTerrain)target;
 }
コード例 #18
0
 private void Start()
 {
     mapGenerator   = FindObjectOfType <ProceduralTerrain>();
     mapInteraction = FindObjectOfType <MapInteraction>();
     AudioSource.PlayOneShot(buildingClickAudio);
 }