protected virtual void AddSpecialColor(Chunk chunk, int x, int y, int z, MeshData meshData) { int sunLight = chunk.GetSunLight(x, y, z, true); int blockLight = chunk.GetBlockLight(x, y, z, true); meshData.AddColor(MeshBaseDataCache.Instance.GetColor(LightConst.lightColor[sunLight], LightConst.lightColor[blockLight], 0, 2)); meshData.AddColor(MeshBaseDataCache.Instance.GetColor(LightConst.lightColor[sunLight], LightConst.lightColor[blockLight], 0, 2)); meshData.AddColor(MeshBaseDataCache.Instance.GetColor(LightConst.lightColor[sunLight], LightConst.lightColor[blockLight], 0, 2)); meshData.AddColor(MeshBaseDataCache.Instance.GetColor(LightConst.lightColor[sunLight], LightConst.lightColor[blockLight], 0, 2)); }
protected void AddSpecialColorAndSpeed(Chunk chunk, int x, int y, int z, MeshData meshData, float speed = 0.5f) { int sunLight = chunk.GetSunLight(x, y, z); int blockLight = chunk.GetBlockLight(x, y, z); meshData.AddColor(MeshBaseDataCache.Instance.GetColor(LightConst.lightColor[sunLight], LightConst.lightColor[blockLight], speed, 2)); meshData.AddColor(MeshBaseDataCache.Instance.GetColor(LightConst.lightColor[sunLight], LightConst.lightColor[blockLight], speed, 2)); meshData.AddColor(MeshBaseDataCache.Instance.GetColor(LightConst.lightColor[sunLight], LightConst.lightColor[blockLight], speed, 2)); meshData.AddColor(MeshBaseDataCache.Instance.GetColor(LightConst.lightColor[sunLight], LightConst.lightColor[blockLight], speed, 2)); }
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 override void CalculateSpecialMesh(Chunk chunk, int x, int y, int z, MeshData meshData, Block self, Block other, BlockAttributeCalculator otherCalculator, Direction direction) { //因为会计算六次 if (direction != Direction.right) { return; } if (!IsModelCenter(self.ExtendId)) { return; } ModelData modelData = ModelDataManager.Instance.GetModelData((int)self.BlockType); Direction face = GetFaceDirection(self.ExtendId); Vector2 rotate = GetRotateSinAndCos(face); int sunLight = chunk.GetSunLight(x, y, z, true); int blockLight = chunk.GetBlockLight(x, y, z, true); Rect rect = GetUVRect(self.ExtendId, direction); meshData.useRenderDataForCol = true; int verticesIndex = meshData.GetCurVerticesIndex(); int colVerticesIndex = meshData.GetCurColVerticesIndex(); for (int i = 0; i < modelData.vertices.Length; i++) { Vector3[] vertices = modelData.vertices; Vector2[] uvs = modelData.uvs; float verX = vertices[i].x * rotate.y + vertices[i].z * rotate.x; float verZ = -vertices[i].x * rotate.x + vertices[i].z * rotate.y; float realX = x + 0.5f + verX; float realY = y + vertices[i].y; float realZ = z + 0.5f + verZ; //添加渲染网格 meshData.AddVertice(MeshBaseDataCache.Instance.GetVector3(realX, realY, realZ)); meshData.AddColor(MeshBaseDataCache.Instance.GetColor(LightConst.lightColor[sunLight], LightConst.lightColor[blockLight], 0, 2)); //这里要转换uv坐标 meshData.AddUV(MeshBaseDataCache.Instance.GetVector2(rect.x + uvs[i].x * rect.width, rect.y + uvs[i].y * rect.height)); //添加碰撞网格 meshData.AddColVertice(MeshBaseDataCache.Instance.GetVector3(realX, realY, realZ)); } for (int i = 0; i < modelData.triangles.Length; i++) { meshData.AddTriangle(verticesIndex + modelData.triangles[i]); meshData.AddColTriangle(colVerticesIndex + modelData.triangles[i]); } meshData.useRenderDataForCol = MeshData.DefaultUseRenderDataForCol; }