components.rs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. use specs::prelude::*;
  2. use specs_derive::*;
  3. use rltk::{RGB};
  4. use serde::{Serialize, Deserialize};
  5. use specs::saveload::{Marker, ConvertSaveload};
  6. use specs::error::NoError;
  7. // COMPONENTS
  8. // Special component that exists to help serialize the game data
  9. #[derive(Component, Serialize, Deserialize, Clone)]
  10. pub struct SerializationHelper {
  11. pub map : super::map::Map
  12. }
  13. pub struct SerializeMe;
  14. #[derive(Component, Debug, ConvertSaveload, Clone)]
  15. pub struct AreaOfEffect {
  16. pub radius : i32
  17. }
  18. #[derive(Component, Debug, ConvertSaveload, Clone)]
  19. pub struct Ranged {
  20. pub range : i32
  21. }
  22. #[derive(Component, Debug, ConvertSaveload, Clone)]
  23. pub struct InflictsDamage {
  24. pub damage : i32
  25. }
  26. #[derive(Component, Debug, Serialize, Deserialize, Clone)]
  27. pub struct Consumable {}
  28. #[derive(Component, Debug, ConvertSaveload)]
  29. pub struct WantsToDropItem {
  30. pub item : Entity
  31. }
  32. #[derive(Component, Debug, ConvertSaveload)]
  33. pub struct WantsToUseItem {
  34. pub item : Entity,
  35. pub target: Option<rltk::Point>
  36. }
  37. #[derive(Component, Debug, ConvertSaveload)]
  38. pub struct WantsToPickupItem {
  39. pub collected_by : Entity,
  40. pub item : Entity
  41. }
  42. #[derive(Component, Debug, ConvertSaveload)]
  43. pub struct InBackpack {
  44. pub owner : Entity
  45. }
  46. #[derive(Component, Debug, Serialize, Deserialize, Clone)]
  47. pub struct Item {}
  48. #[derive(Component, Debug, ConvertSaveload, Clone)]
  49. pub struct ProvidesHealing {
  50. pub heal_amount : i32
  51. }
  52. #[derive(Component, Debug, ConvertSaveload, Clone)]
  53. pub struct SufferDamage {
  54. pub amount : Vec<i32>
  55. }
  56. impl SufferDamage {
  57. pub fn new_damage(store: &mut WriteStorage<SufferDamage>, victim: Entity, amount: i32) {
  58. if let Some(suffering) = store.get_mut(victim) {
  59. suffering.amount.push(amount);
  60. } else {
  61. let dmg = SufferDamage { amount : vec![amount] };
  62. store.insert(victim, dmg).expect("Unable to insert damage");
  63. }
  64. }
  65. }
  66. #[derive(Component, Debug, ConvertSaveload, Clone)]
  67. pub struct WantsToMelee {
  68. pub target : Entity
  69. }
  70. #[derive(Component, Debug, ConvertSaveload, Clone)]
  71. pub struct CombatStats {
  72. pub max_hp : i32,
  73. pub hp : i32,
  74. pub defense : i32,
  75. pub power : i32
  76. }
  77. #[derive(Component, Debug, Serialize, Deserialize, Clone)]
  78. pub struct BlocksTile {}
  79. #[derive(Component, Debug, ConvertSaveload, Clone)]
  80. pub struct Name {
  81. pub name : String
  82. }
  83. #[derive(Component, Debug, Serialize, Deserialize, Clone)]
  84. pub struct Monster {}
  85. #[derive(Component, ConvertSaveload, Clone)]
  86. pub struct Viewshed {
  87. pub visible_tiles : Vec<rltk::Point>,
  88. pub range : i32,
  89. pub dirty: bool
  90. }
  91. #[derive(Component, ConvertSaveload, Clone)]
  92. pub struct Position {
  93. pub x: i32,
  94. pub y: i32,
  95. }
  96. #[derive(Component, ConvertSaveload, Clone)]
  97. pub struct Renderable {
  98. pub glyph: rltk::FontCharType,
  99. pub fg: RGB,
  100. pub bg: RGB,
  101. pub render_order : i32
  102. }
  103. #[derive(Component, Serialize, Deserialize, Clone)]
  104. pub struct Player {}