From: Ian Jackson Date: Sat, 27 Feb 2021 15:10:18 +0000 (+0000) Subject: hand: wip, create occultation X-Git-Tag: otter-0.4.0~310 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=60258040c5a55360432bfb66f209f2826995d88c;p=otter.git hand: wip, create occultation Don't know if this actually works ... Signed-off-by: Ian Jackson --- diff --git a/src/hand.rs b/src/hand.rs index 41f56eca..34d14098 100644 --- a/src/hand.rs +++ b/src/hand.rs @@ -136,11 +136,11 @@ impl PieceTrait for Hand { fn ui_operation(&self, a: ApiPieceOpArgs<'_>, opname: &str, wrc: WhatResponseToClientOp) -> PieceUpdateResult { - let ApiPieceOpArgs { gs, player, piece, ..} = a; + let ApiPieceOpArgs { gs,player,piece,ipieces,.. } = a; let gplayers = &mut gs.players; let gpieces = &mut gs.pieces; - let _goccults = &mut gs.occults; + let goccults = &mut gs.occults; let gpc = gpieces.byid_mut(piece)?; let xdata = gpc.xdata.get_mut::() .map_err(|e| APOE::ReportViaResponse(e.into()))?; @@ -151,23 +151,44 @@ impl PieceTrait for Hand { let gpl = gplayers.byid_mut(player)?; let nick = Html(htmlescape::encode_minimal(&gpl.nick)); - let did; - let new_owner; - match (opname, xdata.owner.is_some()) { + let (new_owner, did) = match (opname, xdata.owner.is_some()) { ("claim", false) => { let new_desc = Html(format!("{}'s hand", &nick.0)); - new_owner = Some(MagicOwner { + let new_owner = Some(MagicOwner { player, dasharray, desc: new_desc, }); + let pos = gpc.pos; + let (region, views) = (||{ + let region = AreaC( + [-1,1].iter().map(|&signum| Ok::<_,IE>({ + let xy = self.shape.outline.xy.try_map( + |c| c.floor().to_i32().ok_or(CoordinateOverflow) + )?; + (pos + (xy * signum)?)? + })) + .collect::,_>>()? + .into_inner().unwrap() + ); + let views = OwnerOccultationView { + owner: player, + owner_view: OccK::Visible, + defview: OccK::Displaced { within: region }, + }.views()?; + Ok::<_,IE>((region, views)) + })().map_err(|ie| ApiPieceOpError::ReportViaResponse(ie.into()))?; + + // actually do things: + create_occultation(gplayers, gpieces, goccults, ipieces, + region, piece, views)?; // xxx recalculate occultations - did = format!("claimed {}", &old_desc.0); + + (new_owner, format!("claimed {}", &old_desc.0)) } ("deactivate", true) => { - new_owner = None; // xxx recalculate occultations - did = format!("deactivated {}", &old_desc.0); + (None, format!("deactivated {}", &old_desc.0)) } ("claim", true) | ("deactivate", false) => { @@ -176,7 +197,7 @@ impl PieceTrait for Hand { _ => { throw!(OE::BadOperation); } - } + }; let log = vec![ LogEntry { html: Html(format!("{} {}", nick.0, did)) }];