Activate accelerometer only if needed

This commit is contained in:
Deve 2017-07-18 21:43:45 +02:00
parent 20850c9811
commit 11b2409fab
3 changed files with 48 additions and 41 deletions

View File

@ -1179,7 +1179,7 @@ EventPropagation InputManager::input(const SEvent& event)
{
MultitouchDevice* device = m_device_manager->getMultitouchDevice();
if (device)
if (device && device->isAccelerometerActive())
{
for (unsigned int i = 0; i < device->getButtonsCount(); i++)
{

View File

@ -36,6 +36,7 @@ MultitouchDevice::MultitouchDevice()
m_type = DT_MULTITOUCH;
m_name = "Multitouch";
m_player = NULL;
m_accelerometer_active = false;
#ifdef ANDROID
m_android_device = dynamic_cast<CIrrDeviceAndroid*>(
irr_driver->getDevice());
@ -58,13 +59,6 @@ MultitouchDevice::MultitouchDevice()
*/
MultitouchDevice::~MultitouchDevice()
{
#ifdef ANDROID
if (m_android_device->isAccelerometerActive())
{
m_android_device->deactivateAccelerometer();
}
#endif
clearButtons();
}
@ -149,6 +143,23 @@ void MultitouchDevice::addButton(MultitouchButtonType type, int x, int y,
}
m_buttons.push_back(button);
#ifdef ANDROID
if (button->type == MultitouchButtonType::BUTTON_STEERING)
{
if (UserConfigParams::m_multitouch_accelerometer > 0 &&
!m_android_device->isAccelerometerActive())
{
m_android_device->activateAccelerometer(1.0f / 30);
if (m_android_device->isAccelerometerActive())
{
m_accelerometer_active = true;
}
}
}
#endif
} // addButton
// ----------------------------------------------------------------------------
@ -156,6 +167,15 @@ void MultitouchDevice::addButton(MultitouchButtonType type, int x, int y,
*/
void MultitouchDevice::clearButtons()
{
#ifdef ANDROID
if (m_accelerometer_active == true &&
m_android_device->isAccelerometerActive())
{
m_android_device->deactivateAccelerometer();
m_accelerometer_active = false;
}
#endif
for (MultitouchButton* button : m_buttons)
{
delete button;
@ -241,25 +261,6 @@ void MultitouchDevice::updateConfigParams()
m_deadzone_edge = UserConfigParams::m_multitouch_deadzone_edge;
m_deadzone_edge = std::min(std::max(m_deadzone_edge, 0.0f), 0.5f);
#ifdef ANDROID
if (UserConfigParams::m_multitouch_accelerometer > 0 &&
!m_android_device->isAccelerometerActive())
{
m_android_device->activateAccelerometer(1.0f / 30);
// Disable accelerometer if it couldn't be activated
if (!m_android_device->isAccelerometerActive())
{
UserConfigParams::m_multitouch_accelerometer = 0;
}
}
else if (UserConfigParams::m_multitouch_accelerometer == 0 &&
m_android_device->isAccelerometerActive())
{
m_android_device->deactivateAccelerometer();
}
#endif
} // updateConfigParams
// ----------------------------------------------------------------------------
@ -286,7 +287,7 @@ float MultitouchDevice::getSteeringFactor(float value)
void MultitouchDevice::updateButtonAxes(MultitouchButton* button, float x,
float y)
{
if (UserConfigParams::m_multitouch_accelerometer == 0)
if (m_accelerometer_active == false)
{
button->axis_x = x;
}

View File

@ -82,6 +82,9 @@ private:
* at the edge of button */
float m_deadzone_edge;
/** True if accelerometer is in use */
bool m_accelerometer_active;
#ifdef ANDROID
/** Pointer to the Android irrlicht device */
CIrrDeviceAndroid* m_android_device;
@ -115,6 +118,9 @@ public:
/** Returns pointer to the selected button */
MultitouchButton* getButton(unsigned int i) {return m_buttons.at(i);}
/** True if accelerometer is in use */
bool isAccelerometerActive() {return m_accelerometer_active;}
void updateDeviceState(unsigned int event_id);
void handleControls(MultitouchButton* button);