use bevy_ecs::{
component::Component,
entity::Entity,
observer::On,
system::{Commands, Res},
};
use bevy_picking::events::{Over, Pointer};
use bevy_time::{Timer, TimerMode};
use tiny_bail::prelude::*;
use crate::{ActivationMethod, TooltipConfiguration, TooltipLinkTimer};
#[derive(Debug, Component)]
pub struct TooltipTermLink {
pub(crate) linked_string: String,
}
impl TooltipTermLink {
pub fn new(linked_string: impl ToString) -> Self {
Self {
linked_string: linked_string.to_string(),
}
}
pub fn linked_string(&self) -> &str {
&self.linked_string
}
}
#[derive(Debug, Component)]
pub struct TooltipTermLinkRecursive {
pub(crate) parent_entity: Entity,
pub(crate) linked_string: String,
}
impl TooltipTermLinkRecursive {
pub(crate) fn new(parent_entity: Entity, linked_string: String) -> Self {
Self {
parent_entity,
linked_string,
}
}
pub fn linked_string(&self) -> &str {
&self.linked_string
}
pub fn parent_entity(&self) -> Entity {
self.parent_entity
}
}
pub(crate) fn hover_time_spawn(
hover: On<Pointer<Over>>,
tooltip_configuration: Res<TooltipConfiguration>,
mut commands: Commands,
) {
let current_activation = tooltip_configuration.activation_method.clone();
if let ActivationMethod::Hover { time } = current_activation {
{
r!(commands.get_entity(hover.entity)).insert(TooltipLinkTimer {
timer: Timer::new(time, TimerMode::Once),
});
}
}
}