Beispiel #1
0
    // Start is called before the first frame update
    void Start()
    {
        int mapWidth  = 100;
        int mapHeight = 100;

        MapDisplay display = FindObjectOfType <MapDisplay>();
        MapGen     map     = FindObjectOfType <MapGen>();

        Vector2 offset = new Vector2(0, 0);
        int     seed   = Random.Range(-1000, 1000);

        float[,] noiseMap = Noise.GenerateNoiseMap(100, 100, map.noiseScale, 3, 0.2f, 3, seed, offset);

        Color[] colorMap = new Color[mapWidth * mapHeight];
        for (int y = 0; y < mapHeight; y++)
        {
            for (int x = 0; x < mapWidth; x++)
            {
                float currentHeight = noiseMap[x, y];
                for (int i = 0; i < map.regions.Length; i++)
                {
                    if (currentHeight < map.regions[i].height)
                    {
                        colorMap[(y * mapWidth) + x] = map.regions[i].color;
                        break;
                    }
                }
            }
        }


        display.DrawMesh(MeshGen.TerrainMeshGen(noiseMap, map.heightMultiplier, map.meshHeightCurve),
                         ColorTexture.TextureColorMap(colorMap, mapWidth, mapHeight));
    }
Beispiel #2
0
    void MeshDataThread(MapData mapData, int lod, Action <MeshData> callback)
    {
        MeshData meshData = MeshGen.GennerateTerrainMesh(mapData.heightMap, meshHeight, meshHeightCurve, lod);

        lock (MeshDataInfoQueue)
        { MeshDataInfoQueue.Enqueue(new MapThreadInfo <MeshData>(callback, meshData)); }
    }
    private Mesh CreateTile(Vector3 index0, Vector3 index1, Vector3 index2, Vector3 index3)
    {
        MeshGen mesh = new MeshGen();

        // Mesh Generation
        mesh.Vertices.Add(index0);
        mesh.UV.Add(new Vector2(0f, 0f));
        mesh.Normals.Add(Vector3.up);

        mesh.Vertices.Add(index1);
        mesh.UV.Add(new Vector2(0f, 1f));
        mesh.Normals.Add(Vector3.up);

        mesh.Vertices.Add(index2);
        mesh.UV.Add(new Vector2(1f, 1f));
        mesh.Normals.Add(Vector3.up);

        mesh.Vertices.Add(index3);
        mesh.UV.Add(new Vector2(1f, 0f));
        mesh.Normals.Add(Vector3.up);

        mesh.CreateTriangles(new Vector3Int(0, 1, 2));
        mesh.CreateTriangles(new Vector3Int(0, 2, 3));

        mesh.ApplyMeshChanges();

        return(mesh.Mesh);
    }
    public void UpdateMapInEditor()
    {
        MapData mapData = Generator();

        MapDisplay display = FindObjectOfType <MapDisplay>();

        if (mode == DrawMode.Biome)
        {
            display.DisplayTexture(TextureGen.FromBiome(mapData.colorMap, mapSize, mapSize));
        }
        else if (mode == DrawMode.Noise)
        {
            display.DisplayTexture(TextureGen.FromNoiseScale(mapData.noiseMap));
        }
        else if (mode == DrawMode.Mesh)
        {
            MeshData meshData = MeshGen.TerrainMesh(mapData.noiseMap, heightMultiplier, HeightGradiant, LevelOfDetail);
            display.DisplayMesh(meshData, TextureGen.FromBiome(mapData.colorMap, mapSize, mapSize));
            if (addvegetation)
            {
                List <GameObject> spawnedVeget = new List <GameObject>();

                spawnedVeget = VegetationGenerator.PlaceVegetation(mapData.noiseMap, meshData, LevelOfDetail, biomes, density, spawnedVeget);

                spawnedVeget = RaycastSpawning.Adjust(spawnedVeget, InGround);

                spawnedVeget.Clear();
            }
        }
    }
