Esempio n. 1
0
    /// <summary>
    /// 检测是否需要构建面
    /// </summary>
    /// <param name="chunk"></param>
    /// <param name="localPosition"></param>
    /// <param name="direction"></param>
    /// <param name="closeDirection"></param>
    /// <returns></returns>
    public override bool CheckNeedBuildFace(Chunk chunk, Vector3Int localPosition, BlockDirectionEnum direction, DirectionEnum closeDirection)
    {
        if (localPosition.y == 0)
        {
            return(false);
        }
        GetCloseRotateBlockByDirection(chunk, localPosition, direction, closeDirection, out Block closeBlock, out Chunk closeBlockChunk, out Vector3Int closeLocalPosition);
        if (closeBlock == null || closeBlock.blockType == BlockTypeEnum.None)
        {
            if (closeBlockChunk != null && closeBlockChunk.isInit)
            {
                //只是空气方块
                return(true);
            }
            else
            {
                //还没有生成chunk
                return(false);
            }
        }
        BlockShapeEnum blockShape = closeBlock.blockInfo.GetBlockShape();

        switch (blockShape)
        {
        case BlockShapeEnum.Cube:
        case BlockShapeEnum.CubeLeaves:
            return(false);

        default:
            return(true);
        }
    }
Esempio n. 2
0
    /// <summary>
    /// 获取注册的方块形状
    /// </summary>
    /// <param name="blockShapeEnum"></param>
    /// <returns></returns>
    public BlockShape GetRegisterBlockShape(BlockShapeEnum blockShapeEnum)
    {
        string blockShapeName = blockShapeEnum.GetEnumName();
        //通过反射获取类
        BlockShape blockShape = ReflexUtil.CreateInstance <BlockShape>($"BlockShape{blockShapeName}");

        if (blockShape == null)
        {
            blockShape = new BlockShape();
        }
        return(blockShape);
    }
    public virtual bool CheckNeedBuildFace(Chunk chunk, Vector3Int localPosition, BlockDirectionEnum direction, DirectionEnum closeDirection, BlockMetaCubeHalf blockMeta)
    {
        if (localPosition.y == 0)
        {
            return(false);
        }
        GetCloseRotateBlockByDirection(chunk, localPosition, direction, closeDirection, out Block closeBlock, out Chunk closeBlockChunk, out Vector3Int closeLocalPosition);
        if (closeBlockChunk != null && closeBlockChunk.isInit)
        {
            if (closeBlock == null || closeBlock.blockType == BlockTypeEnum.None)
            {
                //只是空气方块
                return(true);
            }
        }
        else
        {
            //还没有生成chunk
            return(false);
        }

        BlockShapeEnum blockShape = closeBlock.blockInfo.GetBlockShape();

        switch (blockShape)
        {
        case BlockShapeEnum.Cube:
            return(CheckNeedBuildFaceForCube(closeDirection, blockMeta));

        case BlockShapeEnum.CubeHalf:
            BlockBean         blockData      = closeBlockChunk.GetBlockData(closeLocalPosition);
            BlockMetaCubeHalf blockMetaClose = blockData.GetBlockMeta <BlockMetaCubeHalf>();
            return(CheckNeedBuilFaceForCubeHalf(closeDirection, blockMeta, blockMetaClose));

        default:
            return(true);
        }
    }