public void MakeSimulatedBlock(Ray viewRay, bool addForce) { var pointOnTerrainMesh = config.RaycastTerrainMesh(viewRay, 0.01f); if (pointOnTerrainMesh != null) { TerrainChunk chunk; var block = GetBlockAt(pointOnTerrainMesh.Point, out chunk); if (block.BlockType != TerrainBlock.Type.None) { var removedBlockType = SetBlockTypeAt(chunk, block.LocalIndex, TerrainBlock.Type.None); SetTypeOfSameBlockInAdjacentChunks(chunk, block.LocalIndex, pointOnTerrainMesh.Point, TerrainBlock.Type.None); var rigidbody = CreateBlockRigidbody(removedBlockType, block.Center); if (addForce) { var force = CalculateForce(block.Center); rigidbody.AddForce(force, ForceMode.Impulse); //rigidbody.AddRelativeTorque(CalculateTorque(), ForceMode.Force); } } } }
public PointOnTerrainMesh RaycastTerrainMesh(Ray ray, float offset) { return(config.RaycastTerrainMesh(ray, offset)); }