Beispiel #5
0
        private IKBone CreateBone(float thickness, float length, Color color)
        {
            var bone = new IKBone(length, null);

            var p = Program.Inst;
            var g = p.GraphicsDevice;

            var mesh = MeshGen.Disc(thickness, length + 0.05f)
                       .Translate(0.5f * length * Vector3.Up)
                       .Color(color);

            p.Scene.AddEntity(new EcsEntity(new CMesh   {
                Mesh = mesh.Gpu(g)
            },
                                            new CIKBone {
                Bone = bone
            },
                                            new CPos    {
            },
                                            // new CVel  { },
                                            new CRot {
            },
                                            new CShadow {
            }
                                            ));

            return(bone);
        }
Beispiel #6
0
    public void MeshDataThread(MapData mapData, Action <MeshData> callback, int LOD)
    {
        MeshData meshData = MeshGen.GenerateTerrainMesh(mapData.heightMap, heightCoefficient, heightExponent, meshHeightCurve, LOD);

        lock (meshData)
        {
            meshDataThreadInfoQueue.Enqueue(new MapThreadInfo <MeshData>(callback, meshData));
        }
    }
Beispiel #7
0
    public void MeshRegenerated()
    {
        plane = GetComponent <MeshGen>();
        plane.mesh.MarkDynamic();

        OGverts  = plane.mesh.vertices.ToList();
        modVerts = plane.mesh.vertices.ToList();
        Debug.Log("oh, i generated a mesh. great.");
    }
Beispiel #8
0
    void MeshDataThread(MapData mapData, Action <MeshData> callBack)
    {
        MeshData meshData = MeshGen.GenTerrain(mapData.heightMap, meshHeightMultipler, meshHeightCurve, levelOfDetail);

        lock (meshThreadInfoQueue)
        {
            meshThreadInfoQueue.Enqueue(new MapThreadInfo <MeshData>(callBack, meshData));
        }
    }
Beispiel #9
0
    void MeshDataThread(MapData mapData, int lod, Action <MeshData> callback)
    {
        MeshData meshData = MeshGen.GenerateTerrainMesh(mapData.heightMap, meshHeightMultiplier, meshHeightCurve, lod, useFlatShading);

        lock (meshDataThreadInfoQueue)
        {
            meshDataThreadInfoQueue.Enqueue(new MapThreadInfo <MeshData>(callback, meshData));
        }
    }
Beispiel #10
0
    void MeshDataThread(MapData mapData, int lod, Action <MeshData> callback)
    {
        MeshData meshData = MeshGen.GenerateTerrainMesh(mapData.heightMap, meshHeightMultiplier, meshHeightCurve, lod);

        //Prevent other threads from executing this code at once
        lock (meshDataThreadInfoQueue){
            meshDataThreadInfoQueue.Enqueue(new MapThreadInfo <MeshData>(callback, meshData));
        }
    }
Beispiel #11
0
    private void Start()
    {
        Map     map     = FindObjectOfType <Map>();
        MapData mapdata = GenThatMapData(Vector2.zero);

        if (drawMode == DrawMode.DrawMesh)
        {
            map.DrawMesh(MeshGen.GennerateTerrainMesh(mapdata.heightMap, meshHeight, meshHeightCurve, editorlevelOfDetail), TextureGen.TextureFromColorMap(mapdata.colorMap, mapChunkSize, mapChunkSize));
        }
    }
Beispiel #12
0
    void Start()
    {
        meshG = GameObject.Find("Manager").GetComponent <MeshGen>();
        cam1  = transform.GetChild(0).GetComponent <Camera>();
        cam2  = transform.GetChild(1).GetComponent <Camera>();

        cam1.transform.localPosition  = new Vector3(0, meshG.size * 0.5f, -meshG.size);
        cam2.transform.localPosition  = new Vector3(0, meshG.size * 0.5f, -meshG.size);
        lighthouse.transform.position = (Vector3.up - Vector3.one) * (meshG.size * 0.3f);
    }
    private void Start()
    {
        mg = new MeshGen(Materials);
        mg.SetTarget(gameObject);

        tempIndices = new PoolRing <List <int> >(4);

        if (AutoGenerate)
        {
            Generate(Seed);
        }
    }
