components.rs 3.6 KB

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