the whole game

This commit is contained in:
2026-03-02 22:04:18 +03:00
parent 816e9060b4
commit f0617a5d22
2069 changed files with 581500 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
#include "Controller.h"
static int _abs(int x) { return x>=0? x:-x; }
static float _abs(float x) { return x>=0? x:-x; }
/*static*/ float Controller::stickValuesX[NUM_STICKS] = {0};
/*static*/ float Controller::stickValuesY[NUM_STICKS] = {0};
/*static*/ bool Controller::isTouchedValues[NUM_STICKS] = {0};
bool Controller::isTouched( int stickIndex )
{
if (!isValidStick(stickIndex)) return false;
return isTouchedValues[stickIndex-1];
}
void Controller::feed( int stickIndex, int state, float dx, float dy )
{
if (!isValidStick(stickIndex)) return;
if (NUM_STICKS == 2)
stickIndex = dx<0? 1 : 2;
isTouchedValues[stickIndex-1] = (state != STATE_RELEASE);
// @note: Since I don't know where to put the Xperia Play specific
// calculations, I put them here! (normally I would probably have
// some kind of (XperiaPlay)ControllerReader but it doesn't make much
// more sense as long as we cant figure out (in code) whether or not
// we actually use an Xperia -> hardcode it here (Note#2, we CAN figure
// figure this out, at least by JNI/java-call but we arent doing it)
static float offsets[3] = {0, 0.64f, -0.64f};
dx = linearTransform(dx + offsets[stickIndex], 0, 2.78f, true);
stickValuesX[stickIndex-1] = dx;
stickValuesY[stickIndex-1] = dy;
}
float Controller::getX( int stickIndex )
{
if (!isValidStick(stickIndex)) return 0;
return stickValuesX[stickIndex-1];
}
float Controller::getY( int stickIndex )
{
if (!isValidStick(stickIndex)) return 0;
return stickValuesY[stickIndex-1];
}
float Controller::getTransformedX( int stickIndex, float deadZone, float scale/*=1.0f*/, bool limit1/*=false*/ )
{
if (!isValidStick(stickIndex)) return 0;
return linearTransform(stickValuesX[stickIndex-1], deadZone, scale, limit1);
}
float Controller::getTransformedY( int stickIndex, float deadZone, float scale/*=1.0f*/, bool limit1/*=false*/ )
{
if (!isValidStick(stickIndex)) return 0;
return linearTransform(stickValuesY[stickIndex-1], deadZone, scale, limit1);
}
float Controller::linearTransform( float value, float deadZone, float scale/*=1.0f*/, bool limit1/*=false*/ )
{
float deadSigned = value >= 0? deadZone : -deadZone;
if (_abs(deadSigned) >= _abs(value)) return 0;
float ret = (value - deadSigned) * scale;
if (limit1 && _abs(ret) > 1) ret = ret>0.0f? 1.0f : -1.0f;
return ret;
}
/*static*/
bool Controller::isValidStick(int stick) {
return stick > 0 && stick <= NUM_STICKS;
}