private Rigidbody CreateBlockRigidbody(TerrainBlock.Type blockType, Vector3 position) { var rigidbodyObject = rigidbodiesPool.Instantiate(position); rigidbodyObject.GetComponent <MeshFilter>().mesh = BuildBlockMesh(blockType); return(rigidbodyObject.GetComponent <Rigidbody>()); }
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); }
/// <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; } }
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()); }
/// <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)); }
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; }
private static bool IsEmptyOrLeaves(TerrainBlock.Type blockType) { return(blockType == TerrainBlock.Type.None || blockType == TerrainBlock.Type.TreeLeaves); }
public static TerrainBlockUVs Create(TerrainBlock.Type blockType) { return(blockTypeToUVs[blockType]); }
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); }
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); } }
//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)); }
public TerrainBlock AddBlock(Ray ray, TerrainBlock.Type blockType) { return(modifier.AddBlock(ray, blockType)); }