let mut pieces : Vec<_> = ig.gs.pieces.iter().collect();
- pieces.sort_by_key(|(_,pr)| !pr.raised.0);
+ pieces.sort_by_key(|(_,pr)| pr.raised);
for (gpid, pr) in pieces {
let pri = PieceRenderInstructions {
-> (PieceUpdateOp<()>, Vec<LogEntry>) {
let pc = gs.pieces.byid_mut(piece).unwrap();
pc.raised = gs.gen;
- let update = PieceUpdateOp::Raise;
+ let update = PieceUpdateOp::Raise();
(update, vec![])
}
}
#[derive(Debug,Serialize)]
pub enum PieceUpdateOp<NS> {
- Delete,
+ Delete(),
Insert(NS),
Modify(NS),
Move(Pos),
- Raise,
+ Raise(),
}
impl<NS> PieceUpdateOp<NS> {
pub fn new_state(&self) -> Option<&NS> {
use PieceUpdateOp::*;
match self {
- Delete => None,
+ Delete() => None,
Insert(ns) => Some(ns),
Modify(ns) => Some(ns),
Move(_) => None,
- Raise => None,
+ Raise() => None,
}
}
pub fn map_new_state<NS2,F: FnOnce(NS) -> NS2>(self, f:F)
-> PieceUpdateOp<NS2> {
use PieceUpdateOp::*;
match self {
- Delete => Delete,
+ Delete() => Delete(),
Insert(ns) => Insert(f(ns)),
Modify(ns) => Modify(f(ns)),
Move(pos) => Move(pos),
- Raise => Raise,
+ Raise() => Raise(),
}
}
}
let dragraise = +pelem.dataset.dragraise!;
console.log('CHECK RAISE ', dragraise, dragraise*dragraise, ddr2);
if (dragraise > 0 && ddr2 >= dragraise*dragraise) {
+ let marker = piece_element('raisemarker',piece);
+ if (marker == null) {
+ marker = document.createElementNS(svg_ns,'defs')! as
+ SVGGraphicsElement;
+ marker.setAttributeNS(null,'id','raisemarker'+piece);
+ drag_uelem!.parentNode!.insertBefore(marker, drag_uelem!);
+ }
+ raise_piece(drag_uelem!);
api_piece(api, "raise", piece, drag_uelem!, { });
}
if (dragging == DRAGGING.MAYBE_UNGRAB ||
console.log('MODIFY DONE');
}
+function raise_piece(uelem: SVGGraphicsElement) {
+ uelem.parentElement!.appendChild(uelem);
+}
+
+pieceops.Raise = <PieceHandler>function
+(piece, info: { } ) {
+ var uelem = piece_element('use',piece)!;
+ raise_piece(uelem);
+}
+
pieceops.Move = <PieceHandler>function
(piece, info: Pos ) {
var uelem = piece_element('use',piece)!;
messages.Recorded = <MessageHandler>function
(j: { piece: PieceId, cseq: ClientSeq, gen: Generation } ) {
- var uelem = document.getElementById('use'+j.piece)!;
+ let piece = j.piece;
+ var uelem = document.getElementById('use'+piece)!;
if (uelem.dataset.cseq != null && j.cseq >= +uelem.dataset.cseq) {
delete uelem.dataset.cseq;
+ let marker = piece_element('raisemarker',piece);
+ if (marker != null) {
+ marker.remove();
+ }
}
gen = j.gen;
}
function uelem_checkconflict(piece: PieceId, uelem: SVGGraphicsElement) {
if (uelem.dataset.cseq == null) { return; }
delete uelem.dataset.cseq;
+ let marker = piece_element('raisemarker',piece);
+ if (marker != null) {
+ uelem.parentElement!.insertBefore(marker,uelem);
+ marker.remove();
+ }
add_log_message('Conflict! - simultaneous update');
}