pub mod into;
use crate::ecs::{
system::{handler::SystemFunction,param::SystemParameter},
world::UnsafeWorldCell,
};
pub trait EventHandler<E> {
fn trigger(&self, event: &E, cell: &UnsafeWorldCell);
}
impl<F, E, P1> EventHandler<E> for SystemFunction<F, P1>
where
F: Fn(&E, P1),
P1: SystemParameter,
{
fn trigger(&self, event: &E, cell: &UnsafeWorldCell) {
let p1 = P1::fetch(cell);
(self.func)(event, p1);
}
}
impl<F, E, P1, P2> EventHandler<E> for SystemFunction<F, (P1, P2)>
where
F: Fn(&E, P1, P2),
P1: SystemParameter,
P2: SystemParameter,
{
fn trigger(&self, event: &E, cell: &UnsafeWorldCell) {
let p1 = P1::fetch(cell);
let p2 = P2::fetch(cell);
(self.func)(event, p1, p2);
}
}
impl<F, E, P1, P2, P3> EventHandler<E> for SystemFunction<F, (P1, P2, P3)>
where
F: Fn(&E, P1, P2, P3),
P1: SystemParameter,
P2: SystemParameter,
P3: SystemParameter,
{
fn trigger(&self, event: &E, cell: &UnsafeWorldCell) {
let p1 = P1::fetch(cell);
let p2 = P2::fetch(cell);
let p3 = P3::fetch(cell);
(self.func)(event, p1, p2, p3);
}
}
impl<F, E, P1, P2, P3, P4> EventHandler<E> for SystemFunction<F, (P1, P2, P3, P4)>
where
F: Fn(&E, P1, P2, P3, P4),
P1: SystemParameter,
P2: SystemParameter,
P3: SystemParameter,
P4: SystemParameter,
{
fn trigger(&self, event: &E, cell: &UnsafeWorldCell) {
let p1 = P1::fetch(cell);
let p2 = P2::fetch(cell);
let p3 = P3::fetch(cell);
let p4 = P4::fetch(cell);
(self.func)(event, p1, p2, p3, p4);
}
}
impl<F, E, P1, P2, P3, P4, P5> EventHandler<E> for SystemFunction<F, (P1, P2, P3, P4, P5)>
where
F: Fn(&E, P1, P2, P3, P4, P5),
P1: SystemParameter,
P2: SystemParameter,
P3: SystemParameter,
P4: SystemParameter,
P5: SystemParameter,
{
fn trigger(&self, event: &E, cell: &UnsafeWorldCell) {
let p1 = P1::fetch(cell);
let p2 = P2::fetch(cell);
let p3 = P3::fetch(cell);
let p4 = P4::fetch(cell);
let p5 = P5::fetch(cell);
(self.func)(event, p1, p2, p3, p4, p5);
}
}
impl<F, E, P1, P2, P3, P4, P5, P6> EventHandler<E> for SystemFunction<F, (P1, P2, P3, P4, P5, P6)>
where
F: Fn(&E, P1, P2, P3, P4, P5, P6),
P1: SystemParameter,
P2: SystemParameter,
P3: SystemParameter,
P4: SystemParameter,
P5: SystemParameter,
P6: SystemParameter,
{
fn trigger(&self, event: &E, cell: &UnsafeWorldCell) {
let p1 = P1::fetch(cell);
let p2 = P2::fetch(cell);
let p3 = P3::fetch(cell);
let p4 = P4::fetch(cell);
let p5 = P5::fetch(cell);
let p6 = P6::fetch(cell);
(self.func)(event, p1, p2, p3, p4, p5, p6);
}
}
impl<F, E, P1, P2, P3, P4, P5, P6, P7> EventHandler<E> for SystemFunction<F, (P1, P2, P3, P4, P5, P6, P7)>
where
F: Fn(&E, P1, P2, P3, P4, P5, P6, P7),
P1: SystemParameter,
P2: SystemParameter,
P3: SystemParameter,
P4: SystemParameter,
P5: SystemParameter,
P6: SystemParameter,
P7: SystemParameter,
{
fn trigger(&self, event: &E, cell: &UnsafeWorldCell) {
let p1 = P1::fetch(cell);
let p2 = P2::fetch(cell);
let p3 = P3::fetch(cell);
let p4 = P4::fetch(cell);
let p5 = P5::fetch(cell);
let p6 = P6::fetch(cell);
let p7 = P7::fetch(cell);
(self.func)(event, p1, p2, p3, p4, p5, p6, p7);
}
}
impl<F, E, P1, P2, P3, P4, P5, P6, P7, P8> EventHandler<E> for SystemFunction<F, (P1, P2, P3, P4, P5, P6, P7, P8)>
where
F: Fn(&E, P1, P2, P3, P4, P5, P6, P7, P8),
P1: SystemParameter,
P2: SystemParameter,
P3: SystemParameter,
P4: SystemParameter,
P5: SystemParameter,
P6: SystemParameter,
P7: SystemParameter,
P8: SystemParameter,
{
fn trigger(&self, event: &E, cell: &UnsafeWorldCell) {
let p1 = P1::fetch(cell);
let p2 = P2::fetch(cell);
let p3 = P3::fetch(cell);
let p4 = P4::fetch(cell);
let p5 = P5::fetch(cell);
let p6 = P6::fetch(cell);
let p7 = P7::fetch(cell);
let p8 = P8::fetch(cell);
(self.func)(event, p1, p2, p3, p4, p5, p6, p7, p8);
}
}