public virtual MeshData FaceDataDown
            (Chunk chunk, int x, int y, int z, MeshData meshData, byte extendId)
        {
            meshData.AddVertice(MeshBaseDataCache.Instance.GetVector3(x, y, z));
            meshData.AddVertice(MeshBaseDataCache.Instance.GetVector3(x + 1f, y, z));
            meshData.AddVertice(MeshBaseDataCache.Instance.GetVector3(x + 1f, y, z + 1f));
            meshData.AddVertice(MeshBaseDataCache.Instance.GetVector3(x, y, z + 1f));

            meshData.AddQuadTriangles();

            AddSpecialUV(meshData, extendId, Direction.down);
            AddSpecialColor(chunk, x, y - 1, z, meshData);
            return(meshData);
        }
Example #2
0
        public virtual void CalculateMesh(Chunk chunk, MeshData meshData, Block self, Direction renderDirection,
                                          Vector3 v1, Vector3 v2, Vector3 v3, Vector3 v4,
                                          LightVertice sunLight, LightVertice blockLight)
        {
            meshData.AddVertice(v1);
            meshData.AddVertice(v2);
            meshData.AddVertice(v3);
            meshData.AddVertice(v4);
            if ((int)renderDirection > 0)
            {
                meshData.AddQuadTriangles(true);
            }
            else
            {
                meshData.AddQuadTriangles(false);
            }
            AddRenderUV(meshData, self.ExtendId, renderDirection);

            meshData.AddColor(MeshBaseDataCache.Instance.GetColor(sunLight.v00, blockLight.v00, 0, 1));
            meshData.AddColor(MeshBaseDataCache.Instance.GetColor(sunLight.v01, blockLight.v01, 0, 1));
            meshData.AddColor(MeshBaseDataCache.Instance.GetColor(sunLight.v11, blockLight.v11, 0, 1));
            meshData.AddColor(MeshBaseDataCache.Instance.GetColor(sunLight.v10, blockLight.v10, 0, 1));
        }
        public virtual MeshData FaceDataUp
            (Chunk chunk, int x, int y, int z, MeshData meshData, byte extendId)
        {
            Block centerBlock = chunk.GetBlock(x, y, z);
            Block leftBlock   = chunk.GetBlock(x - 1, y, z);
            Block rightBlock  = chunk.GetBlock(x + 1, y, z);
            Block frontBlock  = chunk.GetBlock(x, y, z + 1);
            Block backBlock   = chunk.GetBlock(x, y, z - 1);
            Block leftFront   = chunk.GetBlock(x - 1, y, z + 1);
            Block leftBack    = chunk.GetBlock(x - 1, y, z - 1);
            Block rightFront  = chunk.GetBlock(x + 1, y, z + 1);
            Block rightBack   = chunk.GetBlock(x + 1, y, z - 1);

            float leftFrontHeight  = GetAverageHeight(leftBlock, centerBlock, leftFront, frontBlock);
            float rightFrontHeight = GetAverageHeight(rightBlock, centerBlock, rightFront, frontBlock);
            float rightBackHeight  = GetAverageHeight(rightBlock, centerBlock, rightBack, backBlock);
            float leftBackHeight   = GetAverageHeight(leftBlock, centerBlock, leftBack, backBlock);

//			//计算流体流动方向
//			float dicX = 2 * (leftBackHeight + leftFrontHeight - rightBackHeight - rightFrontHeight);
//			float dicZ = 2 * (leftBackHeight + rightBackHeight - leftFrontHeight - rightFrontHeight);
//			Vector2 dic = new Vector2(dicX,dicZ);
//			dic.Normalize();
//			if(dic.x == 0 && dic.y == 0)dic.x = 1;
//			float sinDic = dic.y;
//			float cosDic = dic.x;

            meshData.AddVertice(MeshBaseDataCache.Instance.GetVector3(x, y + leftFrontHeight, z + 1f));
            meshData.AddVertice(MeshBaseDataCache.Instance.GetVector3(x + 1f, y + rightFrontHeight, z + 1f));
            meshData.AddVertice(MeshBaseDataCache.Instance.GetVector3(x + 1f, y + rightBackHeight, z));
            meshData.AddVertice(MeshBaseDataCache.Instance.GetVector3(x, y + leftBackHeight, z));

            meshData.AddQuadTriangles();

//			AddSpecialUV(meshData,extendId,Direction.up);
            Vector2 dic = GetRotate(leftFrontHeight, rightFrontHeight, rightBackHeight, leftBackHeight);

            AddUVRotate(meshData, extendId, Direction.up, dic.y, dic.x);

            float speed = dic.magnitude == 0 ? 0 : 0.5f;

            AddSpecialColorAndSpeed(chunk, x, y, z, meshData, speed);

            return(meshData);
        }