Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. class UpdateManager;
  2.  
  3. class UpdateReceiver
  4. {
  5. public:
  6.  
  7. UpdateReceiver(std::shared_ptr<UpdateManager>& update_manager);
  8.  
  9. virtual ~UpdateReceiver();
  10.  
  11. virtual void Update(float dt) = 0;
  12.  
  13. private:
  14.  
  15. std::weak_ptr<UpdateManager> m_updateManager;
  16. };
  17.  
  18. class UpdateManager
  19. {
  20. public:
  21.  
  22. void AddReceiver(UpdateReceiver& receiver)
  23. {
  24. std::cout << "Adding Receivern";
  25. m_updateReceivers.push_back(&receiver);
  26. }
  27.  
  28. void RemoveReceiver(UpdateReceiver& receiver)
  29. {
  30. auto it = std::find(m_updateReceivers.begin(), m_updateReceivers.end(), &receiver);
  31. if (it != m_updateReceivers.end())
  32. {
  33. std::cout << "Removing Receivern";
  34. m_updateReceivers.erase(it);
  35. }
  36. }
  37.  
  38. void Update()
  39. {
  40. for (auto& receiver : m_updateReceivers)
  41. {
  42. receiver->Update(1.f);
  43. }
  44. }
  45.  
  46. private:
  47.  
  48. std::list<UpdateReceiver*> m_updateReceivers;
  49. };
  50.  
  51.  
  52. UpdateReceiver::UpdateReceiver(std::shared_ptr<UpdateManager>& update_manager)
  53. : m_updateManager(update_manager)
  54. {
  55. update_manager->AddReceiver(*this);
  56. }
  57.  
  58. UpdateReceiver::~UpdateReceiver()
  59. {
  60. auto update_manager = m_updateManager.lock();
  61. if (update_manager)
  62. {
  63. update_manager->RemoveReceiver(*this);
  64. }
  65. }
  66.  
  67. class Timer : public UpdateReceiver
  68. {
  69. public:
  70.  
  71. Timer(std::shared_ptr<UpdateManager>& update_manager)
  72. : UpdateReceiver(update_manager)
  73. {}
  74.  
  75. void Update(float dt) override
  76. {
  77. std::cout << "Updating Timern";
  78. }
  79. };
  80.  
  81. int main()
  82. {
  83. auto update_manager = std::make_shared<UpdateManager>();
  84.  
  85. {
  86. Timer t{update_manager};
  87.  
  88. update_manager->Update();
  89. }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement