diff options
Diffstat (limited to 'map/displacement_mode_manager.cpp')
-rw-r--r-- | map/displacement_mode_manager.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/map/displacement_mode_manager.cpp b/map/displacement_mode_manager.cpp new file mode 100644 index 0000000000..2135274563 --- /dev/null +++ b/map/displacement_mode_manager.cpp @@ -0,0 +1,26 @@ +#include "map/displacement_mode_manager.hpp" + +DisplacementModeManager::DisplacementModeManager(TCallback && callback) + : m_callback(move(callback)), m_mask(0) +{ +} + +void DisplacementModeManager::Set(Slot slot, bool show) +{ + lock_guard<mutex> lock(m_mu); + + uint32_t const bit = static_cast<uint32_t>(1) << slot; + uint32_t const mask = m_mask; + if (show) + m_mask = mask | bit; + else + m_mask = mask & ~bit; + + if (mask == m_mask) + return; + + if (m_mask != 0) + m_callback(true /* show */); + else + m_callback(false /* show */); +} |