Beispiel #1
0
    public void GenerateTerrain(int x, int y, int z, int value, int face, BlockTerrain.Chunk chunk, ref CellFace data)
    {
        int?color = GetColor(BlockTerrain.GetData(value));

        data.TextureSlot = color.HasValue ? BlocksData.paintedTextures[TextureSlot] : TextureSlot;
        data.Color       = BlocksData.ColorFromInt(color);
    }
Beispiel #2
0
    public static int GetBlockColorInt(Block block, int value)
    {
        IPaintableBlock paintable = block as IPaintableBlock;

        if (paintable == null)
        {
            return(0);
        }
        return(paintable.GetColor(BlockTerrain.GetData(value)) ?? 0);
    }
Beispiel #3
0
    public void GenerateTerrain(int x, int y, int z, int value, BlockTerrain.Chunk chunk, MeshGenerator g)
    {
        int d = BlockTerrain.GetData(value);

        if (furnitureManager.isTransparent[GetDesignIndex(d)])
        {
            g.AlphaTest.Mesh(x, y, z, furnitureManager.GetFurniture(GetDesignIndex(d), GetRotation(d)));
        }
        else
        {
            g.Terrain.Mesh(x, y, z, furnitureManager.GetFurniture(GetDesignIndex(d), GetRotation(d)));
        }
    }
Beispiel #4
0
    public void GenerateTerrain(int x, int y, int z, int value, BlockTerrain.Chunk chunk, MeshGenerator g)
    {
        int?color = GetColor(BlockTerrain.GetData(value));

        if (color.HasValue)
        {
            g.Terrain.Mesh(x, y, z, paintedBlockMeshes[GetVariant(BlockTerrain.GetData(value))], BlocksData.DEFAULT_COLORS[color.Value]);
        }
        else
        {
            g.Terrain.Mesh(x, y, z, blockMeshes[GetVariant(BlockTerrain.GetData(value))], Color.white);
        }
    }
Beispiel #5
0
    public void GenerateTerrain(int x, int y, int z, int value, BlockTerrain.Chunk chunk, MeshGenerator g)
    {
        int data = BlockTerrain.GetData(value);
        int?i    = GetColor(data);
        GreedyTerrainMesh terrainMesh = useAlphaTest ? g.AlphaTest : g.Terrain;

        if (i.HasValue)
        {
            terrainMesh.Mesh(x, y, z, paintedBlockMeshes[GetVariant(data)], BlocksData.DEFAULT_COLORS[i.Value]);
        }
        else
        {
            terrainMesh.Mesh(x, y, z, blockMeshes[GetVariant(data)], unpaintedColor);
        }
    }
Beispiel #6
0
    public void GenerateTerrain(int x, int y, int z, int value, BlockTerrain.Chunk chunk, MeshGenerator g)
    {
        switch (GetFace(BlockTerrain.GetData(value)))
        {
        case 1:
            g.AlphaTest.TwoSidedQuad(
                new Vector3(x, y, z),
                new Vector3(x, y + 1.0f, z),
                new Vector3(x, y + 1.0f, z + 1.0f),
                new Vector3(x, y, z + 1.0f),
                TextureSlot, map.Lookup(chunk.GetShiftValue(x, z))
                );
            break;

        case 0:
            g.AlphaTest.TwoSidedQuad(
                new Vector3(x, y, z + 1.0f),
                new Vector3(x, y + 1.0f, z + 1.0f),
                new Vector3(x + 1.0f, y + 1.0f, z + 1.0f),
                new Vector3(x + 1.0f, y, z + 1.0f),
                TextureSlot, map.Lookup(chunk.GetShiftValue(x, z))
                );
            break;

        case 3:
            g.AlphaTest.TwoSidedQuad(
                new Vector3(x + 1.0f, y, z + 1.0f),
                new Vector3(x + 1.0f, y + 1.0f, z + 1.0f),
                new Vector3(x + 1.0f, y + 1.0f, z),
                new Vector3(x + 1.0f, y, z),
                TextureSlot, map.Lookup(chunk.GetShiftValue(x, z))
                );
            break;

        case 2:
            g.AlphaTest.TwoSidedQuad(
                new Vector3(x + 1.0f, y, z),
                new Vector3(x + 1.0f, y + 1.0f, z),
                new Vector3(x, y + 1.0f, z),
                new Vector3(x, y, z),
                TextureSlot, map.Lookup(chunk.GetShiftValue(x, z))
                );
            break;

        default:
            throw new UnityException("undefined face: " + GetFace(BlockTerrain.GetData(value)));
        }
    }
Beispiel #7
0
    public void GenerateTerrain(int x, int y, int z, int value, BlockTerrain.Chunk chunk, MeshGenerator g)
    {
        int   textureSlot = GetIsSmall(BlockTerrain.GetData(value)) ? 84 : 85;
        Color color       = GrassBlock.map.Lookup(chunk.GetShiftValue(x, z));

        g.AlphaTest.TwoSidedQuad(new Vector3(x, y, z),
                                 new Vector3(x + 1.0f, y, z + 1.0f),
                                 new Vector3(x + 1.0f, y + 1.0f, z + 1.0f),
                                 new Vector3(x, y + 1.0f, z),
                                 textureSlot, color);

        g.AlphaTest.TwoSidedQuad(new Vector3(x, y, z + 1.0f),
                                 new Vector3(x + 1.0f, y, z),
                                 new Vector3(x + 1.0f, y + 1.0f, z),
                                 new Vector3(x, y + 1.0f, z + 1.0f),
                                 textureSlot, color);
    }
