# Kart
El modelo de conducción de Mario Kart OrigoZero Ultimate — y la K entera.
Vive en el cuerpo del kart (el `body` del `PlayerPrototype`). Attach it there
and every joining player drives their own.
## Controles
| Tecla | Qué hace |
|---|---|
| J | Acelerar. De 0 a velocidad máxima en 1,75 s con un conjunto mediano. |
| A / D | Girar a izquierda y derecha. |
| S / O | Frenar; por debajo de cierta velocidad, marcha atrás. |
| K | Saltar, derrapar y cargar el salto cargado. |
| L | Usar el objeto. |
## La K, entera
Un toque de K en el suelo salta. Si estás girando, el salto va **hacia el lado
contrario** al derrape que vas a hacer; si no, va recto.
Al caer derrapando empiezas a cargar, y cada nivel son chispas de las ruedas y
un miniturbo al soltar la K:
| Carga | Chispas | Miniturbo |
|---|---|---|
| 1 s | azules | 0,75 s |
| 3 s | naranjas | 1,5 s |
| 5 s | arcoíris | 3 s |
Al caer del salto recto, si sigues manteniendo la K y no giras, empiezas a
cargar un **salto cargado** — con la mitad de agarre. Las ruedas sueltan dos
remolinos de viento, y soltar la K da el salto de ese nivel:
| Carga | Viento | Salto | Miniturbo al aterrizar |
|---|---|---|---|
| 0 s | gris/blanco | — | — |
| 1 s | azul | pequeño | 0,5 s |
| 3 s | naranja | mediano | 1 s |
| 5 s | arcoíris | grande | 2 s |
Antes del azul no hay nada que soltar: ni miniturbo, ni salto.
Espamear la K no da miniturbos: cada salto reinicia la carga y entre salto y
salto hay un tiempo mínimo.
## Public fields
- `characterId`, `vehicleId`, `classId` — la selección.
- `isCpu`, `cpuSkill`, `gridIndex` — la parrilla.
- `speed`, `speedRatio`, `heading`, `coins`, `lap`, `lastLapTime`, `totalTime`,
`finished` — estado que leen la cámara, el HUD y la carrera.
- `drifting`, `driftSide`, `chargeMode`, `chargeLevel`, `chargeTime` — la carga.
- `boostTime`, `boostMul`, `boostKind` — el impulso en curso.
- `airborne`, `surface`, `squishTime`, `slipTime`, `starTime`, `controlLocked`,
`gone` — el resto de estados.
- `inputMap` — el mapa de controles que activa al arrancar.
## Methods
- `:setCombo(charId, vehicleId, classId, charStats, vehStats, kind)` — fija el
conjunto y recalcula la conducción.
- `:addCoins(n)` — suma o quita monedas (y da el miniturbo de 0,125 s al coger).
- `:applyBoost(duration, mul, kind)` — un impulso, sin acumular con el que ya lleve.
- `:slip()` — resbalón: 3 monedas y vueltas al 5 % durante 1,5 s.
- `:squish()` — rayo: encogido al 33 % durante 3,5 s.
- `:star()` — estrella: inmune, un 5 % más rápido, 10 s.
- `:rescueAt(index)` — Lakitu: vuelta al punto de control.
- `:isBoosting()`, `:isImmune()`.
## Lifecycle
- `awake()` — localiza las piezas visuales del kart y le pone las chispas.
- `start()` — activa su mapa de controles y se suscribe.
- `update(dt)` — toda la conducción.
- `onDestroy()` — suelta su reclamación del mapa de controles.
## Usage
```lua
body.component.add("Kart", { inputMap = "driveKart", heading = 0, classId = "150cc" })
```