1
0
Fork 0
roguelike-game/src/components.rs

251 lines
5.4 KiB
Rust
Raw Normal View History

use rltk::{Point, RGB};
2021-11-08 13:58:40 -05:00
use serde::{Deserialize, Serialize};
use specs::error::NoError;
2021-10-22 10:05:06 -04:00
use specs::prelude::*;
2021-11-08 13:58:40 -05:00
use specs::saveload::{ConvertSaveload, Marker};
2021-10-22 10:05:06 -04:00
use specs_derive::*;
2021-11-08 13:58:40 -05:00
#[derive(Component, ConvertSaveload, Clone)]
2021-10-22 10:05:06 -04:00
pub struct Position {
pub x: i32,
pub y: i32,
}
impl From<(i32, i32)> for Position {
fn from(f: (i32, i32)) -> Self {
Position {
x: f.0,
y: f.1,
}
}
}
impl From<Point> for Position {
fn from(p: Point) -> Self {
Position {
x: p.x,
y: p.y,
}
}
}
impl Into<Point> for Position {
fn into(self) -> Point {
Point {
x: self.x,
y: self.y,
}
}
}
2021-11-08 13:58:40 -05:00
#[derive(Component, ConvertSaveload, Clone)]
2021-10-22 10:05:06 -04:00
pub struct Renderable {
pub glyph: rltk::FontCharType,
pub fg: RGB,
pub bg: RGB,
2021-11-04 09:54:38 -04:00
pub render_order: i32,
2021-10-22 10:05:06 -04:00
}
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, Clone, Serialize, Deserialize, Default)]
2021-10-22 10:05:06 -04:00
pub struct Player {}
2021-10-25 15:26:39 -04:00
2021-11-08 13:58:40 -05:00
#[derive(Component, ConvertSaveload, Clone)]
2021-10-25 15:26:39 -04:00
pub struct Viewshed {
pub visible_tiles: Vec<Point>,
2021-10-25 15:26:39 -04:00
pub range: i32,
2021-10-26 14:23:08 -04:00
pub dirty: bool,
2021-10-25 15:26:39 -04:00
}
2021-10-26 15:43:59 -04:00
2021-11-05 10:41:47 -04:00
impl Default for Viewshed {
fn default() -> Self {
Viewshed {
visible_tiles: Vec::new(),
range: 8,
dirty: true,
}
}
}
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, Serialize, Deserialize, Clone, Default)]
2021-10-26 15:43:59 -04:00
pub struct Monster {}
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, ConvertSaveload, Clone)]
2021-10-26 15:43:59 -04:00
pub struct Name {
pub name: String,
}
2021-10-29 11:11:17 -04:00
2021-11-05 10:41:47 -04:00
impl Name {
pub fn from<S: ToString>(s: S) -> Self {
2021-11-05 10:41:47 -04:00
Name {
name: s.to_string(),
}
}
}
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, Serialize, Deserialize, Clone, Default)]
2021-10-29 11:11:17 -04:00
pub struct BlocksTile {}
2021-10-29 15:15:22 -04:00
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, ConvertSaveload, Clone)]
2021-10-29 15:15:22 -04:00
pub struct CombatStats {
pub max_hp: i32,
pub hp: i32,
pub defense: i32,
pub power: i32,
}
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, ConvertSaveload, Clone)]
2021-10-29 15:15:22 -04:00
pub struct WantsToMelee {
pub target: Entity,
}
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, ConvertSaveload, Clone)]
2021-10-29 15:15:22 -04:00
pub struct SufferDamage {
pub amount: Vec<i32>,
}
impl SufferDamage {
pub fn new_damage(store: &mut WriteStorage<SufferDamage>, victim: Entity, amount: i32) {
if let Some(suffering) = store.get_mut(victim) {
suffering.amount.push(amount);
} else {
let dmg = SufferDamage {
amount: vec![amount],
};
store.insert(victim, dmg).expect("Unable to insert damage");
}
}
}
2021-11-03 15:11:19 -04:00
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, Serialize, Deserialize, Clone, Default)]
2021-11-03 15:11:19 -04:00
pub struct Item {}
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, Serialize, Deserialize, Clone, Default)]
pub struct Consumable {}
#[derive(Component, Debug, ConvertSaveload, Clone)]
pub struct Ranged {
pub range: i32,
}
#[derive(Component, Debug, ConvertSaveload, Clone)]
pub struct InflictsDamage {
pub damage: i32,
}
#[derive(Component, Debug, ConvertSaveload, Clone)]
pub struct AreaOfEffect {
pub radius: i32,
}
#[derive(Component, Debug, ConvertSaveload, Clone)]
pub struct Confusion {
pub turns: i32,
}
#[derive(Component, Debug, ConvertSaveload, Clone)]
pub struct ProvidesHealing {
2021-11-03 15:11:19 -04:00
pub heal_amount: i32,
}
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, ConvertSaveload)]
2021-11-03 15:11:19 -04:00
pub struct InBackpack {
pub owner: Entity,
}
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, ConvertSaveload)]
2021-11-03 15:11:19 -04:00
pub struct WantsToPickupItem {
pub collected_by: Entity,
pub item: Entity,
}
2021-11-03 15:59:23 -04:00
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, ConvertSaveload)]
pub struct WantsToUseItem {
pub item: Entity,
pub target: Option<Point>,
2021-11-03 15:59:23 -04:00
}
2021-11-04 09:40:58 -04:00
2021-11-08 13:58:40 -05:00
#[derive(Component, Debug, ConvertSaveload)]
2021-11-04 09:40:58 -04:00
pub struct WantsToDropItem {
pub item: Entity,
}
#[derive(Component, Debug, ConvertSaveload, Clone)]
pub struct WantsToRemoveItem {
pub item: Entity,
2021-11-05 14:32:14 -04:00
}
2021-11-15 09:19:22 -05:00
#[derive(PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum EquipmentSlot {
Melee,
Shield,
}
#[derive(Component, Serialize, Deserialize, Clone)]
pub struct Equippable {
pub slot: EquipmentSlot,
}
#[derive(Component, ConvertSaveload, Clone)]
pub struct Equipped {
pub owner: Entity,
pub slot: EquipmentSlot,
}
#[derive(Component, ConvertSaveload, Clone)]
pub struct MeleePowerBonus {
pub power: i32,
}
#[derive(Component, ConvertSaveload, Clone)]
pub struct DefenseBonus {
pub defense: i32,
}
2021-11-15 11:32:09 -05:00
2021-11-16 11:33:58 -05:00
#[derive(Component, Serialize, Deserialize, Clone)]
pub struct ParticleLifetime {
pub lifetime_ms: f32,
}
2021-11-17 16:23:01 -05:00
#[derive(Serialize, Deserialize, Copy, Clone, PartialEq)]
pub enum HungerState {
WellFed,
Normal,
Hungry,
Starving,
}
#[derive(Component, Serialize, Deserialize, Clone)]
pub struct HungerClock {
pub state: HungerState,
pub duration: i32,
}
#[derive(Component, Debug, Serialize, Deserialize, Clone)]
pub struct ProvidesFood {}
#[derive(Component, Debug, Serialize, Deserialize, Clone)]
pub struct MagicMapper {}
2021-11-29 16:00:07 -05:00
#[derive(Component, Debug, Serialize, Deserialize, Clone)]
pub struct Hidden {}
#[derive(Component, Debug, Serialize, Deserialize, Clone)]
pub struct EntryTrigger {}
#[derive(Component, Debug, Serialize, Deserialize, Clone)]
pub struct EntityMoved {}
2021-12-01 09:46:34 -05:00
#[derive(Component, Debug, Serialize, Deserialize, Clone)]
pub struct SingleActivation {}
// Serialization helper code. We need to implement ConvertSaveLoad for each type that contains an
// Entity.
pub struct SerializeMe;
// Special component that exists to help serialize the game data
#[derive(Component, Serialize, Deserialize, Clone)]
pub struct SerializationHelper {
2021-11-17 16:08:46 -05:00
pub map: crate::map::Map,
2021-11-15 11:32:09 -05:00
}