bevy_input_sequence/
action.rs

1//! Common actions to do on key sequence matches
2use bevy::ecs::{
3    prelude::{Commands, Event, Message, MessageWriter},
4    system::In,
5};
6
7/// Write a message.
8///
9/// ```rust
10/// use bevy::prelude::*;
11/// use bevy_input_sequence::prelude::*;
12///
13/// #[derive(Debug, Clone, Eq, PartialEq, Hash, States)]
14/// enum AppState { Menu, Game }
15/// #[derive(Message, Clone, Debug, Default)]
16/// struct MyEvent;
17///
18/// KeySequence::new(
19///    action::write_message(MyEvent),
20///    keyseq! { Space });
21/// ```
22pub fn write_message<E: Message + Clone>(event: E) -> impl FnMut(MessageWriter<E>) {
23    move |mut writer: MessageWriter<E>| {
24        writer.write(event.clone());
25    }
26}
27
28/// Send an event.
29#[deprecated(since = "0.9.1", note = "please use `write_message` instead")]
30pub fn send_event<E: Message + Clone>(event: E) -> impl FnMut(MessageWriter<E>) {
31    write_message(event)
32}
33
34/// Trigger an event.
35pub fn trigger<'a, E>(event: E) -> impl FnMut(Commands)
36where
37    E: Event + Clone,
38    <E as Event>::Trigger<'a>: Default,
39{
40    move |mut commands: Commands| {
41        commands.trigger(event.clone());
42    }
43}
44
45/// Write a message with input, .e.g,
46/// [ButtonSequence](crate::input_sequence::ButtonSequence) provides a
47/// [Gamepad](bevy::input::gamepad::Gamepad) identifier.
48pub fn write_message_with_input<E: Message, Input: 'static, F: FnMut(Input) -> E>(
49    mut f: F,
50) -> impl FnMut(In<Input>, MessageWriter<E>) {
51    move |In(x), mut writer: MessageWriter<E>| {
52        writer.write(f(x));
53    }
54}
55
56/// Sends an event with input.
57#[deprecated(
58    since = "0.9.1",
59    note = "please use `write_message_with_input` instead"
60)]
61pub fn send_event_with_input<E: Message, Input: 'static, F: FnMut(Input) -> E>(
62    f: F,
63) -> impl FnMut(In<Input>, MessageWriter<E>) {
64    write_message_with_input(f)
65}