bevy-inspector-egui 0.11.0

Inspector plugin for the bevy game engine
Documentation
use bevy::{
    asset::{Asset, AssetPath},
    ecs::event::{Events, ManualEventReader},
    prelude::*,
};
use bevy_egui::egui::{self, Response, RichText, Widget};

pub fn drag_and_drop_target(ui: &mut egui::Ui) -> Response {
    drag_and_drop_target_label(ui, egui::Label::new("Drag file here"))
}
pub fn drag_and_drop_target_label(ui: &mut egui::Ui, label: egui::Label) -> Response {
    let frame = egui::containers::Frame::dark_canvas(ui.style());
    frame.show(ui, |ui| label.ui(ui)).inner
}

pub fn replace_handle_if_dropped<T: Asset>(
    handle: &mut Handle<T>,
    events: &Events<FileDragAndDrop>,
    asset_server: &AssetServer,
) -> bool {
    let mut reader = ManualEventReader::default();
    let drag_and_drop_event = reader.iter(events).next_back();
    if let Some(FileDragAndDrop::DroppedFile { path_buf, .. }) = &drag_and_drop_event {
        let asset_path = AssetPath::new_ref(path_buf, None);
        let new_handle: Handle<T> = asset_server.load(asset_path);

        *handle = new_handle;
        return true;
    }

    false
}

pub fn label_button(ui: &mut egui::Ui, text: &str, text_color: egui::Color32) -> bool {
    ui.add(egui::Button::new(RichText::new(text).color(text_color)).frame(false))
        .clicked()
}