Beispiel #14
0
        private void SpawnBall()
        {
            if (sBallMeshes == null)
            {
                var cols = new [] {
                    new Color(0.2f, 0.6f, 1.0f),
                    Color.OrangeRed,
                };

                var ballMeshes = new List <GpuMesh>();

                for (var i = 0; i < cols.Length; i++)
                {
                    var g = Program.Inst.GraphicsDevice;
                    var m = MeshGen.Sphere(0.1f).Color(cols[i % cols.Length]);
                    ballMeshes.Add(m.Gpu(g));
                    sBallAabb = m.Aabb();
                }

                sBallMeshes = ballMeshes.ToArray();
            }

            var rnd = new Random();

            var vx = -3.0f - (float)rnd.NextDouble() * 1.0f;
            var vy = (float)rnd.NextDouble() - 1.4f;
            var vz = ((float)rnd.NextDouble() - 0.5f) * 0.5f;

            var num = rnd.Next(sBallMeshes.Length);

            Program.Inst.Scene.AddEntity(new EcsEntity(
                                             new CMesh {
                Mesh = sBallMeshes[num]
            },
                                             new CAabb {
                Aabb = sBallAabb
            },
                                             new CBall {
                Radius = 0.1f
            },
                                             new CVel {
                Vel = new Vector3(vx, vy, vz)
            },
                                             new CShadow {
            },
                                             new CSort {
                SortVal = 1 - num
            },
                                             new CPos {
                Pos = new Vector3(4.8f, 0.7f, -1.0f)
            }));
        }
Beispiel #15
0
    void GenerateMap()
    {
        map = new int[width, height];
        RandomFillMap();

        for (int i = 0; i < 16; i++)
        {
            //SmoothMap();
        }

        MeshGen meshGen = GetComponent <MeshGen>();

        meshGen.GenerateMesh(map, 1);
    }
Beispiel #16
0
//	void ShowPath(Vector3[] points){
//
//		//Debug.Log(Input.mousePosition);
//		//HexCell target = HexGrid.instance.GetCell(assist.WorldToGrid(point));
//		//HexCell start = HexGrid.instance.GetCell(player.transform.position);
//		//Debug.Log("Clicked "+ target.q+":"+target.r);
//		foreach (var item in markers) {
//			Destroy(item);
//		}
//		markers = new GameObject[points.Length];
//		for (int i = 0; i < points.Length; i++) {
//
//			markers[i] = SlapMarker(points[i]);
//			markers[i].name = "Hex mark";
//
//		}
//
//
//		//temp = waypoints[pathcount]-player.transform.position;
//		//tween =
//	}

    GameObject SlapMarker(Vector3 pos)
    {
        GameObject go = new GameObject("hex");
        MeshFilter mf = go.AddComponent <MeshFilter>();

        go.AddComponent <MeshRenderer>();
        mf.mesh = MeshGen.Hex(HexLayout.instance.wide_width);
        go.transform.localScale     = Vector3.one * 0.3f;
        go.transform.position       = pos;
        go.transform.parent         = field;
        go.transform.localRotation  = Quaternion.identity;
        go.transform.localPosition += Vector3.up * 0.02f;
        return(go);
    }
Beispiel #17
0
 public void PreGenerate()
 {
     lock (meshes)
     {
         for (int i = 0; i < meshes.Length; i++)
         {
             meshes[i].LevelOfDetail = ChunkAttributes.levelsOfDetail[i].LoD;
             meshes[i].meshInfo      = new MeshInfo(MeshGen.vertices(ChunkAttributes.size,
                                                                     noiseMap,
                                                                     meshes[i].LevelOfDetail,
                                                                     Mathf.RoundToInt(ChunkAttributes.scale),
                                                                     ChunkAttributes.animationCurve),
                                                    MeshGen.quadsTriangles(ChunkAttributes.size, meshes[i].LevelOfDetail),
                                                    MeshGen.uvs(ChunkAttributes.size, meshes[i].LevelOfDetail));
         }
     }
 }
Beispiel #18
0
    public void DrawMapInEditor()
    {
        MapData map = GenerateMapData(Vector2.zero);

        if (drawMode == DrawMode.NoiseMap)
        {
            display.DrawTexture(TextureGen.TextureFromNoiseMap(map.heightMap));
        }
        else if (drawMode == DrawMode.ColourMap)
        {
            display.DrawTexture(TextureGen.TextureFromColourMap(map.colMap, mapChunkSize, mapChunkSize));
        }
        else if (drawMode == DrawMode.Mesh)
        {
            display.DrawMesh(MeshGen.GenerateTerrainMesh(map.heightMap, heightCoefficient, heightExponent, meshHeightCurve, editorLOD), TextureGen.TextureFromColourMap(map.colMap, mapChunkSize, mapChunkSize));
        }
    }
    private void OnValidate()
    {
        Species.ClampValues();

        if (AutoGenerate)
        {
            if (mg == null)
            {
                mg = new MeshGen(Materials);
                mg.SetTarget(gameObject);

                tempIndices = new PoolRing <List <int> >(4);
            }

            Generate(Seed);
        }
    }
Beispiel #20
0
    private void UnloadStaticAssets()
    {
        if (!LoadedStatic)
        {
            // Projectiles...
            ProjectileData.UnloadAll();
            TempEffect.UnloadAll();
            Item.UnloadAll();
            MeshGen.ClearCache();
            TileData.UnloadAll();

            // Resources cleanup...
            Resources.UnloadUnusedAssets();

            LoadedStatic = false;
        }
    }
Beispiel #21
0
    public void DrawMapInEditor()
    {
        MapData    mapData = GenerateMapData(Vector2.zero);
        MapDisplay display = FindObjectOfType <MapDisplay>();

        if (drawMode == DrawMode.NoiseMap)
        {
            display.DrawTexture(TextureGen.TextureFromHeightMap(mapData.heightMap));
        }
        else if (drawMode == DrawMode.ColorMap)
        {
            display.DrawTexture(TextureGen.TextureFromColorMap(mapData.colorMap, mapChunkSize, mapChunkSize));
        }
        else if (drawMode == DrawMode.Mesh)
        {
            display.DrawMesh(MeshGen.GenerateMesh(mapData.heightMap, meshHeightMultiplier, meshHeightCurve, editorPreviewLOD), TextureGen.TextureFromColorMap(mapData.colorMap, mapChunkSize, mapChunkSize));
        }
    }
    public TerrainChunk(Vector2 coord, int size, Transform parent, int layer)
    {
        position = coord * size;
        bounds   = new Bounds(position, Vector2.one * size);
        Vector3 positionV3 = new Vector3(position.x, 0, position.y);

        meshObject       = new GameObject("TerrainChunk");
        meshObject.layer = layer;
        MeshRenderer     = meshObject.AddComponent <MeshRenderer>();
        meshFilter       = meshObject.AddComponent <MeshFilter>();
        meshObject.transform.position = positionV3;
        meshObject.transform.SetParent(parent);
        meshObject.tag = "Ground";
        SetVisible(true);
        MeshMatData data = chunks.mapGen.GetGeneratedData(position, coord);

        meshFilter.mesh       = MeshGen.GenerateTerrainMesh(data.map, 0).CreateMesh();
        MeshRenderer.material = data.mat;
        meshObject.AddComponent <MeshCollider>();
    }
Beispiel #23
0
    void Awake()
    {
        _ShadowDummyMesh = MeshGen.CreatePlane(new Vector3(0.0f, 0.0f, 1.0f), new Vector3(1.0f, 0.0f, 0.0f), _UVRect,
                                               new Color(_ShadowColor.r, _ShadowColor.g, _ShadowColor.b, _ShadowOpacity), this);

        Transform parent = transform;

        _ShadowDummy = new GameObject("shadowDummy").AddComponent <ProjectorShadowDummy>();
        _ShadowDummy.transform.parent        = parent;
        _ShadowDummy.transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f);
        _ShadowDummy.transform.localRotation = Quaternion.identity * parent.localRotation;

        _ShadowDummy.gameObject.layer = LayerMask.NameToLayer(GlobalProjectorManager.GlobalProjectorLayer);

        _ShadowDummy._ShadowLocalOffset   = _ShadowLocalOffset;
        _ShadowDummy._RotationAngleOffset = _RotationAngleOffset;

        _ShadowDummy._freezeXRot = _FreezeXRot;
        _ShadowDummy._freezeYRot = _FreezeYRot;
        _ShadowDummy._freezeZRot = _FreezeZRot;

        OnShadowSizeChanged();

        _Renderer = _ShadowDummy.gameObject.AddComponent <MeshRenderer>();
        _Renderer.receiveShadows = false;
                #if UNITY_5_1 || UNITY_5_2 || UNITY_5_3 || UNITY_5_4 || UNITY_5_5 || UNITY_5_6 || UNITY_5_7 || UNITY_2017 || UNITY_2018 || UNITY_2019 || UNITY_2020
        _Renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