Beispiel #8
0
    float CalculateNeighborHeight(int value)
    {
        int num = BlockTerrain.GetContent(value);

        if (IsTheSameFluid(num))
        {
            int data = BlockTerrain.GetData(value);
            if (GetIsTop(data))
            {
                return(GetLevelHeight(GetLevel(data)));
            }
            return(1f);
        }
        if (num == 0)
        {
            return(0.01f);
        }
        return(0f);
    }
Beispiel #9
0
 public string ToString(int value)
 {
     return(string.Format("{0}: {1}, {2}", Name, Index, BlockTerrain.GetData(value)));
 }
Beispiel #10
0
    public void GenerateFluidTerrain(int x, int y, int z, int value, BlockTerrain.Chunk chunk, GreedyTerrainMesh terrainMesh, Color topColor, Color sideColor)
    {
        float height1, height2, height3, height4;

        int data = BlockTerrain.GetData(value);

        if (GetIsTop(data))
        {
            int   cellValueFast  = chunk.GetCellValue(x - 1, y, z - 1);
            int   cellValueFast2 = chunk.GetCellValue(x, y, z - 1);
            int   cellValueFast3 = chunk.GetCellValue(x + 1, y, z - 1);
            int   cellValueFast4 = chunk.GetCellValue(x - 1, y, z);
            int   cellValueFast5 = chunk.GetCellValue(x + 1, y, z);
            int   cellValueFast6 = chunk.GetCellValue(x - 1, y, z + 1);
            int   cellValueFast7 = chunk.GetCellValue(x, y, z + 1);
            int   cellValueFast8 = chunk.GetCellValue(x + 1, y, z + 1);
            float h           = CalculateNeighborHeight(cellValueFast);
            float num         = CalculateNeighborHeight(cellValueFast2);
            float h2          = CalculateNeighborHeight(cellValueFast3);
            float num2        = CalculateNeighborHeight(cellValueFast4);
            float num3        = CalculateNeighborHeight(cellValueFast5);
            float h3          = CalculateNeighborHeight(cellValueFast6);
            float num4        = CalculateNeighborHeight(cellValueFast7);
            float h4          = CalculateNeighborHeight(cellValueFast8);
            float levelHeight = GetLevelHeight(GetLevel(data));
            height1 = CalculateFluidVertexHeight(h, num, num2, levelHeight);
            height2 = CalculateFluidVertexHeight(num, h2, levelHeight, num3);
            height3 = CalculateFluidVertexHeight(levelHeight, num3, num4, h4);
            height4 = CalculateFluidVertexHeight(num2, levelHeight, h3, num4);
        }
        else
        {
            height1 = 1f;
            height2 = 1f;
            height3 = 1f;
            height4 = 1f;
        }

        Vector3 v000 = new Vector3(x, y, z);
        Vector3 v001 = new Vector3(x, y, z + 1f);
        Vector3 v010 = new Vector3(x, y + height1, z);
        Vector3 v011 = new Vector3(x, y + height4, z + 1f);
        Vector3 v100 = new Vector3(x + 1.0f, y, z);
        Vector3 v101 = new Vector3(x + 1.0f, y, z + 1f);
        Vector3 v110 = new Vector3(x + 1.0f, y + height2, z);
        Vector3 v111 = new Vector3(x + 1.0f, y + height3, z + 1f);

        int v = chunk.GetCellValue(x - 1, y, z);

        if (v != BlockTerrain.NULL_BLOCK_VALUE && BlockTerrain.GetContent(v) != Index)
        {
            terrainMesh.NormalQuad(v001, v011, v010, v000, TextureSlot, sideColor);
        }

        v = chunk.GetCellValue(x, y - 1, z);
        if (v != BlockTerrain.NULL_BLOCK_VALUE && BlockTerrain.GetContent(v) != Index)
        {
            terrainMesh.NormalQuad(v000, v100, v101, v001, TextureSlot, sideColor);
        }

        v = chunk.GetCellValue(x, y, z - 1);
        if (v != BlockTerrain.NULL_BLOCK_VALUE && BlockTerrain.GetContent(v) != Index)
        {
            terrainMesh.NormalQuad(v000, v010, v110, v100, TextureSlot, sideColor);
        }

        v = chunk.GetCellValue(x + 1, y, z);
        if (v != BlockTerrain.NULL_BLOCK_VALUE && BlockTerrain.GetContent(v) != Index)
        {
            terrainMesh.NormalQuad(v100, v110, v111, v101, TextureSlot, sideColor);
        }

        v = chunk.GetCellValue(x, y + 1, z);
        if (v != BlockTerrain.NULL_BLOCK_VALUE && BlockTerrain.GetContent(v) != Index)
        {
            terrainMesh.NormalQuad(v111, v110, v010, v011, TextureSlot, topColor);
        }

        v = chunk.GetCellValue(x, y, z + 1);
        if (v != BlockTerrain.NULL_BLOCK_VALUE && BlockTerrain.GetContent(v) != Index)
        {
            terrainMesh.NormalQuad(v101, v111, v011, v001, TextureSlot, sideColor);
        }
    }
Beispiel #11
0
 public void GenerateTerrain(int x, int y, int z, int value, BlockTerrain.Chunk chunk, MeshGenerator g)
 {
     g.AlphaTest.Mesh(x, y, z, meshes[BlockTerrain.GetData(value)], Color.white);
 }
Beispiel #12
0
 public static int GetFace(int value)
 {
     return(BlockTerrain.GetData(value) >> 2 & 7);
 }