Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class UpdateManager;
- class UpdateReceiver
- {
- public:
- UpdateReceiver(std::shared_ptr<UpdateManager>& update_manager);
- virtual ~UpdateReceiver();
- virtual void Update(float dt) = 0;
- private:
- std::weak_ptr<UpdateManager> m_updateManager;
- };
- class UpdateManager
- {
- public:
- void AddReceiver(UpdateReceiver& receiver)
- {
- std::cout << "Adding Receivern";
- m_updateReceivers.push_back(&receiver);
- }
- void RemoveReceiver(UpdateReceiver& receiver)
- {
- auto it = std::find(m_updateReceivers.begin(), m_updateReceivers.end(), &receiver);
- if (it != m_updateReceivers.end())
- {
- std::cout << "Removing Receivern";
- m_updateReceivers.erase(it);
- }
- }
- void Update()
- {
- for (auto& receiver : m_updateReceivers)
- {
- receiver->Update(1.f);
- }
- }
- private:
- std::list<UpdateReceiver*> m_updateReceivers;
- };
- UpdateReceiver::UpdateReceiver(std::shared_ptr<UpdateManager>& update_manager)
- : m_updateManager(update_manager)
- {
- update_manager->AddReceiver(*this);
- }
- UpdateReceiver::~UpdateReceiver()
- {
- auto update_manager = m_updateManager.lock();
- if (update_manager)
- {
- update_manager->RemoveReceiver(*this);
- }
- }
- class Timer : public UpdateReceiver
- {
- public:
- Timer(std::shared_ptr<UpdateManager>& update_manager)
- : UpdateReceiver(update_manager)
- {}
- void Update(float dt) override
- {
- std::cout << "Updating Timern";
- }
- };
- int main()
- {
- auto update_manager = std::make_shared<UpdateManager>();
- {
- Timer t{update_manager};
- update_manager->Update();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement