using System.IO;
using UnityEngine;

namespace MindPowerSdk
{
    public class MonoKopTest : MonoBehaviour
    {
        public string mapPath = "";
        public string mapName = "";

        public short chunkSize = 64;
        public MPMap map       = null;

        public Material terrainMaterial;
        public Material terrainMaterial2;

        void Start()
        {
            using FileStream fs     = File.OpenRead(Path.Combine(mapPath, mapName));
            BinaryReader     reader = new BinaryReader(fs);

            map = new MPMap();
            map.Load(reader);

            Debug.Log($"map size:({map.Width},{map.Height}) | section size:({map.SectionWidth},{map.SectionHeight})");
            // GenTerrainMesh();
            // TerrainGenerator.GenTerrain(map, chunkSize, terrainMaterial2, transform);
        }

        public void GenTerrainMesh()
        {
            // 自定义分块生成
            int xCnt = Mathf.CeilToInt((float)map.Width  / chunkSize);
            int yCnt = Mathf.CeilToInt((float)map.Height / chunkSize);

            for (short i = 0; i < yCnt; i++)
            {
                for (short j = 0; j < xCnt; j++)
                {
                    short x = (short)(j * chunkSize);
                    short y = (short)(i * chunkSize);

                    Mesh mesh = map.GenMesh(x, y, chunkSize);
                    (Texture2D texNo, Texture2D maskNo) = map.GenTxtNoTexture(x, y, chunkSize);

                    GameObject go = new GameObject("m_" + i);
                    // go.isStatic = true;

                    go.transform.parent = transform;

                    // Vector3 pos = Vector3.forward * map.Height;
                    // go.transform.position = pos;

                    // 设置材质
                    MeshRenderer meshRenderer = go.AddComponent<MeshRenderer>();
                    var          mat          = meshRenderer.material = new Material(terrainMaterial);
                    mat.SetTexture("_TexNo",  texNo);
                    mat.SetTexture("_MaskNo", maskNo);

                    MeshFilter meshFilter = go.AddComponent<MeshFilter>();
                    meshFilter.mesh = mesh;

#if UNITY_EDITOR
                    //AssetDatabase.CreateAsset(mesh, "Assets/Sandbox/map.mesh");

                    //(Texture2D t1, Texture2D t2) = map.GenTxtNoTexture(x, y, chunkSize);
                    //byte[] png = t1.EncodeToPNG();
                    //File.WriteAllBytes($"Assets/Sandbox/map_tex_no.png", png);

                    //png = t2.EncodeToPNG();
                    //File.WriteAllBytes($"Assets/Sandbox/map_alph_no.png", png);
#endif
                }
            }
        }
    }
}