use crate::ecs::events::{
command::CommandRequested, cursor::CursorMoveRequested, intent::ViewportIntent,
status::StatusMessageRequested,
};
use bevy::prelude::MessageWriter;
#[derive(Clone, Debug, Eq, PartialEq)]
pub(super) enum VimEffect {
CursorMove(CursorMoveRequested),
Viewport(ViewportIntent),
Status(StatusMessageRequested),
Command(CommandRequested),
}
#[derive(bevy::ecs::system::SystemParam)]
pub struct VimEffectWriters<'w> {
cursor_moves: MessageWriter<'w, CursorMoveRequested>,
viewport_intents: MessageWriter<'w, ViewportIntent>,
status_requests: MessageWriter<'w, StatusMessageRequested>,
command_requests: MessageWriter<'w, CommandRequested>,
}
impl VimEffectWriters<'_> {
pub(super) fn emit(&mut self, effects: &[VimEffect]) {
for effect in effects {
match effect {
VimEffect::CursorMove(request) => {
let _sent = self.cursor_moves.write(*request);
}
VimEffect::Viewport(intent) => {
let _sent = self.viewport_intents.write(*intent);
}
VimEffect::Status(request) => {
let _sent = self.status_requests.write(request.clone());
}
VimEffect::Command(request) => {
let _sent = self.command_requests.write(*request);
}
}
}
}
}