diff --git a/Cargo.toml b/Cargo.toml index 60a4552..bedd9b4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,13 +17,18 @@ bevy_app = { version = "0.14", default-features = false } bevy_core = { version = "0.14", default-features = false } bevy_ecs = { version = "0.14", default-features = false } bevy_hierarchy = { version = "0.14", default-features = false } +bevy_math = { version = "0.14", default-features = false } bevy_reflect = { version = "0.14", optional = true, default-features = false } bevy_render = { version = "0.14", default-features = false } bevy_sprite = { version = "0.14", default-features = false } bevy_text = { version = "0.14", default-features = false } +bevy_time = { version = "0.14", default-features = false } +bevy_transform = { version = "0.14", default-features = false } bevy_ui = { version = "0.14", default-features = false, features = [ "bevy_text", ] } +bevy_window = { version = "0.14", default-features = false } +tiny_bail = "0.1" [lints.rust] missing_docs = "deny" diff --git a/src/lib.rs b/src/lib.rs index e46e084..446f254 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,27 +1,39 @@ //! TODO -use core::f32; - -use bevy_app::Plugin; +use bevy_app::{Plugin, PreUpdate}; use bevy_core::Name; #[cfg(feature = "bevy_reflect")] use bevy_ecs::reflect::{ReflectComponent, ReflectResource}; -use bevy_ecs::{component::Component, entity::Entity, system::Resource, world::World}; +use bevy_ecs::{ + component::Component, + entity::Entity, + query::With, + system::{Query, Res, ResMut, Resource}, + world::World, +}; use bevy_hierarchy::BuildWorldChildren as _; -use bevy_render::view::Visibility; +use bevy_math::Vec2; +use bevy_render::{ + camera::{Camera, RenderTarget}, + view::Visibility, +}; use bevy_sprite::Anchor; use bevy_text::{Text, TextSection, TextStyle}; +use bevy_time::Time; +use bevy_transform::components::GlobalTransform; use bevy_ui::{ node_bundles::{NodeBundle, TextBundle}, - PositionType, Style, UiRect, Val, ZIndex, + Interaction, PositionType, Style, UiRect, UiStack, Val, ZIndex, }; +use bevy_window::{PrimaryWindow, Window, WindowRef}; +use tiny_bail::prelude::*; /// TODO #[derive(Default)] pub struct TooltipPlugin { - /// TODO + /// Set a custom entity for [`PrimaryTooltip::container`], or spawn a default entity if `None`. pub container_entity: Option, - /// TODO + /// Set a custom entity for [`PrimaryTooltip::text`], or spawn a default entity if `None`. pub text_entity: Option, } @@ -32,12 +44,17 @@ impl Plugin for TooltipPlugin { PrimaryTooltip::new(app.world_mut(), self.container_entity, self.text_entity); app.insert_resource(primary_tooltip); + app.register_type::(); + app.init_resource::(); + // TODO: Make sure this runs after `Interaction` is updated. + app.add_systems(PreUpdate, update_tooltip_context); + app.register_type::(); } } /// TODO -#[derive(Resource)] +#[derive(Resource, Copy, Clone, Debug)] #[cfg_attr( feature = "bevy_reflect", derive(bevy_reflect::Reflect), @@ -82,6 +99,110 @@ impl PrimaryTooltip { } } +fn update_tooltip_context( + mut ctx: ResMut, + time: Res