summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-22 22:00:32 +0100
committertroido <troido@protonmail.com>2020-02-22 22:00:32 +0100
commitf4331041e5d906f95063f317852f32f19e6cdf9c (patch)
treee855402de7b2dcec81c91d97ab6a7e359689ecc5 /src/components
parent2b0cc677f4092d94b31e95f3e9961ec6ed91327b (diff)
items now have an action enum
Diffstat (limited to 'src/components')
-rw-r--r--src/components/item.rs18
-rw-r--r--src/components/mod.rs96
2 files changed, 114 insertions, 0 deletions
diff --git a/src/components/item.rs b/src/components/item.rs
new file mode 100644
index 0000000..76c5c1c
--- /dev/null
+++ b/src/components/item.rs
@@ -0,0 +1,18 @@
+
+use specs::{Component, DenseVecStorage};
+use crate::{Template};
+
+#[derive(Component, Debug, Clone)]
+pub struct Item {
+ pub ent: Template,
+ pub name: String,
+ pub action: ItemAction
+}
+
+#[derive(Debug, Clone)]
+pub enum ItemAction {
+ Eat{health: i64},
+ Build(Template),
+ None
+}
+
diff --git a/src/components/mod.rs b/src/components/mod.rs
new file mode 100644
index 0000000..a0ccde4
--- /dev/null
+++ b/src/components/mod.rs
@@ -0,0 +1,96 @@
+
+pub mod item;
+
+pub use item::Item;
+
+use specs::{
+ DenseVecStorage,
+ VecStorage,
+ HashMapStorage,
+ FlaggedStorage,
+ Component
+};
+
+use crate::{Pos, PlayerId, RoomId, Sprite};
+use crate::controls::Control;
+use crate::template::Template;
+
+#[derive(Debug, Clone)]
+pub struct Position{
+ pub pos: Pos
+}
+impl Position {
+ pub fn new(pos: Pos) -> Position {
+ Position{pos}
+ }
+}
+
+impl Component for Position {
+ type Storage = FlaggedStorage<Self, VecStorage<Self>>;
+}
+
+#[derive(Debug, Clone)]
+pub struct Visible {
+ pub sprite: Sprite,
+ pub height: f64,
+ pub name: String
+}
+impl Component for Visible {
+ type Storage = FlaggedStorage<Self, VecStorage<Self>>;
+}
+
+#[derive(Component, Debug)]
+pub struct Controller(pub Control);
+
+#[derive(Component, Debug, Clone)]
+pub struct Blocking;
+
+#[derive(Component, Debug, Clone)]
+pub struct Floor;
+
+#[derive(Component, Debug, Clone)]
+pub struct New;
+
+#[derive(Component, Debug, Clone)]
+pub struct Removed;
+
+#[derive(Component, Debug, Clone)]
+pub struct Moved {
+ pub from: Pos
+}
+
+#[derive(Component, Debug, Clone)]
+#[storage(HashMapStorage)]
+pub struct Player {
+ pub id: PlayerId
+}
+impl Player {
+ pub fn new(id: PlayerId) -> Self {
+ Self{id}
+ }
+}
+
+#[derive(Debug, Clone, Default)]
+pub struct Inventory {
+ pub items: Vec<Item>,
+ pub capacity: usize
+}
+impl Component for Inventory {
+ type Storage = FlaggedStorage<Self, HashMapStorage<Self>>;
+}
+
+#[derive(Component, Debug, Clone)]
+pub struct Health {
+ pub health: i64,
+ pub maxhealth: i64
+}
+
+#[derive(Component, Debug, Clone)]
+pub struct Serialise {
+ pub template: Template
+}
+
+#[derive(Component, Debug, Clone)]
+pub struct RoomExit {
+ pub destination: RoomId
+}