public static VecCito3i CitoCtr(int _x, int _y, int _z) { VecCito3i v = new VecCito3i(); v.x = _x; v.y = _y; v.z = _z; return(v); }
public void Add(int _x, int _y, int _z, VecCito3i result) { result.x = x + _x; result.y = y + _y; result.z = z + _z; }
public void Add(int _x, int _y, int _z, VecCito3i result) { result.x = x + _x; result.y = y + _y; result.z = z + _z; }
public static VecCito3i CitoCtr(int _x, int _y, int _z) { VecCito3i v = new VecCito3i(); v.x = _x; v.y = _y; v.z = _z; return v; }
void DrawBlockFace(int x, int y, int z, int tileType, int tileSide, float vOffsetX, float vOffsetY, float vOffsetZ, float vScaleX, float vScaleY, float vScaleZ, VecCito3i[] vNeighbors, float[] fShadowRation) { int color = _colorWhite; //Darken shadow sides //TODO: keep that? switch (tileSide) { case TileSideEnum.Bottom: case TileSideEnum.Left: case TileSideEnum.Right: color = ColorMultiply(color, BlockShadow); break; } int sidetexture = TextureId(tileType, tileSide); ModelData toreturn = GetModelData(tileType, sidetexture); float texrecTop = (terrainTexturesPerAtlasInverse * (sidetexture % terrainTexturesPerAtlas)) + (AtiArtifactFix * terrainTexturesPerAtlasInverse); float texrecBottom = texrecTop +_texrecHeight; int lastelement = toreturn.verticesCount; VecCito3i v = tmpv; float fSlopeModifier = 0f; //Calculate the corner points vNeighbors[TileDirectionEnum.TopRight].Add(1, 1, 1, v); fSlopeModifier = GetCornerHeightModifier(tileSide, CornerEnum.TopRight); float xPos = x + vOffsetX + ((v.x * 0.5f) * vScaleX); float zPos = z + vOffsetZ + ((v.z * 0.5f) * vScaleZ) + fSlopeModifier; float yPos = y + vOffsetY + ((v.y * 0.5f) * vScaleY); ModelDataTool.AddVertex(toreturn, xPos, zPos , yPos, _texrecRight, texrecTop, ColorMultiply(color, fShadowRation[CornerEnum.TopRight])); vNeighbors[TileDirectionEnum.TopLeft].Add(1, 1, 1, v); fSlopeModifier = GetCornerHeightModifier(tileSide, CornerEnum.TopLeft); xPos = x + vOffsetX + ((v.x * 0.5f) * vScaleX); zPos = z + vOffsetZ + ((v.z * 0.5f) * vScaleZ) + fSlopeModifier; yPos = y + vOffsetY + ((v.y * 0.5f) * vScaleY); ModelDataTool.AddVertex(toreturn, xPos, zPos, yPos, _texrecLeft, texrecTop, ColorMultiply(color, fShadowRation[CornerEnum.TopLeft])); vNeighbors[TileDirectionEnum.BottomRight].Add(1, 1, 1, v); fSlopeModifier = GetCornerHeightModifier(tileSide, CornerEnum.BottomRight); xPos = x + vOffsetX + ((v.x * 0.5f) * vScaleX); zPos = z + vOffsetZ + ((v.z * 0.5f) * vScaleZ) + fSlopeModifier; yPos = y + vOffsetY + ((v.y * 0.5f) * vScaleY); ModelDataTool.AddVertex(toreturn, xPos, zPos, yPos, _texrecRight, texrecBottom, ColorMultiply(color, fShadowRation[CornerEnum.BottomRight])); vNeighbors[TileDirectionEnum.BottomLeft].Add(1, 1, 1, v); fSlopeModifier = GetCornerHeightModifier(tileSide, CornerEnum.BottomLeft); xPos = x + vOffsetX + ((v.x * 0.5f) * vScaleX); zPos = z + vOffsetZ + ((v.z * 0.5f) * vScaleZ) + fSlopeModifier; yPos = y + vOffsetY + ((v.y * 0.5f) * vScaleY); ModelDataTool.AddVertex(toreturn, xPos, zPos, yPos, _texrecLeft, texrecBottom, ColorMultiply(color, fShadowRation[CornerEnum.BottomLeft])); if (tileSide == TileSideEnum.Right) { //Draw backwards, so the visible side points outward ModelDataTool.AddIndex(toreturn, (lastelement + 1)); ModelDataTool.AddIndex(toreturn, (lastelement + 0)); ModelDataTool.AddIndex(toreturn, (lastelement + 3)); ModelDataTool.AddIndex(toreturn, (lastelement + 0)); ModelDataTool.AddIndex(toreturn, (lastelement + 2)); ModelDataTool.AddIndex(toreturn, (lastelement + 3)); } else { ModelDataTool.AddIndex(toreturn, (lastelement + 0)); ModelDataTool.AddIndex(toreturn, (lastelement + 1)); ModelDataTool.AddIndex(toreturn, (lastelement + 2)); ModelDataTool.AddIndex(toreturn, (lastelement + 1)); ModelDataTool.AddIndex(toreturn, (lastelement + 3)); ModelDataTool.AddIndex(toreturn, (lastelement + 2)); } }
public TerrainChunkTesselatorCi() { EnableSmoothLight = true; ENABLE_TEXTURE_TILING = true; //option_HardWaterTesselation = true; _colorWhite = Game.ColorFromArgb(255, 255, 255, 255); BlockShadow = 0.6f; option_DoNotDrawEdges = true; occ = 0.7f; halfocc = 0.4f; tmpnPos = new int[7]; tmpshadowration = new int[TileDirectionEnum.DirectionCounts]; tmpoccupied = new bool[TileDirectionEnum.DirectionCounts]; tmpfShadowRation = new float[4]; tmpv = new VecCito3i(); ref_blockCornerHeight = new float[4]; c_OcclusionNeighbors = new VecCito3i[TileSideEnum.SideCount][]; //Initialize array for (int i = 0; i < TileSideEnum.SideCount; i++) { c_OcclusionNeighbors[i] = new VecCito3i[TileDirectionEnum.DirectionCounts]; } //Top c_OcclusionNeighbors[TileSideEnum.Top][TileDirectionEnum.Center] = VecCito3i.CitoCtr(0, 0, 1); c_OcclusionNeighbors[TileSideEnum.Top][TileDirectionEnum.Top] = VecCito3i.CitoCtr(0, -1, 1); c_OcclusionNeighbors[TileSideEnum.Top][TileDirectionEnum.Bottom] = VecCito3i.CitoCtr(0, 1, 1); c_OcclusionNeighbors[TileSideEnum.Top][TileDirectionEnum.Left] = VecCito3i.CitoCtr(-1, 0, 1); c_OcclusionNeighbors[TileSideEnum.Top][TileDirectionEnum.Right] = VecCito3i.CitoCtr(1, 0, 1); c_OcclusionNeighbors[TileSideEnum.Top][TileDirectionEnum.TopLeft] = VecCito3i.CitoCtr(-1, -1, 1); c_OcclusionNeighbors[TileSideEnum.Top][TileDirectionEnum.TopRight] = VecCito3i.CitoCtr(1, -1, 1); c_OcclusionNeighbors[TileSideEnum.Top][TileDirectionEnum.BottomLeft] = VecCito3i.CitoCtr(-1, 1, 1); c_OcclusionNeighbors[TileSideEnum.Top][TileDirectionEnum.BottomRight] = VecCito3i.CitoCtr(1, 1, 1); //Left c_OcclusionNeighbors[TileSideEnum.Left][TileDirectionEnum.Center] = VecCito3i.CitoCtr(-1, 0, 0); c_OcclusionNeighbors[TileSideEnum.Left][TileDirectionEnum.Top] = VecCito3i.CitoCtr(-1, 0, 1); c_OcclusionNeighbors[TileSideEnum.Left][TileDirectionEnum.Bottom] = VecCito3i.CitoCtr(-1, 0, -1); c_OcclusionNeighbors[TileSideEnum.Left][TileDirectionEnum.Left] = VecCito3i.CitoCtr(-1, -1, 0); c_OcclusionNeighbors[TileSideEnum.Left][TileDirectionEnum.Right] = VecCito3i.CitoCtr(-1, 1, 0); c_OcclusionNeighbors[TileSideEnum.Left][TileDirectionEnum.TopLeft] = VecCito3i.CitoCtr(-1, -1, 1); c_OcclusionNeighbors[TileSideEnum.Left][TileDirectionEnum.TopRight] = VecCito3i.CitoCtr(-1, 1, 1); c_OcclusionNeighbors[TileSideEnum.Left][TileDirectionEnum.BottomLeft] = VecCito3i.CitoCtr(-1, -1, -1); c_OcclusionNeighbors[TileSideEnum.Left][TileDirectionEnum.BottomRight] = VecCito3i.CitoCtr(-1, 1, -1); //Bottom c_OcclusionNeighbors[TileSideEnum.Bottom][TileDirectionEnum.Center] = VecCito3i.CitoCtr(0, 0, -1); c_OcclusionNeighbors[TileSideEnum.Bottom][TileDirectionEnum.Top] = VecCito3i.CitoCtr(0, 1, -1); c_OcclusionNeighbors[TileSideEnum.Bottom][TileDirectionEnum.Bottom] = VecCito3i.CitoCtr(-1, 0, -1); c_OcclusionNeighbors[TileSideEnum.Bottom][TileDirectionEnum.Left] = VecCito3i.CitoCtr(-1, 0, -1); c_OcclusionNeighbors[TileSideEnum.Bottom][TileDirectionEnum.Right] = VecCito3i.CitoCtr(1, 0, -1); c_OcclusionNeighbors[TileSideEnum.Bottom][TileDirectionEnum.TopLeft] = VecCito3i.CitoCtr(-1, 1, -1); c_OcclusionNeighbors[TileSideEnum.Bottom][TileDirectionEnum.TopRight] = VecCito3i.CitoCtr(1, 1, -1); c_OcclusionNeighbors[TileSideEnum.Bottom][TileDirectionEnum.BottomLeft] = VecCito3i.CitoCtr(-1, -1, -1); c_OcclusionNeighbors[TileSideEnum.Bottom][TileDirectionEnum.BottomRight] = VecCito3i.CitoCtr(1, -1, -1); //Right c_OcclusionNeighbors[TileSideEnum.Right][TileDirectionEnum.Center] = VecCito3i.CitoCtr(1, 0, 0); c_OcclusionNeighbors[TileSideEnum.Right][TileDirectionEnum.Top] = VecCito3i.CitoCtr(1, 0, 1); c_OcclusionNeighbors[TileSideEnum.Right][TileDirectionEnum.Bottom] = VecCito3i.CitoCtr(1, 0, -1); c_OcclusionNeighbors[TileSideEnum.Right][TileDirectionEnum.Left] = VecCito3i.CitoCtr(1, -1, 0); c_OcclusionNeighbors[TileSideEnum.Right][TileDirectionEnum.Right] = VecCito3i.CitoCtr(1, 1, 0); c_OcclusionNeighbors[TileSideEnum.Right][TileDirectionEnum.TopLeft] = VecCito3i.CitoCtr(1, -1, 1); c_OcclusionNeighbors[TileSideEnum.Right][TileDirectionEnum.TopRight] = VecCito3i.CitoCtr(1, 1, 1); c_OcclusionNeighbors[TileSideEnum.Right][TileDirectionEnum.BottomLeft] = VecCito3i.CitoCtr(1, -1, -1); c_OcclusionNeighbors[TileSideEnum.Right][TileDirectionEnum.BottomRight] = VecCito3i.CitoCtr(1, 1, -1); //Back c_OcclusionNeighbors[TileSideEnum.Back][TileDirectionEnum.Center] = VecCito3i.CitoCtr(0, -1, 0); c_OcclusionNeighbors[TileSideEnum.Back][TileDirectionEnum.Top] = VecCito3i.CitoCtr(0, -1, 1); c_OcclusionNeighbors[TileSideEnum.Back][TileDirectionEnum.Bottom] = VecCito3i.CitoCtr(0, -1, -1); c_OcclusionNeighbors[TileSideEnum.Back][TileDirectionEnum.Left] = VecCito3i.CitoCtr(1, -1, 0); c_OcclusionNeighbors[TileSideEnum.Back][TileDirectionEnum.Right] = VecCito3i.CitoCtr(-1, -1, 0); c_OcclusionNeighbors[TileSideEnum.Back][TileDirectionEnum.TopLeft] = VecCito3i.CitoCtr(1, -1, 1); c_OcclusionNeighbors[TileSideEnum.Back][TileDirectionEnum.TopRight] = VecCito3i.CitoCtr(-1, -1, 1); c_OcclusionNeighbors[TileSideEnum.Back][TileDirectionEnum.BottomLeft] = VecCito3i.CitoCtr(1, -1, -1); c_OcclusionNeighbors[TileSideEnum.Back][TileDirectionEnum.BottomRight] = VecCito3i.CitoCtr(-1, -1, -1); //Front c_OcclusionNeighbors[TileSideEnum.Front][TileDirectionEnum.Center] = VecCito3i.CitoCtr(0, 1, 0); c_OcclusionNeighbors[TileSideEnum.Front][TileDirectionEnum.Top] = VecCito3i.CitoCtr(0, 1, 1); c_OcclusionNeighbors[TileSideEnum.Front][TileDirectionEnum.Bottom] = VecCito3i.CitoCtr(0, 1, -1); c_OcclusionNeighbors[TileSideEnum.Front][TileDirectionEnum.Left] = VecCito3i.CitoCtr(-1, 1, 0); c_OcclusionNeighbors[TileSideEnum.Front][TileDirectionEnum.Right] = VecCito3i.CitoCtr(1, 1, 0); c_OcclusionNeighbors[TileSideEnum.Front][TileDirectionEnum.TopLeft] = VecCito3i.CitoCtr(-1, 1, 1); c_OcclusionNeighbors[TileSideEnum.Front][TileDirectionEnum.TopRight] = VecCito3i.CitoCtr(1, 1, 1); c_OcclusionNeighbors[TileSideEnum.Front][TileDirectionEnum.BottomLeft] = VecCito3i.CitoCtr(-1, 1, -1); c_OcclusionNeighbors[TileSideEnum.Front][TileDirectionEnum.BottomRight] = VecCito3i.CitoCtr(1, 1, -1); }
public int GetShadowRatioVec(VecCito3i v) { return GetShadowRatio(v.x, v.y, v.z); }