use PieceUpdateOp::*;
let oe = bulk.pieces.get(&upiece);
let ne = match (oe, uuop) {
+ // We preserve Quietness rather than coalescing. This avoids
+ // many more cases here, and this code is used for mgmt
+ // updates, which are generally Quiet anyway.
( None , e ) => Some( e ),
+ ( Some( Insert (()) ) , Delete() ) => None,
( Some( InsertQuiet(()) ) , Delete() ) => None,
+ ( Some( Insert (()) ) , _ ) => Some( Insert (()) ),
( Some( InsertQuiet(()) ) , _ ) => Some( InsertQuiet(()) ),
( Some( Delete ( ) ) , _ ) => Some( Modify (()) ),
( _ , _ ) => Some( Modify (()) ),
if matches_doesnot!(
op,
= Move(_) | MoveQuiet(_) | SetZLevel(_) | SetZLevelQuiet(_),
- ! Delete() | InsertQuiet(_) | Modify(_) | ModifyQuiet(_),
+ ! Delete() | Insert(_) | InsertQuiet(_) | Modify(_) | ModifyQuiet(_),
) {
match self.occulted {
Visible(_) | Occulted => (),
// Quiet means not to produce the yellow halo (see `movements` in script.ts)
pub enum PieceUpdateOp<NS,ZL> {
Delete(),
+ Insert(NS),
InsertQuiet(NS),
Modify(NS),
ModifyQuiet(NS),
use PieceUpdateOp::*;
match self {
Delete() => None,
+ Insert(ns) => Some(ns),
InsertQuiet(ns) => Some(ns),
Modify(ns) => Some(ns),
ModifyQuiet(ns) => Some(ns),
use PieceUpdateOp::*;
Ok(match self {
Delete() => Delete(),
+ Insert(ns) => Insert(f(ns)?),
InsertQuiet(ns) => InsertQuiet(f(ns)?),
Modify(ns) => Modify(f(ns)?),
ModifyQuiet(ns) => ModifyQuiet(f(ns)?),
use PieceUpdateOp::*;
match self {
Delete() => Delete(),
+ Insert(ns) => Insert(ns),
InsertQuiet(ns) => InsertQuiet(ns),
Modify(ns) => Modify(ns),
ModifyQuiet(ns) => ModifyQuiet(ns),
use PieceUpdateOp::*;
match self {
Delete() => None,
+ Insert(_) => None,
InsertQuiet(_) => None,
Modify(_) => None,
ModifyQuiet(_) => None,
}
pieceops.InsertQuiet = <PieceHandler>(insert_piece as any);
+pieceops.Insert = <PieceHandler>function
+(piece: PieceId, xp: any, info: PreparedPieceState) {
+ let p = insert_piece(piece,xp,info);
+ piece_note_moved(piece,p);
+}
function insert_piece(piece: PieceId, xp: any,
info: PreparedPieceState): PieceInfo