book/src/concepts/system/system_desc_derive.md
SystemDesc DeriveThe SystemDesc derive supports the following cases when generating a SystemDesc trait implementation:
ReaderId for an EventChannel<_> in the World.ReaderId to a component's FlaggedStorage.World.If your system initialization use case is not covered, please see the
Implementing the SystemDesc Trait page.
# extern crate amethyst;
# use amethyst::ecs::System;
pub struct SystemName {
field_0: u32,
field_1: String,
}
impl SystemName {
fn new(field_0: u32, field_1: String) -> Self {
SystemName { field_0, field_1 }
}
}
# extern crate amethyst;
# use amethyst::ecs::System;
#
# pub struct SystemName {
# field_0: u32,
# field_1: String,
# }
#
# impl SystemName {
# fn new(field_0: u32, field_1: String) -> Self {
# SystemName { field_0, field_1 }
# }
# }
#
/// Builds a `SystemName`.
#[derive(Default, Debug)]
pub struct SystemNameDesc {
field_0: u32,
field_1: String,
}
impl SystemNameDesc {
fn new(field_0: u32, field_1: String) -> Self {
SystemNameDesc { field_0, field_1 }
}
}
impl<'a, 'b> ::amethyst::core::SystemDesc<'a, 'b, SystemName> for SystemNameDesc {
fn build(self, world: &mut ::amethyst::ecs::World) -> SystemName {
SystemName::new(self.field_0, self.field_1)
}
}
# extern crate amethyst;
# use amethyst::ecs::System;
#
pub struct SystemName {
field_0: u32,
field_1: String,
}
impl SystemName {
fn new(field_1: String) -> Self {
SystemName {
field_0: 123,
field_1,
}
}
}
# impl System for SystemName {
# fn build(self) -> Box<(dyn ParallelRunnable + 'static)> {}
# }
# extern crate amethyst;
# use amethyst::ecs::System;
#
# pub struct SystemName {
# field_0: u32,
# field_1: String,
# }
#
# impl SystemName {
# fn new(field_1: String) -> Self {
# SystemName {
# field_0: 123,
# field_1,
# }
# }
# }
#
# impl System for SystemName {
# fn build(self) -> Box<(dyn ParallelRunnable + 'static)> {}
# }
#
/// Builds a `SystemName`.
#[derive(Default, Debug)]
pub struct SystemNameDesc {
field_1: String,
}
impl SystemNameDesc {
fn new(field_1: String) -> Self {
SystemNameDesc { field_1 }
}
}
impl<'a, 'b> ::amethyst::core::SystemDesc<'a, 'b, SystemName> for SystemNameDesc {
fn build(self, world: &mut ::amethyst::ecs::World) -> SystemName {
SystemName::new(self.field_1)
}
}
Note: If there are no field parameters, the SystemDesc implementation
will call SystemName::default():
# extern crate amethyst;
# use amethyst::ecs::System;
#
#[derive(Default)]
pub struct SystemName {
field_0: u32,
}
# impl System for SystemName {
# fn build(self) -> Box<(dyn ParallelRunnable + 'static)> {}
# }
# extern crate amethyst;
# use amethyst::ecs::System;
#
# #[derive(Default)]
# pub struct SystemName {
# field_0: u32,
# }
#
# impl System for SystemName {
# fn build(self) -> Box<(dyn ParallelRunnable + 'static)> {}
# }
#
/// Builds a `SystemName`.
#[derive(Debug)]
pub struct SystemNameDesc {}
impl Default for SystemNameDesc {
fn default() -> Self {
SystemNameDesc {}
}
}
impl<'a, 'b> ::amethyst::core::SystemDesc<'a, 'b, SystemName> for SystemNameDesc {
fn build(self, world: &mut ::amethyst::ecs::World) -> SystemName {
SystemName::default()
}
}
ReaderId for an EventChannel<_> in the World# extern crate amethyst;
# use amethyst::{
# ecs::System,
# shrev::{EventChannel, ReaderId},
# ui::UiEvent,
# };
#
pub struct SystemName {
reader_id: ReaderId<UiEvent>,
}
impl SystemName {
fn new(reader_id: ReaderId<UiEvent>) -> Self {
SystemName { reader_id }
}
}
# impl System for SystemName {
# fn build(self) -> Box<(dyn ParallelRunnable + 'static)> {}
# }
# extern crate amethyst;
# use amethyst::{
# ecs::System,
# shrev::{EventChannel, ReaderId},
# ui::UiEvent,
# };
#
# pub struct SystemName {
# reader_id: ReaderId<UiEvent>,
# }
#
# impl SystemName {
# fn new(reader_id: ReaderId<UiEvent>) -> Self {
# SystemName { reader_id }
# }
# }
#
# impl System for SystemName {
# fn build(self) -> Box<(dyn ParallelRunnable + 'static)> {}
# }
#
/// Builds a `SystemName`.
#[derive(Debug)]
pub struct SystemNameDesc;
impl Default for SystemNameDesc {
fn default() -> Self {
SystemNameDesc {}
}
}
impl<'a, 'b> ::amethyst::core::SystemDesc<'a, 'b, SystemName> for SystemNameDesc {
fn build(self, world: &mut ::amethyst::ecs::World) -> SystemName {
let reader_id = world.fetch_mut::<EventChannel<UiEvent>>().register_reader();
SystemName::new(reader_id)
}
}
ReaderId to a component's FlaggedStorage# extern crate amethyst;
# use amethyst::{
# ecs::System,
# shrev::{EventChannel, ReaderId},
# ui::UiResize,
# };
#
pub struct SystemName {
resize_events_id: ReaderId<ComponentEvent>,
}
impl SystemName {
fn new(resize_events_id: ReaderId<ComponentEvent>) -> Self {
SystemName { resize_events_id }
}
}
# impl System for SystemName {}
# extern crate amethyst;
# use amethyst::{
# ecs::System,
# shrev::{EventChannel, ReaderId},
# ui::UiResize,
# };
#
# pub struct SystemName {
# resize_events_id: ReaderId<ComponentEvent>,
# }
#
# impl SystemName {
# fn new(resize_events_id: ReaderId<ComponentEvent>) -> Self {
# SystemName { resize_events_id }
# }
# }
#
# impl System for SystemName {}
#
/// Builds a `SystemName`.
#[derive(Debug)]
pub struct SystemNameDesc;
impl Default for SystemNameDesc {
fn default() -> Self {
SystemNameDesc {}
}
}
impl<'a, 'b> ::amethyst::core::SystemDesc<'a, 'b, SystemName> for SystemNameDesc {
fn build(self, world: &mut ::amethyst::ecs::World) -> SystemName {
let resize_events_id = WriteStorage::<UiResize>::fetch(&world).register_reader();
SystemName::new(resize_events_id)
}
}
World# extern crate amethyst;
# use amethyst::ecs::System;
#
pub struct NonDefault;
#[derive(Default)]
pub struct SystemName;
impl System for SystemName {
type SystemData = ReadExpect<'a, NonDefault>;
fn build(self) -> Box<(dyn ParallelRunnable + 'static)> {}
}
# extern crate amethyst;
# use amethyst::ecs::System;
#
# pub struct NonDefault;
#
# #[derive(Default)]
# pub struct SystemName;
#
# impl System for SystemName {
# type SystemData = ReadExpect<NonDefault>;
# fn build(self) -> Box<(dyn ParallelRunnable + 'static)> {}
# }
#
/// Builds a `SystemName`.
#[derive(Debug)]
pub struct SystemNameDesc;
impl Default for SystemNameDesc {
fn default() -> Self {
SystemNameDesc {}
}
}
impl<'a, 'b> ::amethyst::core::SystemDesc<'a, 'b, SystemName> for SystemNameDesc {
fn build(self, world: &mut ::amethyst::ecs::World) -> SystemName {
world.insert(NonDefault);
SystemName::default()
}
}