Skip to main content

GameInput

GameInput is the only type games use in update(input:deltaTime:). Get it from motion.pollInput(deltaTime:).

Simple integration

Use Integration recipes first — helpers wrap the fields below (TrikiSimplePong, TrikiUIPicker, TrikiGameActions).

Primary game fields

FieldTypeTypical use
posXDoublePaddle / aim horizontal 0…1 (center ≈ 0.5)
posYDoubleVertical aim (pointer mode)
primaryActionBoolMode-dependent — see Primary action by mode
bleButtonClickBoolBLE button edge (bytes[1], 0→1) — latched ~120 ms after pollInput for HUD/menus
shotTriggeredBoolGesture throw edge (Dart/Bowling)
throwPowerDouble0…1 strength when shotTriggered
gesturePrimedBoolPull-back before throw (UI hint)
pointerDirectionPointerDirection.left .right .up .down .center
bleModeTrikiBLEModefast / normal / lowPower / unknown
frameDeltaX, frameDeltaYDoubleΔpos between pollInput frames (SDK)
trikiVelocityDoubleSpeed from TrikiMotionEngine
isMovingBoolTriki gamepad motion flag
tiltLeft, tiltRightBoolStable tilt edges (all modes)

Convenience

var didShoot: Bool { primaryAction || shotTriggered }
var action: Bool { primaryAction }
var steerX: Double { lateral }

Motion / debug fields

FieldDescription
tiltX, tiltYCalibrated tilt (Platform may enrich)
deltaX, deltaYFrame deltas
lateral, lateralSmoothAdapter copies output.x for HUD
velocityYSmoothed vertical velocity proxy
rotationPointer rotation output
intensityOften output.velocityX

Impulse flags (Platform)

FieldSource
shakeMotionParser impulses
flick, spinReserved / parser
tiltLeft, tiltRightOptional

Primary action by mode

MotionSDK.publishInput() sets primaryAction from the active MotionMode:

ModeprimaryAction is true when…
.paddleBLE button rising edge only (ButtonDetector / bytes[1] 0→1)
.pointer, .gestureBLE click or gesture throw or Triki velocity action (TrikiMotionEngine.isAction)

In .paddle (Pong, Quiz, Triki menus), motion velocity must not confirm selection — only the physical cap button.

Confirm pattern (Quiz / menus)

Use TrikiButtonGate or TrikiUIPicker from Integration recipes — debounced edge on bleButtonClick (bytes[1]).

var button = TrikiButtonGate()

func tick(dt: TimeInterval) {
let input = motion.pollInput(deltaTime: dt)
if button.consume(input: input, deltaTime: dt) {
confirmSelection()
}
}

Sensors bundle

sensors: TrikiSensors — raw-ish telemetry for HUD (tilt, gyro, click flag). Filled by Platform MotionParser, not core VeltoKit.

Do not treat sensors.click as a one-shot confirm — use bleButtonClick via TrikiButtonGate.

Advanced drivers

For custom tuning beyond recipes: TrikiPaddleDriver, TrikiMenuDriver, TrikiPointerDriver, TrikiLateralDriver in TrikiAdaptiveInput.swift. See BLE integration for adaptive BLE mode (TrikiBLEMode).