示例#1
0
        private Rigidbody CreateBlockRigidbody(TerrainBlock.Type blockType, Vector3 position)
        {
            var rigidbodyObject = rigidbodiesPool.Instantiate(position);

            rigidbodyObject.GetComponent <MeshFilter>().mesh = BuildBlockMesh(blockType);
            return(rigidbodyObject.GetComponent <Rigidbody>());
        }
示例#2
0
        public TerrainBlock AddBlock(Ray ray, TerrainBlock.Type blockType)
        {
            TerrainBlock block = null;
            var          pointOnTerrainMesh = config.RaycastTerrainMesh(ray, -0.01f)?.Point;

            if (pointOnTerrainMesh.HasValue)
            {
                block = GetBlockAt(pointOnTerrainMesh.Value, out TerrainChunk chunk);

                SetBlockTypeAt(chunk, block.LocalIndex, blockType);
                SetTypeOfSameBlockInAdjacentChunks(chunk, block.LocalIndex, pointOnTerrainMesh.Value, blockType);
            }

            return(block);
        }
示例#3
0
 /// <summary>
 /// Update the type of voxel we're previewing
 /// </summary>
 /// <param name="type"></param>
 void setVoxelType(TerrainBlock.Type type)
 {
     if ((voxelTypeToSet.IsSolid && !type.IsSolid) || (!voxelTypeToSet.IsSolid && type.IsSolid))
     {
         voxelTypeToSet = type;
         udpdateCurrentlySelectedVoxel();
         selectedVoxelCursor.setCursorMode(type.IsSolid
   ? VoxelEditorCursor.Mode.Add
   : VoxelEditorCursor.Mode.Remove
                                           );
     }
     else
     {
         voxelTypeToSet = type;
     }
 }
示例#4
0
        public Mesh BuildBlockMesh(TerrainBlock.Type blockType)
        {
            var blockMinVertex = new Vector3(
                -config.HalfBlockSize,
                -config.HalfBlockSize,
                -config.HalfBlockSize
                );

            var blockUVs = TerrainBlockUVs.Create(blockType);

            AddBlockFace_up(blockMinVertex, blockUVs);
            AddBlockFace_down(blockMinVertex, blockUVs);
            AddBlockFace_forward(blockMinVertex, blockUVs);
            AddBlockFace_right(blockMinVertex, blockUVs);
            AddBlockFace_back(blockMinVertex, blockUVs);
            AddBlockFace_left(blockMinVertex, blockUVs);

            return(BuildMesh());
        }
示例#5
0
 /// <summary>
 /// Remove a block on a button press
 /// </summary>
 /// <param name="hitBlock"></param>
 void updateVoxel(Coordinate voxelToChange, TerrainBlock.Type blockType)
 {
     World.Current.activeLevel[voxelToChange] = blockType.Id;
     World.Current.activeLevel.markChunkDirty(Chunk.IDFromWorldLocation(voxelToChange));
 }
示例#6
0
        public void SetBlockType(Index3D blockLocalIndex, TerrainBlock.Type newBlockType)
        {
            var newBlock = new TerrainBlock(newBlockType, blockLocalIndex, ToGlobalIndex(blockLocalIndex), config.BlockSize);

            blocks[blockLocalIndex.X, blockLocalIndex.Y, blockLocalIndex.Z] = newBlock;
        }
示例#7
0
 private static bool IsEmptyOrLeaves(TerrainBlock.Type blockType)
 {
     return(blockType == TerrainBlock.Type.None ||
            blockType == TerrainBlock.Type.TreeLeaves);
 }
示例#8
0
 public static TerrainBlockUVs Create(TerrainBlock.Type blockType)
 {
     return(blockTypeToUVs[blockType]);
 }
示例#9
0
        private TerrainBlock.Type SetBlockTypeAt(TerrainChunk chunk, Index3D blockLocalIndex, TerrainBlock.Type blockNewType)
        {
            var blockType = chunk.GetBlock(blockLocalIndex).BlockType;

            chunk.SetBlockType(blockLocalIndex, blockNewType);
            chunkGenerator.BuildMeshFor(chunk);
            return(blockType);
        }
示例#10
0
 private void SetTypeOfSameBlockInAdjacentChunks(TerrainChunk chunk, Index3D blockLocalIndex, Vector3 pointOnTerrainMesh, TerrainBlock.Type blockNewType)
 {
     foreach (var adjacentChunk in GetAdjacentChunksThatShareBlock(chunk, blockLocalIndex))
     {
         SetBlockTypeAt(adjacentChunk, adjacentChunk.GetBlockLocalIndexAt(pointOnTerrainMesh), blockNewType);
     }
 }
示例#11
0
        //private static Vector3 CalculateTorque()
        //{
        //    return new Vector3(
        //        Random.Range(-50.0f, 50.0f),
        //        Random.Range(-50.0f, 50.0f),
        //        Random.Range(-50.0f, 50.0f)
        //    );
        //}

        private Mesh BuildBlockMesh(TerrainBlock.Type blockType)
        {
            return(new TerrainChunkMeshBuilder(config).BuildBlockMesh(blockType));
        }
示例#12
0
 public TerrainBlock AddBlock(Ray ray, TerrainBlock.Type blockType)
 {
     return(modifier.AddBlock(ray, blockType));
 }