trait ApiPieceOp : Debug {
#[throws(GameError)]
fn op(&self, gs: &mut GameState, player: PlayerId, piece: PieceId,
- lens: &dyn Lens)
+ lens: &dyn Lens /* used for LogEntry and PieceId but not Pos */)
-> (PieceUpdateOp<()>, Vec<LogEntry>);
}
-> PieceRenderInstructions;
fn svg_pri(&self, piece: PieceId, pc: &PieceRecord, player: PlayerId)
-> PieceRenderInstructions;
+ fn massage_prep_piecestate(&self, ns : &mut PreparedPieceState);
fn decode_visible_pieceid(&self, vpiece: VisiblePieceId, player: PlayerId)
-> PieceId;
}
let kd : slotmap::KeyData = vpiece.into();
PieceId::from(kd)
}
+ fn massage_prep_piecestate(&self, _ns : &mut PreparedPieceState) { }
}
#[throws(OE)]
let pri_for_all = lens.svg_pri(piece,pc,Default::default());
let update = update.map_new_state(|_|{
- pc.prep_piecestate(&pri_for_all)
+ let mut ns = pc.prep_piecestate(&pri_for_all);
+ lens.massage_prep_piecestate(&mut ns);
+ ns
});
let mut us = Vec::with_capacity(1 + logents.len());
}
#[derive(Debug,Serialize,Deserialize)]
-struct ApiMove {
- t : String,
- p : VisiblePieceId,
- l : Pos,
-}
+struct ApiPieceMove (Pos);
#[post("/_/api/m", format="json", data="<form>")]
#[throws(OE)]
-fn api_move(form : Json<ApiMove>) -> impl response::Responder<'static> {
- eprintln!("API {:?}", &form);
- ""
+fn api_move(form : Json<ApiPiece<ApiPieceMove>>) -> impl response::Responder<'static> {
+ api_piece_op(form)
+}
+impl ApiPieceOp for ApiPieceMove {
+ #[throws(GameError)]
+ fn op(&self, gs: &mut GameState, _: PlayerId, piece: PieceId,
+ _lens: &dyn Lens)
+ -> (PieceUpdateOp<()>, Vec<LogEntry>) {
+ let pc = gs.pieces.byid_mut(piece).unwrap();
+
+ pc.pos = self.0;
+ let update = PieceUpdateOp::Move(self.0);
+ (update, vec![])
+ }
}
#[get("/_/updates/<ctoken>/<gen>")]
api_check();
}
-function api_piece(meth, piece, pelem, op) {
+function api_piece(f, meth, piece, pelem, op) {
cseq += 1;
pelem.dataset.cseq = cseq;
- api(meth, {
+ f(meth, {
ctoken : ctoken,
piece : piece,
gen : gen,
} else {
dragging = DRAGGING.MAYBE_GRAB;
pelem = set_grab(drag_uelem, piece, us);
- api_piece('grab', piece, pelem, { });
+ api_piece(api, 'grab', piece, pelem, { });
}
window.addEventListener('mousemove', drag_mousemove, true);
drag_uelem.setAttributeNS(null, "x", x);
drag_uelem.setAttributeNS(null, "y", y);
//console.log(drag_uelem);
- api_delay('m',{
+ api_piece(api_delay ('m',{
t : token,
p : drag_uelem.dataset.piece,
l : [x, y],
dragging == (DRAGGING.MAYBE_GRAB | DRAGGING.YES)) {
piece = drag_uelem.dataset.piece;
var pelem = set_ungrab(drag_uelem, piece);
- api_piece('ungrab', drag_uelem.dataset.piece, pelem, { });
+ api_piece(f, 'ungrab', drag_uelem.dataset.piece, pelem, { });
}
drag_cancel(e);
}