Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. use std::collections::HashMap;
  2.  
  3. trait Entity {
  4.  
  5. fn process(&self, effect: &Effect);
  6.  
  7. }
  8.  
  9. struct MyEntity { }
  10.  
  11. impl Entity for MyEntity {
  12.  
  13. fn process(&self, effect: &Effect) {
  14. println!("{}", effect.data);
  15. }
  16.  
  17. }
  18.  
  19. struct Environment<'a> {
  20. name: &'a str,
  21. entities: Vec<&'a Entity>,
  22. }
  23.  
  24. impl<'a> Environment<'a> {
  25.  
  26. fn join(&mut self, entity: &'a Entity) {
  27. self.entities.push(entity);
  28. }
  29.  
  30. fn send(&mut self, effect: &'a Effect) {
  31. for entity in &self.entities {
  32. entity.process(effect);
  33. }
  34. }
  35.  
  36. }
  37.  
  38. trait Effect { }
  39.  
  40. struct MyEffect<T> {
  41. data: T,
  42. }
  43.  
  44. impl<T> Effect for MyEffect<T> { }
  45.  
  46. struct Supervisor<'a> {
  47. environments: HashMap<&'a str, Environment<'a>>,
  48. }
  49.  
  50. impl<'a> Supervisor<'a> {
  51.  
  52. fn create_environment(&mut self, name: &'a str) {
  53. if !self.environments.contains_key(name) {
  54. let env = Environment{name: name, entities: Vec::new()};
  55. self.environments.insert(name, env);
  56. }
  57. }
  58.  
  59. fn join_environment(&mut self, name: &'a str, entity:&'a Entity) {
  60. self.create_environment(name);
  61. let env:&mut Environment = self.environments.get_mut(name).unwrap();
  62. env.join(entity);
  63. }
  64.  
  65. fn send_effect(&mut self, name: &'a str, effect: &'a Effect) {
  66. self.create_environment(name);
  67. let env:&mut Environment = self.environments.get_mut(name).unwrap();
  68. env.send(effect);
  69. }
  70.  
  71. }
  72.  
  73.  
  74. fn main() {
  75.  
  76.  
  77. let mut supervisor = Supervisor {environments: HashMap::new() };
  78.  
  79. let mut entity = MyEntity { };
  80.  
  81. let env = "Test";
  82. supervisor.join_environment(&env, &entity);
  83.  
  84. let effect = MyEffect{data: "Hello World"};
  85.  
  86. supervisor.send_effect(&env, &effect);
  87.  
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement