From 403a612d6974b0be4d54d5aedd46f23cc395e469 Mon Sep 17 00:00:00 2001 From: Ben Frankel Date: Sun, 18 Aug 2024 18:22:53 -0700 Subject: [PATCH] Split out `context` and `placement` modules --- src/context.rs | 255 ++++++++++++++++++++++++++ src/lib.rs | 460 ++--------------------------------------------- src/placement.rs | 223 +++++++++++++++++++++++ 3 files changed, 489 insertions(+), 449 deletions(-) create mode 100644 src/context.rs create mode 100644 src/placement.rs diff --git a/src/context.rs b/src/context.rs new file mode 100644 index 0000000..56c363e --- /dev/null +++ b/src/context.rs @@ -0,0 +1,255 @@ +//! TODO + +use bevy_app::{App, PreUpdate}; +#[cfg(feature = "bevy_reflect")] +use bevy_ecs::reflect::ReflectResource; +use bevy_ecs::{ + entity::Entity, + event::{Event, EventReader, EventWriter}, + query::With, + schedule::{common_conditions::on_event, IntoSystemConfigs as _}, + system::{Query, Res, ResMut, Resource}, +}; +use bevy_math::Vec2; +use bevy_render::{ + camera::{Camera, RenderTarget}, + view::Visibility, +}; +use bevy_text::Text; +use bevy_time::Time; +use bevy_ui::{Interaction, UiStack}; +use bevy_window::{PrimaryWindow, Window, WindowRef}; +use tiny_bail::prelude::*; + +use crate::{PrimaryTooltip, Tooltip, TooltipActivation, TooltipEntity, TooltipTransfer}; + +pub(super) fn plugin(app: &mut App) { + app.register_type::(); + app.init_resource::(); + app.add_event::(); + app.add_event::(); + app.add_systems( + PreUpdate, + ( + update_tooltip_context, + hide_tooltip.run_if(on_event::()), + show_tooltip.run_if(on_event::()), + ) + .chain(), + ); +} + +/// TODO +#[derive(Resource, Clone, Debug)] +#[cfg_attr( + feature = "bevy_reflect", + derive(bevy_reflect::Reflect), + reflect(Resource) +)] +pub(crate) struct TooltipContext { + /// The current state of the tooltip system. + pub(crate) state: TooltipState, + /// The current or previous target entity being interacted with. + pub(crate) target: Entity, + /// The remaining duration of the current activation delay or transfer timeout (in milliseconds). + timer: u16, + /// The current cursor position or activation point. + pub(crate) cursor_pos: Vec2, + /// The current activation conditions. + activation: TooltipActivation, + /// The current transfer conditions. + transfer: TooltipTransfer, + /// The tooltip container entity. + entity: TooltipEntity, +} + +impl Default for TooltipContext { + fn default() -> Self { + Self { + state: TooltipState::Inactive, + target: Entity::PLACEHOLDER, + timer: 0, + cursor_pos: Vec2::ZERO, + activation: TooltipActivation::IMMEDIATE, + transfer: TooltipTransfer::NONE, + entity: TooltipEntity::Custom(Entity::PLACEHOLDER), + } + } +} + +fn update_tooltip_context( + mut ctx: ResMut, + mut hide_tooltip: EventWriter, + mut show_tooltip: EventWriter, + primary: Res, + time: Res