public BlockpartVisualizeInfo(ChunkPos i_pos, MeshVisualizeInfo i_meshVI, MeshType i_meshType, int i_materialID, byte i_meshRotation) { pos = i_pos; meshInfo = i_meshVI; meshType = i_meshType; materialID = i_materialID; meshRotation = i_meshRotation; }
public override bool Equals(object obj) { // Check for null values and compare run-time types. if (obj == null || GetType() != obj.GetType()) { return(false); } MeshVisualizeInfo p = (MeshVisualizeInfo)obj; return((faceIndex == p.faceIndex) & (illumination == p.illumination) & (materialType == p.materialType)); }
private void CreateBlockpartsRenderer(MeshVisualizeInfo mvi) { if (renderers.ContainsKey(mvi)) { return; } var processingIndexes = new List <int>(); for (int i = 0; i < blockVisualizersList.Count; i++) { if (blockVisualizersList[i].meshInfo == mvi) { processingIndexes.Add(i); } } int pcount = processingIndexes.Count; if (pcount > 0) { Mesh visibleMesh = new Mesh(), colliderMesh = new Mesh(); INLINE_CombineMeshes(ref processingIndexes, ref visibleMesh, ref colliderMesh); GameObject g = new GameObject(); //удаление копий вершин на стыках - отменено из-за uv var mf = g.AddComponent <MeshFilter>(); mf.sharedMesh = visibleMesh; var mr = g.AddComponent <MeshRenderer>(); mr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; mr.receiveShadows = PoolMaster.shadowCasting; mr.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off; mr.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off; if (!PoolMaster.useIlluminationSystem) { mr.sharedMaterial = PoolMaster.GetMaterial(mvi.materialType); } else { mr.sharedMaterial = PoolMaster.GetMaterial(mvi.materialType, mvi.illumination); } g.transform.parent = renderersHolders[mvi.faceIndex].transform; g.AddComponent <MeshCollider>().sharedMesh = colliderMesh; g.tag = BLOCK_COLLIDER_TAG; renderers.Add(mvi, g); } }
private void RedrawRenderer(MeshVisualizeInfo mvi) { GameObject g; renderers.TryGetValue(mvi, out g); if (g != null) { int n = blockVisualizersList.Count; if (n > 0) { var indexes = new List <int>(); for (int i = 0; i < n; i++) { if (blockVisualizersList[i].meshInfo == mvi) { indexes.Add(i); } } n = indexes.Count; if (n > 0) { Mesh visibleMesh = new Mesh(), colliderMesh = new Mesh(); INLINE_CombineMeshes(ref indexes, ref visibleMesh, ref colliderMesh); g.GetComponent <MeshFilter>().sharedMesh = visibleMesh; g.GetComponent <MeshCollider>().sharedMesh = colliderMesh; if (PoolMaster.useIlluminationSystem) { g.GetComponent <MeshRenderer>().sharedMaterial = PoolMaster.GetMaterial(mvi.materialType, mvi.illumination); } else { g.GetComponent <MeshRenderer>().sharedMaterial = PoolMaster.GetMaterial(mvi.materialType); } } else { renderers.Remove(mvi); Destroy(g); } } } else { CreateBlockpartsRenderer(mvi); } }
private void RedrawRenderer(MeshVisualizeInfo mvi) { GameObject g; renderers.TryGetValue(mvi, out g); if (g != null) { int n = blockVisualizersList.Count; if (n > 0) { var indexes = new List <int>(); for (int i = 0; i < n; i++) { if (blockVisualizersList[i].meshInfo == mvi) { indexes.Add(i); } } n = indexes.Count; if (n > 0) { CombineInstance[] cir = new CombineInstance[n], cic = new CombineInstance[n]; BlockpartVisualizeInfo bvi; Mesh cm; Matrix4x4 mtr; for (int i = 0; i < n; i++) { bvi = blockVisualizersList[indexes[i]]; cm = MeshMaster.GetMesh(bvi.meshType, bvi.materialID); cir[i].mesh = cm; mtr = bvi.GetPositionMatrix(); cir[i].transform = mtr; cic[i].mesh = bvi.meshType == MeshType.Quad ? cm : MeshMaster.GetMeshColliderLink(bvi.meshType); cic[i].transform = mtr; } cm = new Mesh(); cm.CombineMeshes(cir); g.GetComponent <MeshFilter>().sharedMesh = cm; cm = new Mesh(); cm.CombineMeshes(cic); g.GetComponent <MeshCollider>().sharedMesh = cm; if (PoolMaster.useIlluminationSystem) { g.GetComponent <MeshRenderer>().sharedMaterial = PoolMaster.GetMaterial(mvi.materialType, mvi.illumination); } else { g.GetComponent <MeshRenderer>().sharedMaterial = PoolMaster.GetMaterial(mvi.materialType); } } else { renderers.Remove(mvi); Destroy(g); } } } else { CreateBlockpartsRenderer(mvi); } }
private void CreateBlockpartsRenderer(MeshVisualizeInfo mvi) { if (renderers.ContainsKey(mvi)) { return; } var processingIndexes = new List <int>(); for (int i = 0; i < blockVisualizersList.Count; i++) { if (blockVisualizersList[i].meshInfo == mvi) { processingIndexes.Add(i); } } int pcount = processingIndexes.Count; if (pcount > 0) { var ci = new CombineInstance[pcount]; Mesh m; BlockpartVisualizeInfo cdata; for (int j = 0; j < pcount; j++) { cdata = blockVisualizersList[processingIndexes[j]]; m = MeshMaster.GetMesh(cdata.meshType, cdata.materialID); ci[j].mesh = m; ci[j].transform = cdata.GetPositionMatrix(); } GameObject g = new GameObject(); m = new Mesh(); m.CombineMeshes(ci, true); // все подмеши используют один материал //удаление копий вершин на стыках - отменено из-за uv var mf = g.AddComponent <MeshFilter>(); mf.sharedMesh = m; var mr = g.AddComponent <MeshRenderer>(); mr.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; mr.receiveShadows = PoolMaster.shadowCasting; mr.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off; mr.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off; if (!PoolMaster.useIlluminationSystem) { mr.sharedMaterial = PoolMaster.GetMaterial(mvi.materialType); } else { mr.sharedMaterial = PoolMaster.GetMaterial(mvi.materialType, mvi.illumination); } g.transform.parent = renderersHolders[mvi.faceIndex].transform; g.AddComponent <MeshCollider>().sharedMesh = m; g.tag = BLOCK_COLLIDER_TAG; renderers.Add(mvi, g); } }