// must be >1 faces on image, or >1 texts, and if both, same number
image: Box<dyn PieceSpec>,
#[serde(default)] labels: SpecLabels,
+ #[serde(default)] label: SpecLabelSection,
occult: Option<OccultSpec>,
// 1.0 means base outline circle size on most distant corner of bounding box
// minimum is 0.5; maximum is 1.5
#[serde(default)] label: String,
}
+#[derive(Debug,Default,Clone,Serialize,Deserialize)]
+pub struct SpecLabelSection {
+ pub colour: Option<ColourSpec>,
+}
+
#[derive(Debug,Clone,Serialize,Deserialize)]
#[serde(untagged)]
pub enum SpecLabels {
itemname: String,
labels: IndexVec<FaceId, String>, // if .len()==1, always use [0]
image: Arc<dyn InertPieceTrait>, // if image.nfaces()==1, always use face 0
+ label_colour: Colour,
surround_outline: CircleOutline,
cooldown_radius: f64,
cooldown_time: Duration,
label_text: &'c str,
label_font_size: f64,
label_y_adjust: f64,
+ label_colour: &'c Html,
cooldown_active: bool,
radius: f64,
index_vec!["".into()]
};
+ let label_colour: Colour = self.label.colour.as_ref()
+ .map(TryInto::try_into).transpose()?
+ .unwrap_or_else(|| Html::lit("black").into());
+
if_let!{ Some((nfaces,_)) = nfaces;
else throw!(SpecError::MultipleFacesRequired) };
let occ_ilk = LOI::Distinct;
let our_occ_image = Arc::new(Die {
nfaces, cooldown_time, cooldown_radius, surround_outline,
+ label_colour: label_colour.clone(),
itemname: itemname.clone(),
desc: desc.clone(),
image: occ_image,
let die = Die {
nfaces, cooldown_time, cooldown_radius, surround_outline,
- itemname, labels, desc,
+ itemname, labels, desc, label_colour,
image: image.into()
};
let tc = OverlayTemplateContext {
label_text: label,
+ label_colour: &self.label_colour,
label_font_size,
label_y_adjust: label_font_size * SVG_FONT_Y_ADJUST_OF_FONT_SIZE,