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: RectThe 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: RectClick 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
impl Default for DrawOutput
Source§fn default() -> DrawOutput
fn default() -> DrawOutput
Auto Trait Implementations§
impl Freeze for DrawOutput
impl RefUnwindSafe for DrawOutput
impl Send for DrawOutput
impl Sync for DrawOutput
impl Unpin for DrawOutput
impl UnsafeUnpin for DrawOutput
impl UnwindSafe for DrawOutput
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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