bevy_adventure/
textdisplay.rs1use std::marker::PhantomData;
2
3use bevy::{
4 ecs::system::SystemParam,
5 prelude::*,
6};
7
8use crate::Item;
9
10pub struct TextDisplayPlugin;
11
12impl Plugin for TextDisplayPlugin {
13 fn build(&self, app: &mut App) {
14 app .add_event::<NewMessage>();
16 }
17}
18
19#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
21#[derive(Clone, Debug)]
22pub enum Message {
23 Text(String),
25
26 ItemPickup(Item),
28
29 ItemCombine {
31 src: Item,
33
34 dst: Item,
36
37 result: Item,
39 },
40
41 InvalidItemCombination,
43
44 InvalidItemUsed,
46}
47
48impl Message {
49 pub fn new(text: &str) -> Self {
51 Self::Text(text.to_owned())
52 }
53}
54
55#[derive(Debug, Event)]
57pub struct NewMessage(pub Message);
58
59#[derive(SystemParam)]
60pub struct TextDisplay<'w, 's> {
61 events: EventWriter<'w, NewMessage>,
62
63 #[system_param(ignore)]
64 _marker: PhantomData<&'s ()>,
65}
66
67impl<'w, 's> TextDisplay<'w, 's> {
68 pub fn show(&mut self, message: Message) {
69 self.events.send(NewMessage(message));
70 }
71}