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);
                    }
                }
            }
        }
Beispiel #2
0
 public PointOnTerrainMesh RaycastTerrainMesh(Ray ray, float offset)
 {
     return(config.RaycastTerrainMesh(ray, offset));
 }