partialy draw a tile

wind assignment and turn ordering
This commit is contained in:
Tao Tien 2026-02-13 06:10:09 -08:00
parent b9c653f3a2
commit 63e21713ab
14 changed files with 189 additions and 38 deletions

View file

@ -0,0 +1,54 @@
use spacetimedb::{ReducerContext, Table, ViewContext, reducer, view};
use crate::tables::{player::player, *};
use jong_types::*;
pub fn deal_hands(ctx: &ReducerContext, lobby_id: u32) {
let players = ctx.db.player().lobby_id().filter(lobby_id);
let bots = ctx.db.bot().lobby_id().filter(lobby_id);
let mut wall = ctx.db.wall().lobby_id().find(lobby_id).unwrap();
// FIXME rectify deal orders
for mut player in players {
let mut tiles = wall.tiles.split_off(wall.tiles.len() - 13);
wall = ctx.db.wall().lobby_id().update(wall);
tiles.sort_by_key(|t| t.tile);
player.hand = tiles;
ctx.db.player().id().update(player);
}
for mut bot in bots {
let mut tiles = wall.tiles.split_off(wall.tiles.len() - 13);
wall = ctx.db.wall().lobby_id().update(wall);
tiles.sort_by_key(|t| t.tile);
bot.hand = tiles;
ctx.db.bot().id().update(bot);
}
}
#[reducer]
pub fn draw_tile(ctx: &ReducerContext) {
let mut player = ctx.db.player().identity().find(ctx.sender).unwrap();
let mut wall = ctx.db.wall().lobby_id().find(player.lobby_id).unwrap();
// TODO if no more tiles, exhaust somehow
player.drawn_tile = wall.tiles.pop();
ctx.db.wall().lobby_id().update(wall);
ctx.db.player().id().update(player);
}
// #[view(name = view_player_hand, public)]
// pub fn view_player_hand(ctx: &ViewContext) -> Option<Hand> {
// ctx.db
// .player()
// .identity()
// .find(ctx.sender)
// .map(|p| ctx.db.hand().id().find(p.hand_id))?
// }
// #[reducer]
// pub fn sort_hand(ctx: &ReducerContext) {
// todo!()
// }