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).