|
|
|
@ -2,6 +2,7 @@ |
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#include <atomic>
|
|
|
|
#include <chrono>
|
|
|
|
#include <cmath>
|
|
|
|
#include <thread>
|
|
|
|
@ -20,15 +21,18 @@ public: |
|
|
|
: up(std::move(up_)), down(std::move(down_)), left(std::move(left_)), |
|
|
|
right(std::move(right_)), modifier(std::move(modifier_)), modifier_scale(modifier_scale_), |
|
|
|
modifier_angle(modifier_angle_) { |
|
|
|
update_thread_running.store(true); |
|
|
|
update_thread = std::thread(&Analog::UpdateStatus, this); |
|
|
|
} |
|
|
|
|
|
|
|
~Analog() override { |
|
|
|
update_thread_running = false; |
|
|
|
if (update_thread_running.load()) { |
|
|
|
update_thread_running.store(false); |
|
|
|
if (update_thread.joinable()) { |
|
|
|
update_thread.join(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void MoveToDirection(bool enable, float to_angle) { |
|
|
|
if (!enable) { |
|
|
|
@ -58,7 +62,7 @@ public: |
|
|
|
} |
|
|
|
|
|
|
|
void UpdateStatus() { |
|
|
|
while (update_thread_running) { |
|
|
|
while (update_thread_running.load()) { |
|
|
|
const float coef = modifier->GetStatus() ? modifier_scale : 1.0f; |
|
|
|
|
|
|
|
bool r = right->GetStatus(); |
|
|
|
@ -160,7 +164,7 @@ private: |
|
|
|
float angle{}; |
|
|
|
float amplitude{}; |
|
|
|
std::thread update_thread; |
|
|
|
bool update_thread_running{true}; |
|
|
|
std::atomic<bool> update_thread_running{}; |
|
|
|
}; |
|
|
|
|
|
|
|
std::unique_ptr<Input::AnalogDevice> AnalogFromButton::Create(const Common::ParamPackage& params) { |
|
|
|
|