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
use amethyst_assets::{AssetStorage, Handle, Processor};
use amethyst_core::bundle::{ECSBundle, Result};
use shrev::EventChannel;
use specs::{DispatcherBuilder, World};
use winit::Event;
use super::*;
pub struct UiBundle;
impl UiBundle {
pub fn new() -> Self {
UiBundle
}
}
impl<'a, 'b> ECSBundle<'a, 'b> for UiBundle {
fn build(
self,
world: &mut World,
builder: DispatcherBuilder<'a, 'b>,
) -> Result<DispatcherBuilder<'a, 'b>> {
world.register::<UiImage>();
world.register::<UiTransform>();
world.register::<UiText>();
world.register::<TextEditing>();
world.register::<UiResize>();
world.register::<Handle<FontAsset>>();
world.add_resource(AssetStorage::<FontAsset>::new());
world.add_resource(UiFocused { entity: None });
let reader_1 = world
.write_resource::<EventChannel<Event>>()
.register_reader();
let reader_2 = world
.write_resource::<EventChannel<Event>>()
.register_reader();
Ok(
builder
.add(Processor::<FontAsset>::new(), "font_processor", &[])
.add(UiSystem::new(reader_1), "ui_system", &["font_processor"])
.add(ResizeSystem::new(reader_2), "ui_resize_system", &[]),
)
}
}