#else
        _Renderer.castShadows = false;
#endif
        _Renderer.material = _Material;
        _Renderer.enabled  = false;

        _MeshFilter      = _ShadowDummy.gameObject.AddComponent <MeshFilter>();
        _MeshFilter.mesh = _ShadowDummyMesh;

        _initialSize    = _ShadowSize;
        _initialOpacity = _ShadowOpacity;

        _discarded = false;
    }
Beispiel #24
0
    public void DrawingInEditor()
    {
        MapData mapData = GenMapData();

        //referenceing MapDisplay & TextureGen for noise and color with width & height
        MapDisplay display = FindObjectOfType <MapDisplay>();

        if (drawMode == DrawMode.NoiseMap)
        {
            display.DrawTexture(TextureGen.TextureFromHeight(mapData.heightMap));
        }
        else if (drawMode == DrawMode.ColorMap)
        {
            display.DrawTexture(TextureGen.TextureFromMap(mapData.colorMap, mapChunkSize, mapChunkSize));
        }
        else if (drawMode == DrawMode.Mesh)
        {
            display.DrawMesh(MeshGen.GenTerrain(mapData.heightMap, meshHeightMultipler, meshHeightCurve, levelOfDetail),
                             TextureGen.TextureFromMap(mapData.colorMap, mapChunkSize, mapChunkSize));
        }
    }
Beispiel #25
0
    // generates map using seed
    public void GenerateMap()
    {
        currentBiome    = Biome.forest;
        currentRooms    = new List <Room>();
        roomCoordinates = new List <List <Coord> >();
        hallCoordinates = new List <List <Coord> >();
        // GetComponent<Renderer>().material = walls;
        map = new int[currentBiome.width, currentBiome.height];
        RandomFillMap();

        for (int i = 0; i < currentBiome.smoothingIterations; i++)
        {
            SmoothMap();
        }

        ProcessMap();

        int borderSize = 15;         // sets border THICCness

        int[,] borderedMap = new int[currentBiome.width + borderSize * 2, currentBiome.height + borderSize * 2];

        for (int x = 0; x < borderedMap.GetLength(0); x++)
        {
            for (int y = 0; y < borderedMap.GetLength(1); y++)
            {
                if (x >= borderSize && x < currentBiome.width + borderSize && y >= borderSize && y < currentBiome.height + borderSize)
                {
                    borderedMap[x, y] = map[x - borderSize, y - borderSize];
                }
                else
                {
                    borderedMap[x, y] = 1;
                }
            }
        }

        MeshGen meshGen = GetComponent <MeshGen>();

        meshGen.GenerateMesh(borderedMap, 1);
    }
Beispiel #26
0
    void GenerateMap()
    {
        map = new int[width, height];
        RandomFillMap();

        for (int i = 0; i < smoothingIterations; i++)
        {
            SmoothMap();
        }

        ProcessMap();

        int borderSize = 5;         // sets border THICCness

        int[,] borderedMap = new int[width + borderSize * 2, height + borderSize * 2];

        for (int x = 0; x < borderedMap.GetLength(0); x++)
        {
            for (int y = 0; y < borderedMap.GetLength(1); y++)
            {
                if (x >= borderSize && x < width + borderSize && y >= borderSize && y < height + borderSize)
                {
                    borderedMap[x, y] = map[x - borderSize, y - borderSize];
                }
                else
                {
                    borderedMap[x, y] = 1;
                }
            }
        }

        //GenerateMapObjects(hazards, hazardParent, true);
        GenerateMapObjects(pickUps, pickupParent);
        PlacePlayer();

        MeshGen meshGen = GetComponent <MeshGen>();

        meshGen.GenerateMesh(borderedMap, 1);
    }
