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: 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.
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.
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: RectClick 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: RectClick 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: RectTrait 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