30 Commits

Author SHA1 Message Date
Jason Dekarske
e209ad3e1f feat(frontend): 2x8 stones-remaining HUD
Skeuomorphic team1/team2 stone chips near top of HUD; deplete
left-to-right from stones_remaining. Score strip shows end totals.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:42:19 -07:00
Jason Dekarske
162d6a7e59 feat(frontend): consume trajectories+scoreboard protocol
Mirror team1/team2 StoneId wire, velocity throws, trajectories animation,
scoreboard/stones_remaining state, HUD labels, and team1 red / team2 yellow palette.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:39:19 -07:00
Jason Dekarske
f0437bbbbe feat(protocol+physics+game): team1/2 stone ids trajectories scoreboard wire
Wire Team1/Team2, StoneId {team,n}, velocity throws, Trajectories/StonePath,
EndScore scoreboard, and stones_remaining; drop EndScored and legacy weight.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:39:19 -07:00
Jason Dekarske
7af2fc9f35 feat(physics): spin curl model and theta trajectories
Replace constant-rate velocity rotate with ω0 spin + v_lat curl.
Path samples are (x, y, theta); client time is index/SAMPLE_RATE_HZ.

Ultraworked with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <sisyphus@ohmyopencode>
2026-07-10 23:34:39 -07:00
Jason Dekarske
72ffa15489 feat(physics): µ(v) friction, pure velocity, open boundaries
Replace weight-scaled rapier damping with pure initial velocity (m/s),
piecewise-linear ice µ(v) table, and post-step a=−µ_eff·g·unit(v) drag.
Remove left/right/back wall colliders; OOB stones leave via prune only.
game.rs maps legacy weight→velocity via MIN/MAX until B3.
Calibrated DRAW_VELOCITY=2.38 m/s lands near tee (±0.8 m).

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:32:03 -07:00
Jason Dekarske
473e18a751 docs: multi-client free team, free broom, multi-path e2e list
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:28:58 -07:00
Jason Dekarske
1239394578 test(e2e): multi-client observers replace room-full check 2026-07-10 23:21:55 -07:00
Jason Dekarske
1e720c22cb refactor: express foot-derived constants via FEET_TO_METERS
House radius (12ft diameter -> 6ft radius), button (6in -> 0.5ft), four-ft, eight-ft, twelve-ft radii now computed at compile time from FEET_TO_METERS = 0.3048.

Ultraworked + Co-authored-by
2026-07-10 23:19:45 -07:00
Jason Dekarske
2eb5760922 fix(frontend): camera shows sidelines and house above controls
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:19:02 -07:00
Jason Dekarske
20c592d8ac fix(frontend): lock multi-stone parallel trajectory animation
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:17:21 -07:00
Jason Dekarske
2e11f005dc fix: allow broom aim anywhere, not only house
Ultraworked

Co-authored-by: Sisyphus <sisyphus@ohmyopenagent.com>
2026-07-10 23:17:15 -07:00
Jason Dekarske
dc62c4f55f docs: multi-client free team pick and shared watchers
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:16:07 -07:00
Jason Dekarske
b06a78227f test(e2e): multi-client throws and collision multi-path QA
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:16:07 -07:00
Jason Dekarske
c37026b0a0 feat(frontend): house-centered camera with y-pan offset
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:16:07 -07:00
Jason Dekarske
56a7d5abba feat(frontend): free team switch and sheet pan for multi-client play
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:16:06 -07:00
Jason Dekarske
c28bf32eb8 feat(frontend): animate all stone trajectories on one clock
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:16:06 -07:00
Jason Dekarske
722e6090d1 refactor(frontend): multi-path trajectory protocol and team on throw
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:16:06 -07:00
Jason Dekarske
a4e848c849 refactor(backend): allow multi-client rooms and drop room-full
Anyone may join and watch/throw; game auto-starts on first connection.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:16:06 -07:00
Jason Dekarske
0e08e21c9b refactor(backend): team-based throws without player slots
Anyone identifying as the turn team can throw; room slots for 1v1 removed.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:16:06 -07:00
Jason Dekarske
5eeaf8929d feat(physics): record trajectories for every moving stone
Collision playback needs all stones sampled on a shared t=0 release clock.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:16:06 -07:00
Jason Dekarske
2f68325801 refactor(backend): multi-stone StoneTrajectory on protocol wire
Clients send team on throw; joined no longer assigns a fixed slot team.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 23:16:06 -07:00
eros
0ef0dc3d78 refactor(backend): remove remaining dead code and unused constants
Drop unused Game methods, Room.id field, and backend-only sheet ring constants that duplicated frontend definitions.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 10:58:35 -07:00
eros
0ca0f0e3ff refactor(frontend): centralize game state in GameModel
Extract mutable state from game.ts into a dedicated GameModel class to clarify data flow and state transitions.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 10:55:45 -07:00
eros
ef5349dfe3 refactor(frontend): introduce DrawableStone interface and use in renderer
Replace the ad-hoc StoneState | {...} union in drawStone/draw with a named DrawableStone type.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 10:51:37 -07:00
eros
23a0cafe18 refactor(backend): split handle_socket and make rooms map async-safe
Replace std::sync::Mutex with tokio::sync::Mutex; extract try_join_room, register_player, spawn_forwarder, broadcast_room_state, spawn_message_handler, remove_player.

Use Game::process_throw in the message handler.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 10:49:56 -07:00
eros
1f673b4eba refactor(backend): encapsulate throw lifecycle and clean dead code in game.rs
Add Game::process_throw to centralize throw→simulation→scoring→state flow.

Remove dead room_tx field, simplify add_player, and rename end_ends_or_continue.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 10:46:12 -07:00
eros
27e524a418 test: add end-to-end WebSocket test suite
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 08:18:16 -07:00
eros
86153894ac feat: add Vite TypeScript frontend for curling game
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 08:18:13 -07:00
eros
5e0c188d9b feat: add Rust Axum backend with WebSocket game server
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 08:18:07 -07:00
eros
0df556ff46 docs: add README and project gitignore
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-06-24 08:17:05 -07:00