Skip to main content

DrawOutput

Struct DrawOutput 

Source
pub struct DrawOutput {
    pub biscuit_rect: Rect,
    pub biscuit_focal: (u16, u16),
    pub powerup_rects: Vec<(u64, Rect)>,
    pub play_area: Rect,
    pub tree_node_rects: Vec<(TreeCoord, Rect)>,
    pub tree_action_button: Option<(TreeButtonAction, Rect, TreeCoord)>,
    pub fingerer_rows: Vec<(usize, Rect)>,
    pub help_hits: Vec<(HelpAction, Rect)>,
    pub prestige_reset_rect: Rect,
    pub prestige_confirm_yes_rect: Rect,
    pub prestige_confirm_no_rect: Rect,
}
Expand description

Per-frame layout snapshot produced by draw. Single source of truth for every clickable region on screen + the play-area envelope.

The platform shells (app.rs, wasm_app.rs) store this verbatim and call crate::input::InputContext::from_layout to project it into the per-event input context. Adding a new clickable region only touches this struct + InputContext + the projection — never the platform code.

Fields§

§biscuit_rect: Rect§biscuit_focal: (u16, u16)

Screen position of the biscuit’s focal cell (“the asshole”). Each zoom level’s art has the focal at a slightly different offset inside its bounding box (TINY: col 7 of width 16, FULL: col 31 of width 60, etc.), so the bbox center isn’t the visual center. This drives hands::draw’s orbit center.

§powerup_rects: Vec<(u64, Rect)>

(spawn_id, screen_rect) for every on-screen powerup, in render order. Click hit-test and the g hotkey BOTH reference instances by spawn_id (not by Vec index) so a swap_remove on catch is safe even when multiple events hold layout snapshots between frames. Empty when no powerups are visible.

§play_area: Rect

The whole left column where the biscuit + hands + particles live — i.e. “the box that displays the ass.” Used by the input router so the scroll-wheel zoom fires anywhere in this region (including the vast empty space around a small biscuit at low zoom), and only the right-hand sidebar opts out of zoom.

§tree_node_rects: Vec<(TreeCoord, Rect)>

Per-tree-node clickable rects when the Tree mode is active. Each entry maps a node’s lot coord to its on-screen box. The input router walks these to translate mouse coords into Action::TreeBuy / Action::TreeFocus. Empty when not in Tree mode.

§tree_action_button: Option<(TreeButtonAction, Rect, TreeCoord)>

Left-click target for the buy/refund text in the tree-modal info pane. Some only when the focused node is currently actionable (buyable + affordable, or owned + refundable). Lets touch / left-only players trigger the action without right-clicking.

§fingerer_rows: Vec<(usize, Rect)>

(fingerer_idx, screen_row_rect) for the Game-mode sidebar.

§help_hits: Vec<(HelpAction, Rect)>

(action, rect) for every clickable help-bar hint at the bottom of the play column. Mouse-first players use these to switch panels, catch goldens, prestige-reset, and quit — all of which used to be keyboard-only. Empty rects when the hint is non-actionable (e.g. [Space/Click] finger is informational, not a click target).

§prestige_reset_rect: Rect

Click rect for the Press [r] to reset and claim line in the Prestige panel — flips the player into the confirm-pending state. Default when not in Prestige mode, prestige unavailable, or already mid-confirmation.

§prestige_confirm_yes_rect: Rect

Click rect for the Yes / No buttons in the prestige-reset confirmation block. Both default unless prestige_confirm_pending is set on UiState and prestige is available.

§prestige_confirm_no_rect: Rect

Trait Implementations§

Source§

impl Default for DrawOutput

Source§

fn default() -> DrawOutput

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.