public bool ShowFileMapRegion(string filename) { if (_lastFileMapRegionName != filename) { FileMapRegion newFile = new FileMapRegion(); try { byte[] region_data = Util.ReadFile(filename); if (!newFile.ReadFromMemory(region_data)) { HobaDebuger.LogWarning("ShowFileMapRegion, Failed to load " + filename); return(false); } } catch (Exception) { HobaDebuger.LogWarning("ShowFileMapRegion, Failed to load " + filename); return(false); } _fileMapRegion = newFile; _lastFileMapRegionName = filename; } for (int i = 0; i < _mapRegionGameObjList.Count; ++i) { GameObject go = _mapRegionGameObjList[i]; if (go != null) { GameObject.Destroy(go); } } _mapRegionGameObjList.Clear(); List <int> Keys = new List <int>(_fileMapRegion.RegionMap.Keys); for (int i = 0; i < Keys.Count; ++i) { FileRegion fileRegion = _fileMapRegion.RegionMap[Keys[i]]; // HashSet <uint> regionGridSet = fileRegion.RegionGridSet; List <Vector3> vertices = new List <Vector3>(); List <int> triangles = new List <int>(); Vector3[] vGrid = new Vector3[4]; int voffset = 0; foreach (uint v in regionGridSet) { if (vertices.Count + 4 > 60000) //split { int index = _mapRegionGameObjList.Count; GameObject go = new GameObject(HobaText.Format("MapRegionGameObj_{0}_{1}", Keys[i], index)); MeshRenderer meshRenderer = go.AddComponent <MeshRenderer>(); meshRenderer.enabled = true; meshRenderer.name = HobaText.Format("MapRegionGameObj_{0}_{1}", Keys[i], index); meshRenderer.material.shader = Shader.Find("Legacy Shaders/Bumped Diffuse"); meshRenderer.material.color = GetMeshColor(Keys[i]); CUnityUtil.DisableLightAndShadow(meshRenderer); MeshFilter meshFilter = go.AddComponent <MeshFilter>(); meshFilter.sharedMesh = new Mesh(); meshFilter.sharedMesh.name = HobaText.Format("MeshFilterMesh_{0}_{1}", Keys[i], index); meshFilter.sharedMesh.vertices = vertices.ToArray(); meshFilter.sharedMesh.triangles = triangles.ToArray(); _mapRegionGameObjList.Add(go); vertices.Clear(); triangles.Clear(); voffset = 0; } uint row = (v & 0xffff0000) >> 16; uint col = (v & 0xffff); _fileMapRegion.GetGridPositions(row, col, vGrid, 0); float fH0 = CUnityUtil.GetMapHeight(vGrid[0]); float fH1 = CUnityUtil.GetMapHeight(vGrid[1]); float fH2 = CUnityUtil.GetMapHeight(vGrid[2]); float fH3 = CUnityUtil.GetMapHeight(vGrid[3]); // if (fH0 == 0.0f || fH1 == 0.0f || fH2 == 0.0f || fH3 == 0.0f) // continue; vGrid[0].y = fH0 + 0.1f; vGrid[1].y = fH1 + 0.1f; vGrid[2].y = fH2 + 0.1f; vGrid[3].y = fH3 + 0.1f; vertices.Add(vGrid[0]); vertices.Add(vGrid[1]); vertices.Add(vGrid[2]); vertices.Add(vGrid[3]); triangles.Add(voffset + 0); triangles.Add(voffset + 1); triangles.Add(voffset + 2); triangles.Add(voffset + 3); triangles.Add(voffset + 2); triangles.Add(voffset + 1); voffset += 4; } if (vertices.Count > 0) { int index = _mapRegionGameObjList.Count; GameObject go = new GameObject(HobaText.Format("MapRegionGameObj_{0}_{1}", Keys[i], index)); MeshRenderer meshRenderer = go.AddComponent <MeshRenderer>(); meshRenderer.enabled = true; meshRenderer.name = HobaText.Format("MapRegionGameObj_{0}_{1}", Keys[i], index); meshRenderer.material.shader = Shader.Find("Legacy Shaders/Bumped Diffuse"); meshRenderer.material.color = GetMeshColor(Keys[i]); CUnityUtil.DisableLightAndShadow(meshRenderer); MeshFilter meshFilter = go.AddComponent <MeshFilter>(); meshFilter.sharedMesh = new Mesh(); meshFilter.sharedMesh.name = HobaText.Format("MeshFilterMesh_{0}_{1}", Keys[i], index); meshFilter.sharedMesh.vertices = vertices.ToArray(); meshFilter.sharedMesh.triangles = triangles.ToArray(); _mapRegionGameObjList.Add(go); vertices.Clear(); triangles.Clear(); voffset = 0; } } return(true); }
public bool CreateNavMesh() { if (_LineGameObj != null) { GameObject.Destroy(_LineGameObj); _LineGameObj = null; } if (_LineGameObj == null) { _LineGameObj = new GameObject("LineGameObj"); } for (int i = 0; i < _navMeshGameObjList.Count; ++i) { GameObject go = _navMeshGameObjList[i]; if (go != null) { GameObject.Destroy(go); } } _navMeshGameObjList.Clear(); LineRenderer lineRenderer = _LineGameObj.AddComponent <LineRenderer>(); lineRenderer.useWorldSpace = true; lineRenderer.startWidth = 0.05f; lineRenderer.endWidth = 0.05f; lineRenderer.enabled = false; CUnityUtil.DisableLightAndShadow(lineRenderer); //ground { LuaInterface.SamplePolyAreas area = LuaInterface.SamplePolyAreas.SAMPLE_POLYAREA_GROUND; Vector3[] vertices; int[] triangles; //Load NavMesh { int vCont; int iCont; NavMeshManager m_navMeshMan = NavMeshManager.Instance; m_navMeshMan.GetNavMeshVertexIndexCount(out vCont, out iCont, area); vertices = new Vector3[vCont]; triangles = new int[iCont]; m_navMeshMan.FillNavMeshVertexIndexBuffer(vertices, vCont, triangles, iCont, area); } CUnityUtil.SMeshData meshData = new CUnityUtil.SMeshData(); meshData.vertices = vertices; meshData.indices = triangles; List <CUnityUtil.SMeshData> listMeshData = new List <CUnityUtil.SMeshData>(); CUnityUtil.SplitMeshData(meshData, listMeshData); Color color = new Color(0, 0.75f, 1.0f); for (int i = 0; i < listMeshData.Count; ++i) { GameObject go = new GameObject(HobaText.Format("NavMeshGameObj_{0}_{1}", (int)area, i)); MeshRenderer meshRenderer = go.AddComponent <MeshRenderer>(); meshRenderer.enabled = false; meshRenderer.name = HobaText.Format("MeshRenderer_{0}_{1}", (int)area, i); meshRenderer.material.shader = Shader.Find("Legacy Shaders/Bumped Diffuse"); meshRenderer.material.color = color; CUnityUtil.DisableLightAndShadow(meshRenderer); MeshFilter meshFilter = go.AddComponent <MeshFilter>(); meshFilter.sharedMesh = new Mesh(); meshFilter.sharedMesh.name = HobaText.Format("MeshFilterMesh_{0}_{1}", (int)area, i); meshFilter.sharedMesh.vertices = listMeshData[i].vertices; meshFilter.sharedMesh.triangles = listMeshData[i].indices; _navMeshGameObjList.Add(go); } } //grass { LuaInterface.SamplePolyAreas area = LuaInterface.SamplePolyAreas.SAMPLE_POLYAREA_GRASS; Vector3[] vertices; int[] triangles; //Load NavMesh { int vCont; int iCont; NavMeshManager m_navMeshMan = NavMeshManager.Instance; m_navMeshMan.GetNavMeshVertexIndexCount(out vCont, out iCont, area); vertices = new Vector3[vCont]; triangles = new int[iCont]; m_navMeshMan.FillNavMeshVertexIndexBuffer(vertices, vCont, triangles, iCont, area); } CUnityUtil.SMeshData meshData = new CUnityUtil.SMeshData(); meshData.vertices = vertices; meshData.indices = triangles; List <CUnityUtil.SMeshData> listMeshData = new List <CUnityUtil.SMeshData>(); CUnityUtil.SplitMeshData(meshData, listMeshData); Color color = new Color(0, 0.75f, 0.25f); for (int i = 0; i < listMeshData.Count; ++i) { GameObject go = new GameObject(HobaText.Format("NavMeshGameObj_{0}_{1}", (int)area, i)); MeshRenderer meshRenderer = go.AddComponent <MeshRenderer>(); meshRenderer.enabled = false; meshRenderer.name = HobaText.Format("MeshRenderer_{0}_{1}", (int)area, i); meshRenderer.material.shader = Shader.Find("Legacy Shaders/Bumped Diffuse"); meshRenderer.material.color = color; CUnityUtil.DisableLightAndShadow(meshRenderer); MeshFilter meshFilter = go.AddComponent <MeshFilter>(); meshFilter.sharedMesh = new Mesh(); meshFilter.sharedMesh.name = HobaText.Format("MeshFilterMesh_{0}_{1}", (int)area, i); meshFilter.sharedMesh.vertices = listMeshData[i].vertices; meshFilter.sharedMesh.triangles = listMeshData[i].indices; _navMeshGameObjList.Add(go); } } //road { LuaInterface.SamplePolyAreas area = LuaInterface.SamplePolyAreas.SAMPLE_POLYAREA_ROAD; Vector3[] vertices; int[] triangles; //Load NavMesh { int vCont; int iCont; NavMeshManager m_navMeshMan = NavMeshManager.Instance; m_navMeshMan.GetNavMeshVertexIndexCount(out vCont, out iCont, area); vertices = new Vector3[vCont]; triangles = new int[iCont]; m_navMeshMan.FillNavMeshVertexIndexBuffer(vertices, vCont, triangles, iCont, area); } CUnityUtil.SMeshData meshData = new CUnityUtil.SMeshData(); meshData.vertices = vertices; meshData.indices = triangles; List <CUnityUtil.SMeshData> listMeshData = new List <CUnityUtil.SMeshData>(); CUnityUtil.SplitMeshData(meshData, listMeshData); Color color = new Color(0.75f, 0.25f, 0f); for (int i = 0; i < listMeshData.Count; ++i) { GameObject go = new GameObject(HobaText.Format("NavMeshGameObj_{0}_{1}", (int)area, i)); MeshRenderer meshRenderer = go.AddComponent <MeshRenderer>(); meshRenderer.enabled = false; meshRenderer.name = HobaText.Format("MeshRenderer_{0}_{1}", (int)area, i); meshRenderer.material.shader = Shader.Find("Legacy Shaders/Bumped Diffuse"); meshRenderer.material.color = color; CUnityUtil.DisableLightAndShadow(meshRenderer); MeshFilter meshFilter = go.AddComponent <MeshFilter>(); meshFilter.sharedMesh = new Mesh(); meshFilter.sharedMesh.name = HobaText.Format("MeshFilterMesh_{0}_{1}", (int)area, i); meshFilter.sharedMesh.vertices = listMeshData[i].vertices; meshFilter.sharedMesh.triangles = listMeshData[i].indices; _navMeshGameObjList.Add(go); } } //Default false /* showNavMesh(true);*/ return(true); }