public override object  OnChunkCreate(ChunkData cd, Vector3 pos)
    {
        if (cd == null)
        {
            return(null);
        }

        if (rainbow == null)
        {
            rainbow = PWUtils.CreateRainbowGradient();
        }

        TopDown2DData chunk = (TopDown2DData)cd;

        //create the terrain texture:
        //TODO: bind the blendMap with biome maps to the terrain shader
        //TODO: bind all vertex datas from the mesh

        GameObject g = CreateChunkObject(pos * terrainScale);

        g.transform.rotation   = Quaternion.identity;
        g.transform.localScale = Vector3.one * chunkSize * terrainScale;

        MeshRenderer mr = g.AddComponent <MeshRenderer>();
        MeshFilter   mf = g.AddComponent <MeshFilter>();

        if (topDownTerrainMesh == null || topDownTerrainMeshSize != chunkSize)
        {
            GenerateTopDownTerrainMesh();
        }

        UpdateMeshDatas(chunk.biomeMap);

        mf.sharedMesh = topDownTerrainMesh;

        Shader topDown2DBasicTerrainShader = Shader.Find("ProceduralWorlds/Basic terrain");

        if (topDown2DBasicTerrainShader == null)
        {
            topDown2DBasicTerrainShader = Shader.Find("Standard");
        }
        Material mat = new Material(topDown2DBasicTerrainShader);

        mat.SetTexture("_AlbedoMaps", chunk.albedoMaps);
        mr.sharedMaterial = mat;
        //TODO: vertex painting
        return(g);
    }
    public override void    OnChunkRender(ChunkData cd, object chunkGameObject, Vector3 pos)
    {
        if (cd == null)
        {
            return;
        }
        GameObject    g     = chunkGameObject as GameObject;
        TopDown2DData chunk = (TopDown2DData)cd;

        if (g == null)         //if gameobject have been destroyed by user and reference was lost.
        {
            chunkGameObject = RequestCreate(cd, pos);
            g = chunkGameObject as GameObject;
        }
        g.GetComponent <MeshRenderer>().sharedMaterial.SetTexture("_MainTex", chunk.texture);
    }
 public override void OnNodeCreate()
 {
     externalName  = "2D TopDown terrain";
     terrainOutput = new TopDown2DData();
 }