# RCWeb Geometry Dash App

The **RCWeb Geometry Dash App** (`app/geometry-dash`) is a Geometry Dash inspired endless runner built for the RCWeb asymmetric controller pattern. The shared screen owns all game logic while a companion controller app sends a single jump action over RCWeb WebSockets.

![icon](pwa-512x512.png "Geometry Dash App Icon")

## What it does

- **Auto-run arcade loop**: The cube races forward automatically while the world scrolls toward the player, creating the same jump-timing pressure that makes Geometry Dash feel so sharp.
- **Single-button gameplay**: The only action is jump. Players can tap the main screen locally or use the companion `/geometry-dash-c` app from a phone.
- **Endless obstacle course**: The game generates a rotating mix of spikes, stacked platforms, ceiling traps, and lane-switching jump sequences. It opens with easier chunks, then steadily unlocks denser and trickier layouts as the score rises.
- **Instant controller pairing**: A QR code links phones into the same RCWeb room so the controller app can claim the runner and start jumping immediately.

## How it works

- `script.js` maintains the authoritative runner state, multi-level platform stream, scoring, collision detection, and reset loop inside a `requestAnimationFrame` update cycle.
- Remote input uses `rc.sendFunctionCall("geometry-dash", "geometryDash.joinAndJump", rc.client)` on first tap, then `geometryDash.jump` for later jumps.
- The main app pushes controller feedback back to the phone through `geometryDashControl.onAssignedRunner`, `onScoreUpdate`, `onStateUpdate`, and `onReleased`.
- Rendering is done entirely with the HTML5 canvas and CSS HUD overlays, using native browser audio synthesis for jump, score, and crash feedback.
