protected void AddFace(NBTMesh mesh, FaceAttributes fa, CubeAttributes ca) { UnityEngine.Profiling.Profiler.BeginSample("AddFace"); ushort startIndex = mesh.vertexCount; if (fa.skyLight == null) { fa.skyLight = skylight_default; } if (fa.blockLight == null) { fa.blockLight = blocklight_default; } SetVertex(mesh, fa.pos[0] + ca.pos, fa.faceIndex, fa.uv[0], fa.skyLight[0], fa.blockLight[0], fa.color, fa.normal); SetVertex(mesh, fa.pos[1] + ca.pos, fa.faceIndex, fa.uv[1], fa.skyLight[1], fa.blockLight[1], fa.color, fa.normal); SetVertex(mesh, fa.pos[2] + ca.pos, fa.faceIndex, fa.uv[2], fa.skyLight[2], fa.blockLight[2], fa.color, fa.normal); SetVertex(mesh, fa.pos[3] + ca.pos, fa.faceIndex, fa.uv[3], fa.skyLight[3], fa.blockLight[3], fa.color, fa.normal); mesh.triangleArray[mesh.triangleCount++] = startIndex; mesh.triangleArray[mesh.triangleCount++] = (ushort)(startIndex + 1); mesh.triangleArray[mesh.triangleCount++] = (ushort)(startIndex + 2); mesh.triangleArray[mesh.triangleCount++] = startIndex; mesh.triangleArray[mesh.triangleCount++] = (ushort)(startIndex + 2); mesh.triangleArray[mesh.triangleCount++] = (ushort)(startIndex + 3); UnityEngine.Profiling.Profiler.EndSample(); }
public override Mesh GetItemMesh(NBTChunk chunk, Vector3Int pos, byte blockData) { CubeAttributes ca = new CubeAttributes(); ca.blockData = blockData; NBTMesh nbtMesh = new NBTMesh(256); chunk.GetLights(pos.x - chunk.x * 16, pos.y, pos.z - chunk.z * 16, out float skyLight, out float blockLight); FaceAttributes fa = new FaceAttributes(); fa.faceIndex = TextureArrayManager.GetIndexByName(GetNameByData(blockData)); fa.skyLight = new float[] { skyLight, skyLight, skyLight, skyLight }; fa.blockLight = new float[] { blockLight, blockLight, blockLight, blockLight }; fa.color = Color.white; FillMesh(fa, ca, nbtMesh); nbtMesh.Refresh(); nbtMesh.Dispose(); return(nbtMesh.mesh); }
void FillMesh(NBTChunk chunk, CubeAttributes ca, NBTMesh nbtMesh) { chunk.GetLights(ca.pos.x, ca.pos.y, ca.pos.z, out float skyLight, out float blockLight); FaceAttributes fa = new FaceAttributes(); fa.faceIndex = TextureArrayManager.GetIndexByName("ladder"); fa.color = Color.white; fa.skyLight = new float[] { skyLight, skyLight, skyLight, skyLight }; fa.blockLight = new float[] { blockLight, blockLight, blockLight, blockLight }; fa.normal = Vector3.zero; fa.uv = uv_zero; if (ca.blockData == 2) { fa.pos = frontFace; AddFace(nbtMesh, fa, ca); } else if (ca.blockData == 3) { fa.pos = backFace; AddFace(nbtMesh, fa, ca); } else if (ca.blockData == 4) { fa.pos = leftFace; AddFace(nbtMesh, fa, ca); } else if (ca.blockData == 5) { fa.pos = rightFace; AddFace(nbtMesh, fa, ca); } }
public override Mesh GetItemMesh(byte data = 0) { CubeAttributes ca = new CubeAttributes(); NBTMesh nbtMesh = new NBTMesh(256); FaceAttributes fa = new FaceAttributes(); //fa.skyLight = skylight_default; //fa.blockLight = blocklight_default; fa.color = Color.white; fa.uv = uv_zero; try { fa.pos = frontVertices; fa.normal = Vector3.forward; fa.faceIndex = TextureArrayManager.GetIndexByName(frontName); AddFace(nbtMesh, fa, ca); fa.pos = backVertices; fa.normal = Vector3.back; fa.faceIndex = TextureArrayManager.GetIndexByName(backName); AddFace(nbtMesh, fa, ca); fa.pos = topVertices; fa.normal = Vector3.up; fa.faceIndex = TextureArrayManager.GetIndexByName(topName); fa.color = TintManager.tintColor; AddFace(nbtMesh, fa, ca); fa.color = Color.white; fa.pos = bottomVertices; fa.normal = Vector3.down; fa.faceIndex = TextureArrayManager.GetIndexByName(bottomName); AddFace(nbtMesh, fa, ca); fa.pos = leftVertices; fa.normal = Vector3.left; fa.faceIndex = TextureArrayManager.GetIndexByName(leftName); AddFace(nbtMesh, fa, ca); fa.pos = rightVertices; fa.normal = Vector3.right; fa.faceIndex = TextureArrayManager.GetIndexByName(rightName); AddFace(nbtMesh, fa, ca); } catch (System.Exception e) { Debug.LogError("GetItemMesh error,generator=" + GetType() + ",message=\n" + e.Message); } nbtMesh.Refresh(); nbtMesh.Dispose(); return(nbtMesh.mesh); }
void AddAntiDiagonalFace(NBTChunk chunk, NBTMesh mesh, CubeAttributes ca) { chunk.GetLights(ca.pos.x, ca.pos.y, ca.pos.z, out float skyLight, out float blockLight); antidiagonalFA.pos = antiDiagonalFace; antidiagonalFA.faceIndex = GetPlantIndexByData(chunk, ca.pos, ca.blockData); antidiagonalFA.color = GetTintColorByData(chunk, ca.pos, ca.blockData); antidiagonalFA.skyLight[0] = skyLight; antidiagonalFA.skyLight[1] = skyLight; antidiagonalFA.skyLight[2] = skyLight; antidiagonalFA.skyLight[3] = skyLight; antidiagonalFA.blockLight[0] = blockLight; antidiagonalFA.blockLight[1] = blockLight; antidiagonalFA.blockLight[2] = blockLight; antidiagonalFA.blockLight[3] = blockLight; antidiagonalFA.normal = Vector3.zero; antidiagonalFA.uv = uv_plant; AddFace(mesh, antidiagonalFA, ca); }
protected void InitBlockAttributes(NBTChunk chunk, ref CubeAttributes ca) { UnityEngine.Profiling.Profiler.BeginSample("InitBlockAttributes"); ca.front = InitBlockLightAttributes(chunk, ca.pos.x, ca.pos.y, ca.pos.z - 1); ca.back = InitBlockLightAttributes(chunk, ca.pos.x, ca.pos.y, ca.pos.z + 1); ca.left = InitBlockLightAttributes(chunk, ca.pos.x - 1, ca.pos.y, ca.pos.z); ca.right = InitBlockLightAttributes(chunk, ca.pos.x + 1, ca.pos.y, ca.pos.z); ca.top = InitBlockLightAttributes(chunk, ca.pos.x, ca.pos.y + 1, ca.pos.z); ca.bottom = InitBlockLightAttributes(chunk, ca.pos.x, ca.pos.y - 1, ca.pos.z); if (ca.front.exist == 0 || ca.back.exist == 0 || ca.left.exist == 0 || ca.right.exist == 0 || ca.top.exist == 0 || ca.bottom.exist == 0) { ca.frontTop = InitBlockLightAttributes(chunk, ca.pos.x, ca.pos.y + 1, ca.pos.z - 1); ca.frontBottom = InitBlockLightAttributes(chunk, ca.pos.x, ca.pos.y - 1, ca.pos.z - 1); ca.frontLeft = InitBlockLightAttributes(chunk, ca.pos.x - 1, ca.pos.y, ca.pos.z - 1); ca.frontRight = InitBlockLightAttributes(chunk, ca.pos.x + 1, ca.pos.y, ca.pos.z - 1); ca.frontTopLeft = InitBlockLightAttributes(chunk, ca.pos.x - 1, ca.pos.y + 1, ca.pos.z - 1); ca.frontTopRight = InitBlockLightAttributes(chunk, ca.pos.x + 1, ca.pos.y + 1, ca.pos.z - 1); ca.frontBottomLeft = InitBlockLightAttributes(chunk, ca.pos.x - 1, ca.pos.y - 1, ca.pos.z - 1); ca.frontBottomRight = InitBlockLightAttributes(chunk, ca.pos.x + 1, ca.pos.y - 1, ca.pos.z - 1); ca.backTop = InitBlockLightAttributes(chunk, ca.pos.x, ca.pos.y + 1, ca.pos.z + 1); ca.backBottom = InitBlockLightAttributes(chunk, ca.pos.x, ca.pos.y - 1, ca.pos.z + 1); ca.backLeft = InitBlockLightAttributes(chunk, ca.pos.x - 1, ca.pos.y, ca.pos.z + 1); ca.backRight = InitBlockLightAttributes(chunk, ca.pos.x + 1, ca.pos.y, ca.pos.z + 1); ca.backTopLeft = InitBlockLightAttributes(chunk, ca.pos.x - 1, ca.pos.y + 1, ca.pos.z + 1); ca.backTopRight = InitBlockLightAttributes(chunk, ca.pos.x + 1, ca.pos.y + 1, ca.pos.z + 1); ca.backBottomLeft = InitBlockLightAttributes(chunk, ca.pos.x - 1, ca.pos.y - 1, ca.pos.z + 1); ca.backBottomRight = InitBlockLightAttributes(chunk, ca.pos.x + 1, ca.pos.y - 1, ca.pos.z + 1); ca.topLeft = InitBlockLightAttributes(chunk, ca.pos.x - 1, ca.pos.y + 1, ca.pos.z); ca.topRight = InitBlockLightAttributes(chunk, ca.pos.x + 1, ca.pos.y + 1, ca.pos.z); ca.bottomLeft = InitBlockLightAttributes(chunk, ca.pos.x - 1, ca.pos.y - 1, ca.pos.z); ca.bottomRight = InitBlockLightAttributes(chunk, ca.pos.x + 1, ca.pos.y - 1, ca.pos.z); } UnityEngine.Profiling.Profiler.EndSample(); }
public override Mesh GetItemMesh(byte data = 0) { CubeAttributes ca = new CubeAttributes(); ca.blockData = data; NBTMesh nbtMesh = new NBTMesh(256); FaceAttributes fa = new FaceAttributes(); fa.faceIndex = TextureArrayManager.GetIndexByName(GetNameByData(data)); fa.skyLight = skylight_default; fa.blockLight = blocklight_default; fa.color = Color.white; FillMesh(fa, ca, nbtMesh); nbtMesh.Refresh(); nbtMesh.Dispose(); return(nbtMesh.mesh); }
protected override FaceAttributes GetRightFaceAttributes(NBTChunk chunk, NBTMesh mesh, CubeAttributes ca) { chunk.GetLights(ca.pos.x + 1, ca.pos.y, ca.pos.z, out float skyLight, out float blockLight); FaceAttributes fa = new FaceAttributes(); if (ca.blockData >= 8) { fa.pos = rightVertices_top; fa.uv = uv_top; } else { fa.pos = rightVertices_bottom; fa.uv = uv_bot; } fa.faceIndex = GetRightIndexByData(chunk, ca.blockData); fa.color = GetRightTintColorByData(chunk, ca.pos, ca.blockData); fa.skyLight = new float[] { skyLight, skyLight, skyLight, skyLight }; fa.blockLight = new float[] { blockLight, blockLight, blockLight, blockLight }; fa.normal = Vector3.right; return(fa); }
void FillMesh(FaceAttributes fa, CubeAttributes ca, NBTMesh nbtMesh) { if (ca.blockData >= 8) { fa.pos = frontVertices_top; fa.uv = uv_top; } else { fa.pos = frontVertices_bottom; fa.uv = uv_bot; } fa.normal = Vector3.forward; AddFace(nbtMesh, fa, ca); if (ca.blockData >= 8) { fa.pos = backVertices_top; fa.uv = uv_top; } else { fa.pos = backVertices_bottom; fa.uv = uv_bot; } fa.normal = Vector3.back; AddFace(nbtMesh, fa, ca); if (ca.blockData >= 8) { fa.pos = topVertices_top; } else { fa.pos = topVertices_bottom; } fa.uv = uv_full; fa.normal = Vector3.up; AddFace(nbtMesh, fa, ca); fa.color = Color.white; if (ca.blockData >= 8) { fa.pos = bottomVertices_top; } else { fa.pos = bottomVertices_bottom; } fa.uv = uv_full; fa.normal = Vector3.down; AddFace(nbtMesh, fa, ca); if (ca.blockData >= 8) { fa.pos = leftVertices_top; fa.uv = uv_top; } else { fa.pos = leftVertices_bottom; fa.uv = uv_bot; } fa.normal = Vector3.left; AddFace(nbtMesh, fa, ca); if (ca.blockData >= 8) { fa.pos = rightVertices_top; fa.uv = uv_top; } else { fa.pos = rightVertices_bottom; fa.uv = uv_bot; } fa.normal = Vector3.right; AddFace(nbtMesh, fa, ca); }
// for break effect & drop item (will be affected by light) public override Mesh GetItemMesh(NBTChunk chunk, Vector3Int pos, byte blockData) { CubeAttributes ca = new CubeAttributes(); //ca.pos = pos; ca.blockData = blockData; NBTMesh nbtMesh = new NBTMesh(256); chunk.GetLights(pos.x - chunk.x * 16, pos.y, pos.z - chunk.z * 16, out float skyLight, out float blockLight); FaceAttributes fa = new FaceAttributes(); fa.skyLight = new float[] { skyLight, skyLight, skyLight, skyLight }; fa.blockLight = new float[] { blockLight, blockLight, blockLight, blockLight }; fa.uv = uv_zero; try { fa.pos = frontVertices; fa.normal = Vector3.forward; fa.faceIndex = GetFrontIndexByData(chunk, ca.blockData); fa.color = GetFrontTintColorByData(chunk, pos, ca.blockData); AddFace(nbtMesh, fa, ca); fa.pos = backVertices; fa.normal = Vector3.back; fa.faceIndex = GetBackIndexByData(chunk, ca.blockData); fa.color = GetBackTintColorByData(chunk, pos, ca.blockData); AddFace(nbtMesh, fa, ca); fa.pos = topVertices; fa.normal = Vector3.up; fa.faceIndex = GetTopIndexByData(chunk, ca.blockData); fa.color = GetTopTintColorByData(chunk, pos, ca.blockData); AddFace(nbtMesh, fa, ca); fa.pos = bottomVertices; fa.normal = Vector3.down; fa.faceIndex = GetBottomIndexByData(chunk, ca.blockData); fa.color = GetBottomTintColorByData(chunk, pos, ca.blockData); AddFace(nbtMesh, fa, ca); fa.pos = leftVertices; fa.normal = Vector3.left; fa.faceIndex = GetLeftIndexByData(chunk, ca.blockData); fa.color = GetLeftTintColorByData(chunk, pos, ca.blockData); AddFace(nbtMesh, fa, ca); fa.pos = rightVertices; fa.normal = Vector3.right; fa.faceIndex = GetRightIndexByData(chunk, ca.blockData); fa.color = GetRightTintColorByData(chunk, pos, ca.blockData); AddFace(nbtMesh, fa, ca); } catch (System.Exception e) { Debug.LogError("GetItemMesh error,generator=" + GetType() + ",message=\n" + e.Message); } nbtMesh.Refresh(); nbtMesh.Dispose(); return(nbtMesh.mesh); }
public override Mesh GetItemMesh(byte data = 0) { CubeAttributes ca = new CubeAttributes(); NBTMesh nbtMesh = new NBTMesh(256); FaceAttributes fa = new FaceAttributes(); fa.skyLight = skylight_default; fa.blockLight = blocklight_default; try { fa.pos = frontVertices; fa.normal = Vector3.forward; fa.faceIndex = GetFrontIndexByData(null, data); fa.uv = GetFrontRotationByData(data) == Rotation.Right ? uv_right : uv_zero; fa.color = GetFrontTintColorByData(data); AddFace(nbtMesh, fa, ca); fa.pos = backVertices; fa.normal = Vector3.back; fa.faceIndex = GetBackIndexByData(null, data); fa.uv = GetBackRotationByData(data) == Rotation.Right ? uv_right : uv_zero; fa.color = GetBackTintColorByData(data); AddFace(nbtMesh, fa, ca); fa.pos = topVertices; fa.normal = Vector3.up; fa.faceIndex = GetTopIndexByData(null, data); fa.uv = GetTopRotationByData(data) == Rotation.Right ? uv_right : uv_zero; fa.color = GetTopTintColorByData(data); AddFace(nbtMesh, fa, ca); fa.pos = bottomVertices; fa.normal = Vector3.down; fa.faceIndex = GetBottomIndexByData(null, data); fa.uv = GetBottomRotationByData(data) == Rotation.Right ? uv_right : uv_zero; fa.color = GetBottomTintColorByData(data); AddFace(nbtMesh, fa, ca); fa.pos = leftVertices; fa.normal = Vector3.left; fa.faceIndex = GetLeftIndexByData(null, data); fa.uv = GetLeftRotationByData(data) == Rotation.Right ? uv_right : uv_zero; fa.color = GetLeftTintColorByData(data); AddFace(nbtMesh, fa, ca); fa.pos = rightVertices; fa.normal = Vector3.right; fa.faceIndex = GetRightIndexByData(null, data); fa.uv = GetRightRotationByData(data) == Rotation.Right ? uv_right : uv_zero; fa.color = GetRightTintColorByData(data); AddFace(nbtMesh, fa, ca); } catch (System.Exception e) { Debug.LogError("GetItemMesh error,generator=" + GetType() + ",message=\n" + e.Message); } nbtMesh.Refresh(); nbtMesh.Dispose(); return(nbtMesh.mesh); }
protected override FaceAttributes GetLeftFaceAttributes(NBTChunk chunk, NBTMesh mesh, CubeAttributes ca) { chunk.GetLights(ca.pos.x - 1, ca.pos.y, ca.pos.z, out float skyLight, out float blockLight); FaceAttributes fa = new FaceAttributes(); fa.pos = leftVertices_snow; fa.faceIndex = GetLeftIndexByData(chunk, ca.blockData); fa.color = GetLeftTintColorByData(chunk, ca.pos, ca.blockData); fa.skyLight = new float[] { skyLight, skyLight, skyLight, skyLight }; fa.blockLight = new float[] { blockLight, blockLight, blockLight, blockLight }; fa.normal = Vector3.left; fa.uv = uv_bot; return(fa); }
protected virtual FaceAttributes GetRightFaceAttributes(NBTChunk chunk, NBTMesh mesh, CubeAttributes ca) { UnityEngine.Profiling.Profiler.BeginSample("GetRightFaceAttributes"); rightFA.pos = rightVertices; rightFA.faceIndex = GetRightIndexByData(chunk, ca.blockData); rightFA.color = GetRightTintColorByData(chunk, ca.pos, ca.blockData); rightFA.normal = Vector3.right; //nearBottomRight, nearTopRight, farTopRight, farBottomRight rightFA.skyLight[0] = (ca.right.skyLight + ca.frontRight.skyLight + ca.bottomRight.skyLight + ca.frontBottomRight.skyLight) / 60.0f; rightFA.skyLight[1] = (ca.right.skyLight + ca.frontRight.skyLight + ca.topRight.skyLight + ca.frontTopRight.skyLight) / 60.0f; rightFA.skyLight[2] = (ca.right.skyLight + ca.backRight.skyLight + ca.topRight.skyLight + ca.backTopRight.skyLight) / 60.0f; rightFA.skyLight[3] = (ca.right.skyLight + ca.backRight.skyLight + ca.bottomRight.skyLight + ca.backBottomRight.skyLight) / 60.0f; rightFA.blockLight[0] = (ca.right.blockLight + ca.frontRight.blockLight + ca.bottomRight.blockLight + ca.frontBottomRight.blockLight) / 60.0f; rightFA.blockLight[1] = (ca.right.blockLight + ca.frontRight.blockLight + ca.topRight.blockLight + ca.frontTopRight.blockLight) / 60.0f; rightFA.blockLight[2] = (ca.right.blockLight + ca.backRight.blockLight + ca.topRight.blockLight + ca.backTopRight.blockLight) / 60.0f; rightFA.blockLight[3] = (ca.right.blockLight + ca.backRight.blockLight + ca.bottomRight.blockLight + ca.backBottomRight.blockLight) / 60.0f; Rotation rotation = GetFrontRotationByData(ca.blockData); if (rotation == Rotation.Right) { rightFA.uv = uv_right; } else { rightFA.uv = uv_zero; } UnityEngine.Profiling.Profiler.EndSample(); return(rightFA); }
protected virtual FaceAttributes GetBackFaceAttributes(NBTChunk chunk, NBTMesh mesh, CubeAttributes ca) { UnityEngine.Profiling.Profiler.BeginSample("GetBackFaceAttributes"); backFA.pos = backVertices; backFA.faceIndex = GetBackIndexByData(chunk, ca.blockData); backFA.color = GetBackTintColorByData(chunk, ca.pos, ca.blockData); backFA.normal = Vector3.back; //farBottomRight, farTopRight, farTopLeft, farBottomLeft backFA.skyLight[0] = (ca.back.skyLight + ca.backBottom.skyLight + ca.backRight.skyLight + ca.backBottomRight.skyLight) / 60.0f; backFA.skyLight[1] = (ca.back.skyLight + ca.backTop.skyLight + ca.backRight.skyLight + ca.backTopRight.skyLight) / 60.0f; backFA.skyLight[2] = (ca.back.skyLight + ca.backTop.skyLight + ca.backLeft.skyLight + ca.backTopLeft.skyLight) / 60.0f; backFA.skyLight[3] = (ca.back.skyLight + ca.backBottom.skyLight + ca.backLeft.skyLight + ca.backBottomLeft.skyLight) / 60.0f; backFA.blockLight[0] = (ca.back.blockLight + ca.backBottom.blockLight + ca.backRight.blockLight + ca.backBottomRight.blockLight) / 60.0f; backFA.blockLight[1] = (ca.back.blockLight + ca.backTop.blockLight + ca.backRight.blockLight + ca.backTopRight.blockLight) / 60.0f; backFA.blockLight[2] = (ca.back.blockLight + ca.backTop.blockLight + ca.backLeft.blockLight + ca.backTopLeft.blockLight) / 60.0f; backFA.blockLight[3] = (ca.back.blockLight + ca.backBottom.blockLight + ca.backLeft.blockLight + ca.backBottomLeft.blockLight) / 60.0f; Rotation rotation = GetFrontRotationByData(ca.blockData); if (rotation == Rotation.Right) { backFA.uv = uv_right; } else { backFA.uv = uv_zero; } UnityEngine.Profiling.Profiler.EndSample(); return(backFA); }
public Cube(float _length) { Source = new CubeData(_length); Attributes = new CubeAttributes(); }
// upper door // 0x1: 0 if hinge is on the left (the default), 1 if on the right // 0x2: 0 if unpowered, 1 if powered // 0x4: unused // 0x8: Always 1 for the upper part of a door. // lower door // 0x1,0x2: Two bits storing a value from 0 to 3 specifying the direction the door is facing: // 0: Facing east // 1: Facing south // 2: Facing west // 3: Facing north // 0x4: 0 if the entire door is closed, 1 if open. // 0x8: Always 0 for the lower part of a door. void FillMesh(NBTChunk chunk, CubeAttributes ca, NBTMesh nbtMesh) { float skyLight, blockLight; if (ca.isItemMesh) { chunk.GetLights(ca.worldPos.x, ca.worldPos.y, ca.worldPos.z, out skyLight, out blockLight); } else { chunk.GetLights(ca.pos.x, ca.pos.y, ca.pos.z, out skyLight, out blockLight); } FaceAttributes fa = new FaceAttributes(); fa.color = Color.white; fa.skyLight = new float[] { skyLight, skyLight, skyLight, skyLight }; fa.blockLight = new float[] { blockLight, blockLight, blockLight, blockLight }; fa.normal = Vector3.zero; bool isUpper = (ca.blockData & 0b1000) > 0; int hinge; DoorDirection direction = 0; bool isOpen = false; if (isUpper) { chunk.GetBlockData(ca.pos.x, ca.pos.y - 1, ca.pos.z, out byte belowType, out byte belowData); if (belowType == 64) { isOpen = (belowData & 0b0100) > 0; direction = (DoorDirection)(belowData & 0b0011); } hinge = (ca.blockData & 0b0001); } else { isOpen = (ca.blockData & 0b0100) > 0; direction = (DoorDirection)(ca.blockData & 0b0011); chunk.GetBlockData(ca.pos.x, ca.pos.y + 1, ca.pos.z, out byte aboveType, out byte aboveData); hinge = (aboveData & 0b0001); } if (ca.isBreakingMesh) { ca.pos = Vector3Int.zero; } try { fa.faceIndex = TextureArrayManager.GetIndexByName(isUpper ? "door_wood_upper" : "door_wood_lower"); if ((direction == DoorDirection.East && isOpen == false) || (direction == DoorDirection.South && isOpen && hinge == 1) || (direction == DoorDirection.North && isOpen && hinge == 0)) { fa.uv = uv_top; fa.pos = topVertices_east; AddFace(nbtMesh, fa, ca); fa.pos = bottomVertices_east; AddFace(nbtMesh, fa, ca); fa.uv = hinge == 0 ? uv_flip : uv_zero; fa.pos = leftVertices_east; AddFace(nbtMesh, fa, ca); fa.pos = rightVertices_east; AddFace(nbtMesh, fa, ca); fa.uv = hinge == 0 ? uv_side_flip : uv_side; fa.pos = frontVertices_east; AddFace(nbtMesh, fa, ca); fa.pos = backVertices_east; AddFace(nbtMesh, fa, ca); } else if ((direction == DoorDirection.South && isOpen == false) || (direction == DoorDirection.East && isOpen && hinge == 0) || (direction == DoorDirection.West && isOpen && hinge == 1)) { fa.uv = hinge == 0 ? uv_flip : uv_zero; fa.pos = frontVertices_south; AddFace(nbtMesh, fa, ca); fa.pos = backVertices_south; AddFace(nbtMesh, fa, ca); fa.uv = uv_top; fa.pos = topVertices_south; AddFace(nbtMesh, fa, ca); fa.pos = bottomVertices_south; AddFace(nbtMesh, fa, ca); fa.uv = hinge == 0 ? uv_side_flip : uv_side; fa.pos = leftVertices_south; AddFace(nbtMesh, fa, ca); fa.pos = rightVertices_south; AddFace(nbtMesh, fa, ca); } else if ((direction == DoorDirection.West && isOpen == false) || (direction == DoorDirection.South && isOpen && hinge == 0) || (direction == DoorDirection.North && isOpen && hinge == 1)) { fa.uv = uv_top; fa.pos = topVertices_west; AddFace(nbtMesh, fa, ca); fa.pos = bottomVertices_west; AddFace(nbtMesh, fa, ca); fa.uv = hinge == 0 ? uv_flip : uv_zero; fa.pos = leftVertices_west; AddFace(nbtMesh, fa, ca); fa.pos = rightVertices_west; AddFace(nbtMesh, fa, ca); fa.uv = hinge == 0 ? uv_side_flip : uv_side; fa.pos = frontVertices_west; AddFace(nbtMesh, fa, ca); fa.pos = backVertices_west; AddFace(nbtMesh, fa, ca); } else if ((direction == DoorDirection.North && isOpen == false) || (direction == DoorDirection.East && isOpen && hinge == 1) || (direction == DoorDirection.West && isOpen && hinge == 0)) { fa.uv = hinge == 0 ? uv_flip : uv_zero; fa.pos = frontVertices_north; AddFace(nbtMesh, fa, ca); fa.pos = backVertices_north; AddFace(nbtMesh, fa, ca); fa.uv = uv_top; fa.pos = topVertices_north; AddFace(nbtMesh, fa, ca); fa.pos = bottomVertices_north; AddFace(nbtMesh, fa, ca); fa.uv = hinge == 0 ? uv_side_flip : uv_side; fa.pos = leftVertices_north; AddFace(nbtMesh, fa, ca); fa.pos = rightVertices_north; AddFace(nbtMesh, fa, ca); } } catch (System.Exception e) { Debug.Log(e.ToString() + "\n" + "pos=" + ca.pos + ",data=" + ca.blockData); } }