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 upgrade_rows: Vec<(usize, Rect)>,
    pub fingerer_rows: Vec<(usize, Rect)>,
    pub help_hits: Vec<(HelpAction, Rect)>,
    pub prestige_reset_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.

§upgrade_rows: Vec<(usize, Rect)>

(upgrade_idx, screen_row_rect) pairs for the Upgrades panel — populated only when the active mode renders that panel; empty otherwise. The click router hit-tests these for BuyUpgrade. First element of each tuple is also the digit-shortcut target, kept aligned with visible_upgrades.

§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 confirm line in the Prestige panel. Default rect when not in Prestige mode or no prestige is available.

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.