Beispiel #27
0
    public void DrawMapInEditor()
    {
        MapData mapdata = GenThatMapData(Vector2.zero);
        Map     map     = FindObjectOfType <Map>();

        if (drawMode == DrawMode.NoiseMap)
        {
            map.DrawTexture(TextureGen.TextureFromHeightMap(mapdata.heightMap));
        }
        else if (drawMode == DrawMode.ColorMap)
        {
            map.DrawTexture(TextureGen.TextureFromColorMap(mapdata.colorMap, mapChunkSize, mapChunkSize));
        }
        else if (drawMode == DrawMode.DrawMesh)
        {
            map.DrawMesh(MeshGen.GennerateTerrainMesh(mapdata.heightMap, meshHeight, meshHeightCurve, editorlevelOfDetail), TextureGen.TextureFromColorMap(mapdata.colorMap, mapChunkSize, mapChunkSize));
        }
        else if (drawMode == DrawMode.FallOffMap)
        {
            map.DrawTexture(TextureGen.TextureFromHeightMap(FalloffMapGenerator.GenerateFalloffMapp(mapChunkSize)));
        }
    }
    private void Start()
    {
        _meshMaterial = new Material(Shader.Find("Standard"));
        _minHeight    = float.MaxValue;
        _maxHeight    = float.MinValue;
        _prevSeed     = randomSeed;

        CreateChunks();

        Random.InitState(randomSeed);
        CreateOctaveOffsets(NumOctaves);


        // Generate height maps
        var heights = new float[numChunksX * numChunksY][, ];

        for (var i = 0; i < numChunksY; i++)
        {
            for (var j = 0; j < numChunksX; j++)
            {
                _chunks[i * numChunksY + j].transform.position =
                    new Vector3(j * (chunkWidth - 1), 0, i * (chunkLength - 1));
                heights[i * numChunksY + j] =
                    GenerateHeightMap(chunkLength, chunkWidth, i * (chunkWidth - 1), j * (chunkLength - 1));
            }
        }

        NormaliseHeightMaps(heights);

        // Create Meshes and Textures
        _meshTextures = new Texture2D[numChunksX * numChunksY];
        for (var i = 0; i < numChunksX * numChunksY; i++)
        {
            var meshData = MeshGen.GenerateTerrainMesh(heights[i], heightScale);
            _meshTextures[i] = TextureFromHeightMap(heights[i]);
            DrawMeshes(meshData, _meshTextures[i], i);
        }
    }
Beispiel #29
0
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GenerateMap();
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            SmoothMap(4, 5);
            Debug.Log("Smoothening");
            MeshGen meshGen = GetComponent <MeshGen>();
            meshGen.GenerateMesh(map, 1);
        }

        if (Input.GetMouseButton(1))
        {
            SmoothMap();
            Debug.Log("Smoothening");
            MeshGen meshGen = GetComponent <MeshGen>();
            meshGen.GenerateMesh(map, 1);
        }
    }
Beispiel #30
0
    public void GenerateMap()
    {
        float[,] noiseMap = Noise.GenerateNoiseMap(mapWidth, mapHeight, noiseScale, octaves,
                                                   persistence, lacunarity, seed, offset);

        Color[] colorMap = new Color[mapWidth * mapHeight];
        for (int y = 0; y < mapHeight; y++)
        {
            for (int x = 0; x < mapWidth; x++)
            {
                float currentHeight = noiseMap[x, y];
                for (int i = 0; i < regions.Length; i++)
                {
                    if (currentHeight < regions[i].height)
                    {
                        colorMap[(y * mapWidth) + x] = regions[i].color;
                        break;
                    }
                }
            }
        }
        MapDisplay display = FindObjectOfType <MapDisplay>();

        if (drawMode == DrawMode.NoiseMap)
        {
            display.DrawTexture(ColorTexture.TextureHeightMap(noiseMap));
        }
        else if (drawMode == DrawMode.ColorMap)
        {
            display.DrawTexture(ColorTexture.TextureColorMap(colorMap, mapWidth, mapHeight));
        }
        else if (drawMode == DrawMode.Mesh)
        {
            display.DrawMesh(MeshGen.TerrainMeshGen(noiseMap, heightMultiplier, meshHeightCurve),
                             ColorTexture.TextureColorMap(colorMap, mapWidth, mapHeight));
        }
    }