# Bore construct

A construct-light tunnelling head: a stepped rotary bit forward, a pair of treaded drive wheels on one transverse axle aft that roll it into the face, and a right-angle gear train, thrust rams, grippers and a flushing pump between them, boring through a wall that cracks, spalls and heaps its own spoil.

> For the complete index, see [llms.txt](https://robocn.dev/llms.txt). A Markdown version of any page is available by appending `.md` to its URL or by sending an `Accept: text/markdown` header.

## Install

```bash
bunx --bun shadcn@latest add https://robocn.dev/r/bore-construct.json
```

Registry item: `bore-construct` · [`https://robocn.dev/r/bore-construct.json`](https://robocn.dev/r/bore-construct.json)

## Notes

- Solved: the penetration rate, from an energy balance at the face; the cavity, as the real intersection of the bit’s swept envelope with the slab; the excavated volume and the spoil heap that conserves it; the spall trajectories; the planetary reduction, which is why the bit turns 3.75 times slower than the drive that feeds it; the drive wheel, which rolls without slipping — one revolution per 2πr of travel, and nothing at all while the machine is held; the transfer pair, meshed so the teeth genuinely sit in each other’s spaces; the flushing pump’s slider-crank; and the main bearing’s cage ratio.
- Illustrated: the fracture pattern around the bore, the bit’s helical flights, the plough blades, the wheel’s tread pattern, the body’s rib cage, the hoses and fins, and the glow. Nothing collides — the machine is not stopped by the wall, it is driven through it by depth.
- The wall is drawn as a cutaway so the machine inside the bore can be seen, and the bit is drawn inscribed in the envelope the cavity is cut from, so it never stands outside its own hole. Only a share of the muck reaches the collar; the rest packs the bore behind the machine.
- An original archetype named for its job. It is a generic boring construct — no franchise name, insignia or paint scheme, and the default palette is the theme’s.

## Usage

```tsx
import { BoreConstruct } from "@/components/ui/bore-construct"

// Bores through and re-enters, at the rate the energy balance allows.
<BoreConstruct behavior="bore" hardness={0.5} thrust={0.8} />

// Or drive the head yourself. The advance is pinned; the spindle keeps turning.
<BoreConstruct depth={0.6} onDepthChange={setDepth} interactive />
```

## Props

| name | type | default | description |
| --- | --- | --- | --- |
| `depth` | `number` | — | Bore progress: 0 crown on the near face, 1 crown clear of the far one. Supplying it pins the advance exactly — the spindle keeps turning, because a drill held at depth is still a drill that is turning. |
| `onDepthChange` | `(depth: number) => void` | — | Fires while it is dragged or keyed, so interaction works in controlled mode too. |
| `behavior` | `"bore" | "surge" | "idle" | "static"` | `"bore"` | What it does with nobody driving it. bore drives through and backs out to re-enter; surge takes the same ground in four bites while the grippers re-set; idle turns at the face without advancing. |
| `rev` | `number` | `1.1` | Spindle speed, bit revolutions per clock unit. The cutterhead drive turns the planetary ratio faster, and the flushing pump hangs off it. |
| `thrust` | `number` | `0.72` | Torque at the bit, 0 free to 1 the drive’s rating. Also the stroke on the four rams and the reach of the gripper shoes. |
| `hardness` | `number` | `0.45` | The material, 0 spoil to 1 hard rock. Drives the specific energy, so it drives the rate, the chip and the stall. |
| `forge` | `number` | `1` | How solidly the construct stands, 0 to 1: the bloom and the shell’s translucency. Paint only — no geometry moves. |
| `showWall` | `boolean` | `true` | The slab, drawn as a cutaway, with the bore cut out of it and the cracks around it. |
| `showSpoil` | `boolean` | `true` | The rubble off the kerf and the heap at the collar. |
| `interactive` | `boolean` | `false` | Hand it to a person: drag across it, or focus it and use the arrow keys. It eases back into the behaviour on release. |
| `showGround` | `boolean` | `true` | Draw the contact shadow and the ground line beneath it. |
| `label` | `string` | — | Optional technical caption under the drawing. |
| `view` | `"plan" | "front" | "profile" | "iso"` | `"profile"` | Where the camera stands. One machine, four projections: straight down, straight on, side elevation, or three-quarter from above. |
| `speed` | `number` | `0.5` | Clock units per second. |
| `animate` | `boolean` | `true` | Off parks the machine at phase and stops rendering. A reduced-motion preference does the same. |
| `paused` | `boolean` | `false` | Freeze where it stands. |
| `phase` | `number` | `0` | Seconds of offset, so a row of machines breaks step. |
| `variant` | `"solid" | "outline" | "blueprint" | "wire"` | `"solid"` | How the machine is painted. Geometry never changes between variants. |
| `size` | `"xs" | "sm" | "md" | "lg" | "xl" | number` | `"md"` | Rendered width in pixels, or a step on the scale. |
| `color` | `string` | `var(--robot-shell)` | Body panels — the colour the machine reads as. |
| `accent` | `string` | `var(--robot-accent)` | Status colour: tip light, live tool, readouts. |
| `metal` | `string` | `var(--robot-metal)` | Bare machined parts: collars, bolts, tool bodies. |
| `dark` | `string` | `var(--robot-dark)` | Cast joints, base, shadow side. |
| `palette` | `Partial<RobotPalette>` | — | Override any subset of roles at once, including glow and grid. |

## Source

- `src/components/ui/bore-construct.tsx`
