uos: &'r [UoDescription],
moveable: PieceMoveable,
occregion: Option<JsonString<&'r Region>>,
+ pub bbox: &'r Rect,
}
#[derive(Serialize,Debug)]
piece, gpc, ipc);
let pri = if let Some(pri) = pri { pri } else { continue /*invisible*/};
- let defs = pri.make_defs(ioccults, &ig.gs, gpc, ipc)?;
+ let (defs, bbox) = pri.make_defs(ioccults, &ig.gs, gpc, ipc)?;
alldefs.push((pri.vpid, defs));
let desc = pri.describe(ioccults,&ig.gs.occults, &gpc, ipc);
pinned: gpc.pinned,
angle: vangle,
desc,
+ bbox: &bbox,
moveable: gpc.moveable(),
uos: &pri.ui_operations(&ig.gs, gpc, ipc)?,
occregion,
let (pos, zlevel) = pri.pos_zlevel(gpc);
let occregion = gpc.occult.active_region(&gs.occults)?
.map(|r| JsonString(r.clone()));
+ let (svg, bbox) = pri.make_defs(ioccults, gs, gpc, ipc)?;
let r = PreparedPieceState {
pos : pos,
held : gpc.held,
- svg : pri.make_defs(ioccults, gs, gpc, ipc)?,
+ svg : svg,
+ bbox : bbox,
z : zlevel.z.clone(),
zg : zlevel.zg,
angle : pri.angle(gpc).to_compass(),
gpc: &GPiece, ipc: &IPiece)
-> PreparedPieceImage {
let pri = self;
+ let (svg, bbox) = pri.make_defs(ioccults, gs, gpc, ipc)?;
let r = PreparedPieceImage {
- svg : pri.make_defs(ioccults, gs, gpc, ipc)?,
+ svg : svg,
+ bbox : bbox,
uos : pri.ui_operations(gs, gpc, ipc)?,
};
dbgc!(pri, ipc, gpc, r);
#[throws(IE)]
pub fn make_defs<'p>(&self, ioccults: &IOccults, gs: &GameState,
- gpc: &GPiece, ipc: &IPiece) -> Html
+ gpc: &GPiece, ipc: &IPiece) -> (Html, Rect)
{
let pri = self;
let instead = pri.instead(ioccults, ipc)?;
};
let angle = pri.angle(gpc);
+ let bbox = o.bbox_approx()?;
let dragraise = match o.thresh_dragraise()? {
Some(n) if n < 0 => throw!(SvgE::NegativeDragraise),
hwrite!(&mut defs,
r##"<path id="surround{}" d="{}"/>"##,
pri.vpid, o.surround_path()?)?;
- defs
+ (defs, bbox)
}
#[throws(InternalError)]
pub moveable: PieceMoveable,
pub uos: Vec<UoDescription>,
pub occregion: Option<JsonString<Region>>,
+ pub bbox: Rect,
}
#[derive(Debug,Copy,Clone,Serialize,Deserialize,Eq)]
#[derive(Debug,Clone,Serialize)]
pub struct PreparedPieceImage {
pub svg: Html,
+ pub bbox: Rect,
pub uos: Vec<UoDescription>,
}
queued_moves : number,
last_seen_moved : DOMHighResTimeStamp | null, // non-0 means halo'd
held_us_inoccult: boolean,
+ bbox: [Pos, Pos],
}
let wasm : InitOutput;
uos: UoDescription[],
moveable: PieceMoveable,
occregion: string | null,
+ bbox: [Pos, Pos],
}
pieceops.ModifyQuiet = <PieceHandler>function
p.delem.innerHTML = info.svg;
p.pelem= piece_element('piece',piece)!;
p.uos = info.uos;
+ p.bbox = info.bbox;
}
function piece_modify(piece: PieceId, p: PieceInfo, info: PreparedPieceState,
p.pinned = info.pinned;
p.moveable = info.moveable;
p.angle = info.angle;
+ p.bbox = info.bbox;
piece_set_zlevel_from(piece,p,info);
let occregions_changed = occregion_update(piece, p, info);
piece_checkconflict_nrda(piece,p,conflict_expected);
type PreparedPieceImage = {
svg: string,
uos: UoDescription[],
+ bbox: [Pos, Pos],
}
type TransmitUpdateEntry_Image = {