use egui::{Response, Ui};
use crate::{MapMemory, Projector};
/// Plugins allow drawing custom shapes on the map. After implementing this trait for your type,
/// you can add it to the map with [`crate::Map::with_plugin`]
pub trait Plugin {
/// Function called at each frame.
///
/// The provided [`Ui`] has its [`Ui::max_rect`] set to the full rect that was allocated
/// by the map widget. Implementations should typically use the provided [`Projector`] to
/// compute target screen coordinates and use one of the various egui methods to draw at these
/// coordinates instead of relying on [`Ui`] layout system.
///
/// The provided [`Response`] is the response of the map widget itself and can be used to test
/// if the mouse is hovering or clicking on the map.
fn run(
self: Box<Self>,
ui: &mut Ui,
response: &Response,
projector: &Projector,
map_memory: &MapMemory,
);
}