1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use amethyst_core::ecs::prelude::{Component, DenseVecStorage};
use crate::{
event::{UiEvent, UiEventType},
event_retrigger::{EventRetrigger, EventRetriggerSystem, EventRetriggerSystemDesc},
EventReceiver, UiButtonAction,
};
pub type UiButtonActionRetriggerSystemDesc = EventRetriggerSystemDesc<UiButtonActionRetrigger>;
pub type UiButtonActionRetriggerSystem = EventRetriggerSystem<UiButtonActionRetrigger>;
#[derive(Debug)]
pub struct UiButtonActionRetrigger {
pub on_click_start: Vec<UiButtonAction>,
pub on_click_stop: Vec<UiButtonAction>,
pub on_hover_start: Vec<UiButtonAction>,
pub on_hover_stop: Vec<UiButtonAction>,
}
impl Component for UiButtonActionRetrigger {
type Storage = DenseVecStorage<Self>;
}
impl EventRetrigger for UiButtonActionRetrigger {
type In = UiEvent;
type Out = UiButtonAction;
fn apply<R>(&self, event: &Self::In, out: &mut R)
where
R: EventReceiver<Self::Out>,
{
match event.event_type {
UiEventType::ClickStart => out.receive(&self.on_click_start),
UiEventType::ClickStop => out.receive(&self.on_click_stop),
UiEventType::HoverStart => out.receive(&self.on_hover_start),
UiEventType::HoverStop => out.receive(&self.on_hover_stop),
_ => {}
};
}
}