mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-09-04 11:45:18 +02:00
Move auto-rotation code to ControlMapper so it can be checked using the new screen
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
#include <algorithm>
|
||||
|
||||
#include "Common/Math/math_util.h"
|
||||
#include "Common/TimeUtil.h"
|
||||
|
||||
#include "Core/KeyMap.h"
|
||||
#include "Core/ControlMapper.h"
|
||||
#include "Core/Config.h"
|
||||
@@ -103,6 +105,23 @@ bool ControlMapper::Axis(const AxisInput &axis) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void ControlMapper::Update() {
|
||||
if (autoRotatingAnalogCW_) {
|
||||
const double now = time_now_d();
|
||||
// Clamp to a square
|
||||
float x = std::min(1.0f, std::max(-1.0f, 1.42f * (float)cos(now * -g_Config.fAnalogAutoRotSpeed)));
|
||||
float y = std::min(1.0f, std::max(-1.0f, 1.42f * (float)sin(now * -g_Config.fAnalogAutoRotSpeed)));
|
||||
|
||||
setPSPAnalog_(0, x, y);
|
||||
} else if (autoRotatingAnalogCCW_) {
|
||||
const double now = time_now_d();
|
||||
float x = std::min(1.0f, std::max(-1.0f, 1.42f * (float)cos(now * g_Config.fAnalogAutoRotSpeed)));
|
||||
float y = std::min(1.0f, std::max(-1.0f, 1.42f * (float)sin(now * g_Config.fAnalogAutoRotSpeed)));
|
||||
|
||||
setPSPAnalog_(0, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline bool IsAnalogStickKey(int key) {
|
||||
switch (key) {
|
||||
@@ -212,6 +231,15 @@ void ControlMapper::onVKeyDown(int vkey) {
|
||||
setVKeyAnalog('Y', CTRL_STICK_RIGHT, VIRTKEY_AXIS_RIGHT_Y_MIN, VIRTKEY_AXIS_RIGHT_Y_MAX, false);
|
||||
break;
|
||||
|
||||
case VIRTKEY_ANALOG_ROTATE_CW:
|
||||
autoRotatingAnalogCW_ = true;
|
||||
autoRotatingAnalogCCW_ = false;
|
||||
break;
|
||||
case VIRTKEY_ANALOG_ROTATE_CCW:
|
||||
autoRotatingAnalogCW_ = false;
|
||||
autoRotatingAnalogCCW_ = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (onVKeyDown_)
|
||||
onVKeyDown_(vkey);
|
||||
@@ -247,6 +275,16 @@ void ControlMapper::onVKeyUp(int vkey) {
|
||||
setVKeyAnalog('Y', CTRL_STICK_RIGHT, VIRTKEY_AXIS_RIGHT_Y_MIN, VIRTKEY_AXIS_RIGHT_Y_MAX, false);
|
||||
break;
|
||||
|
||||
case VIRTKEY_ANALOG_ROTATE_CW:
|
||||
autoRotatingAnalogCW_ = false;
|
||||
__CtrlSetAnalogXY(0, 0.0f, 0.0f);
|
||||
break;
|
||||
|
||||
case VIRTKEY_ANALOG_ROTATE_CCW:
|
||||
autoRotatingAnalogCCW_ = false;
|
||||
__CtrlSetAnalogXY(0, 0.0f, 0.0f);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (onVKeyUp_)
|
||||
onVKeyUp_(vkey);
|
||||
|
||||
Reference in New Issue
Block a user