Orbit Sling: 중력에 붙잡힌 공을 튕겨라
온라인 멀티플레이게임은 어렵네요
서버권위렌더링, 서버예측모델 등 해보다가 너무 어려워서 그냥 local-first + 서버판정 릴레이 정도로 마무리 했습니다

Orbit Sling은 중력 궤도를 도는 공을 타이밍 맞춰 튕겨내고, 우주먼지를 먹으며 성장하는 온라인 웹브라우저 게임입니다.
공은 중력점 주변을 계속 돌고 있습니다.
클릭, 터치, 스페이스바를 누르면 지금 향하는 방향으로 튀어나갑니다.
좋은 타이밍에 튀어나가면 먼지를 먹고 커지고, 나쁜 타이밍이면 다시 중력에 빨려 들어가거나 다른 공에게 당합니다.
## 게임 방식
- 중력 궤도를 돌며 타이밍을 본다
- 클릭 / 터치 / 스페이스바로 튀어나간다
- 우주먼지를 먹고 질량을 키운다
- 더 큰 힘으로 부딪히면 상대 질량을 빼앗는다
- 점수를 쌓고 랭킹에 오른다
단순하지만, 은근히 손맛이 있습니다.
언제 튀어나갈지, 어디로 날아갈지, 누구와 부딪힐지가 핵심입니다.
## 온라인 멀티플레이
Orbit Sling은 혼자 하는 물리 장난감이 아닙니다.
다른 플레이어의 공이 보이고, 채팅할 수 있고, 랭킹도 공유됩니다.
처음 접속하면 별명을 등록하고 passkey로 로그인합니다.
점수와 채팅은 서버에 저장되어 새로고침해도 이어집니다.
## 기술적으로는?
겉보기엔 간단한 웹게임이지만 내부는 꽤 진지합니다.
- Rust / WebAssembly
- WebGPU / wgpu
- Leptos UI
- WebSocket 멀티플레이
- SQLite 백엔드
- WebAuthn / Passkey 로그인
- Cloudflare Pages + Jetson Orin Nano 서버
특히 서버가 모든 물리를 계산하는 방식은 버렸습니다.
이 게임은 타이밍이 생명이라, 클릭 반응이 느리면 재미가 없습니다.
그래서 local-first, server-verified 구조로 만들었습니다.
내 공의 움직임은 브라우저에서 즉시 계산하고,
서버는 사용자, 채팅, 점수, 랭킹, 검증을 맡습니다.
덕분에 로컬 게임처럼 빠르게 반응하면서도 온라인 게임처럼 함께 플레이할 수 있습니다.
## 현재 상태
현재 베타 플레이 가능한 수준입니다.
- 중력 궤도
- dash 조작
- 우주먼지 수집
- 질량 성장과 감쇄
- 충돌과 질량 약탈
- 랭킹
- 채팅
- passkey 로그인
- WebGPU 렌더링
- 온라인 접속자 표시
## 한 줄 요약
중력 궤도에서 타이밍 맞춰 튕겨 나가고, 먼지를 먹고, 부딪히며 성장하는 온라인 물리 게임입니다