#include "..\emanagers.h" #include "..\etools.h" // ¼àÌýÆ÷ÈÝÆ÷ static std::vector s_vListeners; void e2d::InputManager::__update() { for (size_t i = 0; i < s_vListeners.size(); i++) { auto pListener = s_vListeners[i]; // ¸üмàÌýÆ÷ if (pListener->m_bClear) { pListener->release(); s_vListeners.erase(s_vListeners.begin() + i); } else if (pListener->isRunning()) { pListener->_update(); } } } void e2d::InputManager::__add(InputListener * pListener) { WARN_IF(pListener == nullptr, "InputListener NULL pointer exception!"); if (pListener) { auto findListener = [](InputListener * pListener) -> bool { for (const auto &l : s_vListeners) { if (pListener == l) { return true; } } return false; }; bool bHasListener = findListener(pListener); WARN_IF(bHasListener, "The InputListener is already added, cannot be added again!"); if (!bHasListener) { pListener->retain(); s_vListeners.push_back(pListener); } } } void e2d::InputManager::add(Function func, String name) { (new InputListener(func, name))->start(); } void e2d::InputManager::start(String name) { for (const auto & pListener : s_vListeners) { if (pListener->getName() == name) { pListener->start(); } } } void e2d::InputManager::stop(String name) { for (const auto & pListener : s_vListeners) { if (pListener->getName() == name) { pListener->stop(); } } } void e2d::InputManager::clear(String name) { for (const auto & pListener : s_vListeners) { if (pListener->getName() == name) { pListener->stopAndClear(); } } } void e2d::InputManager::startAll() { for (const auto & pListener : s_vListeners) { pListener->start(); } } void e2d::InputManager::stopAll() { for (const auto & pListener : s_vListeners) { pListener->stop(); } } void e2d::InputManager::clearAll() { for (const auto & pListener : s_vListeners) { pListener->stopAndClear(); } } std::vector e2d::InputManager::get(String name) { std::vector vListeners; for (auto pListener : s_vListeners) { if (pListener->getName() == name) { vListeners.push_back(pListener); } } return std::move(vListeners); } std::vector e2d::InputManager::getAll() { return s_vListeners; }