/// <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); } }
/// <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); } }