Online docs (EN/PL): website/docs/sdk/architecture.md · SDK overview
Gametriki składa się z warstwy SDK (czysty ruch + wejście) oraz warstwy aplikacji (BLE, gry, UI). Gry widzą wyłącznie GameInput z frameworku VeltoKit — nie importują parsera BLE ani logiki gestów bezpośrednio.
┌─────────────┐ notify ┌──────────────────┐
│ Triki (BLE) │ ──────────────► │ Platform │
└─────────────┘ │ TrikiInputAdapter│
└────────┬─────────┘
│ enqueueBLE / updateFrame
▼
┌──────────────────┐
│ VeltoKit │
│ MotionSDK │
│ ├ MotionProcessor│
│ ├ GestureDetector│
│ └ ButtonDetector │
└────────┬─────────┘
│ GameInput
▼
┌──────────────────┐
│ Engine + Games │
│ update(input:) │
└──────────────────┘
Framework bez zależności od gier ani UI. Kod źródłowy: folder VeltoKit/.
| Plik | Odpowiedzialność |
|---|---|
MotionSDK.swift |
Fasada: update(rawX:bytes:deltaTime:), input |
MotionProcessor.swift |
rawX → posX (offset, wygładzanie, paletka / wskaźnik) |
GestureDetector.swift |
Cofnięcie → rzut (didThrow, throwPower) |
ButtonDetector.swift |
BLE 0x22, bajt [1], zbocze 0→1 |
MotionEngine.swift |
Orkiestracja trybów .paddle / .pointer / .gesture |
InputAdapter.swift |
SDK bez BLE (testy, integracja własna) |
GameInput.swift |
Kontrakt wyjścia dla gier |
MotionConfig.swift |
Parametry i presety |
- Surowy
rawXtrafia doMotionProcessor(filtr + offset). - W trybie
.gestureGestureDetectoranalizujerelYi prędkość. ButtonDetectorprzetwarza pakiety BLE (niezależnie od trybu).MotionSDK.publishInput()składaGameInput:didShoot = klik ∨ gest.
| Moduł | Rola |
|---|---|
BLE/ |
Skan, NUS, strumień bajtów |
Motion/ |
MotionParser, TrikiMotionProtocol → TrikiSensors |
TrikiInputAdapter.swift |
Łączy BLE z MotionSDK, pollInput() @ 60 FPS |
MotionInputProvider jest aliasem typu TrikiInputAdapter (kompatybilność wsteczna).
| Plik | Rola |
|---|---|
Game.swift |
Protokół gry + GameInputProfile |
GameContext.swift |
Bufor rysowania 160×90 |
GameEngine.swift |
Pętla: pollInput → game.update → HUD |
GameManager.swift |
Presety trybu motion per gra |
Gry implementują tylko:
func update(input: GameInput, deltaTime: TimeInterval)| Gra | Tryb motion | Wejście |
|---|---|---|
| Pong | .paddle |
input.posX |
| Dart | .pointer + rzut |
posX, didShoot, gesturePrimed |
| Bowling | .gesture |
rzut + sesja wieloosobowa |
| Quiz | .paddle |
primaryAction / kategorie |
MainMenu.swift— wybór gry, połączenie TrikiHUD.swift— wspólne komponenty statusu- Widoki per gra (
DartGameView,BowlingGameView, …)
- VeltoKit → Foundation (brak SwiftUI, brak gier)
- Platform → VeltoKit + CoreBluetooth (w aplikacji)
- Games → Engine + VeltoKit (
GameInputtylko) - UI → Engine, Platform, Design
- Nowa gra: struct w
app/Games/, protokółGame, profil wGameManager. - Nowy tryb motion: preset w
MotionConfig.preset(for:). - Własne BLE: użyj
MotionSDK+InputAdapterbezTrikiInputAdapter.