components.rs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. #[derive(Component, Debug, ConvertSaveload, Clone)]
  9. pub struct WantsToRemoveItem {
  10. pub item : Entity
  11. }
  12. #[derive(Component, ConvertSaveload, Clone)]
  13. pub struct MeleePowerBonus {
  14. pub power : i32
  15. }
  16. #[derive(Component, ConvertSaveload, Clone)]
  17. pub struct DefenseBonus {
  18. pub defense : i32
  19. }
  20. #[derive(Component, ConvertSaveload, Clone)]
  21. pub struct Equipped {
  22. pub owner : Entity,
  23. pub slot : EquipmentSlot
  24. }
  25. #[derive(PartialEq, Copy, Clone, Serialize, Deserialize)]
  26. pub enum EquipmentSlot { Melee, Shield }
  27. #[derive(Component, Serialize, Deserialize, Clone)]
  28. pub struct Equippable {
  29. pub slot : EquipmentSlot
  30. }
  31. // Special component that exists to help serialize the game data
  32. #[derive(Component, Serialize, Deserialize, Clone)]
  33. pub struct SerializationHelper {
  34. pub map : super::map::Map
  35. }
  36. pub struct SerializeMe;
  37. #[derive(Component, Debug, ConvertSaveload, Clone)]
  38. pub struct AreaOfEffect {
  39. pub radius : i32
  40. }
  41. #[derive(Component, Debug, ConvertSaveload, Clone)]
  42. pub struct Ranged {
  43. pub range : i32
  44. }
  45. #[derive(Component, Debug, ConvertSaveload, Clone)]
  46. pub struct InflictsDamage {
  47. pub damage : i32
  48. }
  49. #[derive(Component, Debug, Serialize, Deserialize, Clone)]
  50. pub struct Consumable {}
  51. #[derive(Component, Debug, ConvertSaveload)]
  52. pub struct WantsToDropItem {
  53. pub item : Entity
  54. }
  55. #[derive(Component, Debug, ConvertSaveload)]
  56. pub struct WantsToUseItem {
  57. pub item : Entity,
  58. pub target: Option<rltk::Point>
  59. }
  60. #[derive(Component, Debug, ConvertSaveload)]
  61. pub struct WantsToPickupItem {
  62. pub collected_by : Entity,
  63. pub item : Entity
  64. }
  65. #[derive(Component, Debug, ConvertSaveload)]
  66. pub struct InBackpack {
  67. pub owner : Entity
  68. }
  69. #[derive(Component, Debug, Serialize, Deserialize, Clone)]
  70. pub struct Item {}
  71. #[derive(Component, Debug, ConvertSaveload, Clone)]
  72. pub struct ProvidesHealing {
  73. pub heal_amount : i32
  74. }
  75. #[derive(Component, Debug, ConvertSaveload, Clone)]
  76. pub struct SufferDamage {
  77. pub amount : Vec<i32>
  78. }
  79. impl SufferDamage {
  80. pub fn new_damage(store: &mut WriteStorage<SufferDamage>, victim: Entity, amount: i32) {
  81. if let Some(suffering) = store.get_mut(victim) {
  82. suffering.amount.push(amount);
  83. } else {
  84. let dmg = SufferDamage { amount : vec![amount] };
  85. store.insert(victim, dmg).expect("Unable to insert damage");
  86. }
  87. }
  88. }
  89. #[derive(Component, Debug, ConvertSaveload, Clone)]
  90. pub struct WantsToMelee {
  91. pub target : Entity
  92. }
  93. #[derive(Component, Debug, ConvertSaveload, Clone)]
  94. pub struct CombatStats {
  95. pub max_hp : i32,
  96. pub hp : i32,
  97. pub defense : i32,
  98. pub power : i32
  99. }
  100. #[derive(Component, Debug, Serialize, Deserialize, Clone)]
  101. pub struct BlocksTile {}
  102. #[derive(Component, Debug, ConvertSaveload, Clone)]
  103. pub struct Name {
  104. pub name : String
  105. }
  106. #[derive(Component, Debug, Serialize, Deserialize, Clone)]
  107. pub struct Monster {}
  108. #[derive(Component, ConvertSaveload, Clone)]
  109. pub struct Viewshed {
  110. pub visible_tiles : Vec<rltk::Point>,
  111. pub range : i32,
  112. pub dirty: bool
  113. }
  114. #[derive(Component, ConvertSaveload, Clone)]
  115. pub struct Position {
  116. pub x: i32,
  117. pub y: i32,
  118. }
  119. #[derive(Component, ConvertSaveload, Clone)]
  120. pub struct Renderable {
  121. pub glyph: rltk::FontCharType,
  122. pub fg: RGB,
  123. pub bg: RGB,
  124. pub render_order : i32
  125. }
  126. #[derive(Component, Serialize, Deserialize, Clone)]
  127. pub struct Player {}