|
@@ -1,5 +1,6 @@
|
|
use specs::{Component, VecStorage, NullStorage};
|
|
use specs::{Component, VecStorage, NullStorage};
|
|
|
|
|
|
|
|
+/// Register all the components with the world.
|
|
pub fn register(world: &mut specs::World) {
|
|
pub fn register(world: &mut specs::World) {
|
|
world.register::<Position>();
|
|
world.register::<Position>();
|
|
world.register::<Velocity>();
|
|
world.register::<Velocity>();
|
|
@@ -7,9 +8,12 @@ pub fn register(world: &mut specs::World) {
|
|
world.register::<Background>();
|
|
world.register::<Background>();
|
|
world.register::<Foreground>();
|
|
world.register::<Foreground>();
|
|
world.register::<Decoration>();
|
|
world.register::<Decoration>();
|
|
- world.register::<Movable>();
|
|
|
|
|
|
+ world.register::<Controlled>();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/// The `Position` component represents (in world coordinates) a thing
|
|
|
|
+/// that has a position in the world, measured from the top-left of
|
|
|
|
+/// the thing.
|
|
#[derive(Component, Debug)]
|
|
#[derive(Component, Debug)]
|
|
#[storage(VecStorage)]
|
|
#[storage(VecStorage)]
|
|
pub struct Position {
|
|
pub struct Position {
|
|
@@ -18,11 +22,15 @@ pub struct Position {
|
|
}
|
|
}
|
|
|
|
|
|
impl Position {
|
|
impl Position {
|
|
|
|
+ /// Convert a `Position` to a screen point
|
|
pub fn to_point(&self) -> ggez::nalgebra::Point2<f32> {
|
|
pub fn to_point(&self) -> ggez::nalgebra::Point2<f32> {
|
|
ggez::nalgebra::Point2::new(self.x * 3.0, self.y * 3.0)
|
|
ggez::nalgebra::Point2::new(self.x * 3.0, self.y * 3.0)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/// The `Velocity` componenent is present on any entity that moves
|
|
|
|
+/// through the world, and represents its rate of change per
|
|
|
|
+/// time-unit.
|
|
#[derive(Component, Debug)]
|
|
#[derive(Component, Debug)]
|
|
#[storage(VecStorage)]
|
|
#[storage(VecStorage)]
|
|
pub struct Velocity {
|
|
pub struct Velocity {
|
|
@@ -30,12 +38,9 @@ pub struct Velocity {
|
|
pub dy: f32,
|
|
pub dy: f32,
|
|
}
|
|
}
|
|
|
|
|
|
-impl Velocity {
|
|
|
|
- pub fn to_point(&self) -> ggez::nalgebra::Point2<f32> {
|
|
|
|
- ggez::nalgebra::Point2::new(self.dx * 3.0, self.dy * 3.0)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
+/// The `Sprite` components represents the current display location of
|
|
|
|
+/// a sprite in the spritesheet.
|
|
#[derive(Component, Debug)]
|
|
#[derive(Component, Debug)]
|
|
#[storage(VecStorage)]
|
|
#[storage(VecStorage)]
|
|
pub struct Sprite {
|
|
pub struct Sprite {
|
|
@@ -44,6 +49,8 @@ pub struct Sprite {
|
|
}
|
|
}
|
|
|
|
|
|
impl Sprite {
|
|
impl Sprite {
|
|
|
|
+ /// Convert a `Sprite` into the rectangle that specifies the
|
|
|
|
+ /// sprite location on the spritesheet
|
|
pub fn to_rect(&self) -> ggez::graphics::Rect {
|
|
pub fn to_rect(&self) -> ggez::graphics::Rect {
|
|
ggez::graphics::Rect {
|
|
ggez::graphics::Rect {
|
|
x: (1.0 / 32.0) * self.u as f32,
|
|
x: (1.0 / 32.0) * self.u as f32,
|
|
@@ -54,18 +61,34 @@ impl Sprite {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/// A drawing-phase component: represents tiles that appear in the
|
|
|
|
+/// background of everything.
|
|
#[derive(Component, Default, Debug)]
|
|
#[derive(Component, Default, Debug)]
|
|
#[storage(NullStorage)]
|
|
#[storage(NullStorage)]
|
|
pub struct Background;
|
|
pub struct Background;
|
|
|
|
|
|
|
|
+/// A drawing-phase component: represents tiles which appear in the
|
|
|
|
+/// foreground, possibly entities.
|
|
#[derive(Component, Default, Debug)]
|
|
#[derive(Component, Default, Debug)]
|
|
#[storage(NullStorage)]
|
|
#[storage(NullStorage)]
|
|
pub struct Foreground;
|
|
pub struct Foreground;
|
|
|
|
|
|
|
|
+/// A drawing-phase component: represents tiles which appear on top of
|
|
|
|
+/// everything else, such as the tops of trees or roofs of houses.
|
|
#[derive(Component, Default, Debug)]
|
|
#[derive(Component, Default, Debug)]
|
|
#[storage(NullStorage)]
|
|
#[storage(NullStorage)]
|
|
pub struct Decoration;
|
|
pub struct Decoration;
|
|
|
|
|
|
|
|
+/// A component that represents entities which are controlled by the
|
|
|
|
+/// keyboard.
|
|
#[derive(Component, Default, Debug)]
|
|
#[derive(Component, Default, Debug)]
|
|
#[storage(NullStorage)]
|
|
#[storage(NullStorage)]
|
|
-pub struct Movable;
|
|
|
|
|
|
+pub struct Controlled;
|
|
|
|
+
|
|
|
|
+/// A component that represents entities which can collide with other
|
|
|
|
+/// things.
|
|
|
|
+#[derive(Component, Debug)]
|
|
|
|
+#[storage(VecStorage)]
|
|
|
|
+pub struct Collision {
|
|
|
|
+ pub has_collision: bool
|
|
|
|
+}
|