use std::marker::PhantomData;
use bevy::{
ecs::system::SystemParam,
prelude::*,
};
use crate::Item;
pub struct TextDisplayPlugin;
impl Plugin for TextDisplayPlugin {
fn build(&self, app: &mut App) {
app .add_event::<NewMessage>();
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Clone, Debug)]
pub enum Message {
Text(String),
ItemPickup(Item),
ItemCombine {
src: Item,
dst: Item,
result: Item,
},
InvalidItemCombination,
InvalidItemUsed,
}
impl Message {
pub fn new(text: &str) -> Self {
Self::Text(text.to_owned())
}
}
#[derive(Debug, Event)]
pub struct NewMessage(pub Message);
#[derive(SystemParam)]
pub struct TextDisplay<'w, 's> {
events: EventWriter<'w, NewMessage>,
#[system_param(ignore)]
_marker: PhantomData<&'s ()>,
}
impl<'w, 's> TextDisplay<'w, 's> {
pub fn show(&mut self, message: Message) {
self.events.send(NewMessage(message));
}
}