Files
firestorm/Gameleap/code/mw4/Libraries/Adept/Joystick.hpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

270 lines
5.4 KiB
C++

#pragma once
#include "Adept.hpp"
#include "Controls.hpp"
namespace Adept {
//#########################################################################
//############################ UnipolarFilter #############################
//#########################################################################
class UnipolarFilter
#if defined(_ARMOR)
: public Stuff::Signature
#endif
{
public:
enum Direction {
IncreasingPositive,
DecreasingPositive
};
enum LimitType {
FixedLimits,
PanningLimits,
FloatingLimits
};
UnipolarFilter(
Stuff::Scalar minimum,
Stuff::Scalar maximum,
Stuff::Scalar dead_band,
Direction direction,
LimitType limit
);
~UnipolarFilter();
virtual Stuff::Scalar
Update(Stuff::Scalar value);
void
Calibrate(
Stuff::Scalar minimum,
Stuff::Scalar maximum,
Stuff::Scalar dead_band
);
virtual void
BeginAlignment();
virtual void
EndAlignment();
virtual void
SetDeadBand(Stuff::Scalar percent);
void
TestInstance()
{}
Stuff::Scalar
inputMin,
inputMax;
Stuff::AverageOf<Stuff::Scalar>
inputAverage;
protected:
Stuff::Scalar
lowerRange,
lowerDeadband;
Direction
positiveDirection;
LimitType
limitType;
Stuff::Scalar
deadBand;
};
//#########################################################################
//############################ ThrottleFilter #############################
//#########################################################################
class ThrottleFilter : public UnipolarFilter
{
public:
ThrottleFilter(Stuff::Scalar minimum,Stuff::Scalar maximum,Stuff::Scalar dead_band) :
UnipolarFilter (minimum,maximum,dead_band,UnipolarFilter::DecreasingPositive,UnipolarFilter::FixedLimits)
{
inputMin = minimum;
inputMax = maximum;
dead = dead_band;
}
~ThrottleFilter();
virtual Stuff::Scalar Update(Stuff::Scalar value)
{
return 1 - ((value - inputMin) / (inputMax - inputMin));
}
void Calibrate(Stuff::Scalar minimum,Stuff::Scalar maximum,Stuff::Scalar dead_band)
{}
virtual void BeginAlignment()
{}
virtual void EndAlignment()
{}
virtual void SetDeadBand(Stuff::Scalar value)
{}
void TestInstance()
{}
protected:
Stuff::Scalar center,dead;
};
//#########################################################################
//############################# BipolarFilter #############################
//#########################################################################
class BipolarFilter:
public UnipolarFilter
{
public:
BipolarFilter(
Stuff::Scalar minimum,
Stuff::Scalar center,
Stuff::Scalar maximum,
Stuff::Scalar dead_band,
Direction direction,
LimitType limit
);
~BipolarFilter();
Stuff::Scalar
Update(Stuff::Scalar value);
void
Calibrate(
Stuff::Scalar minimum,
Stuff::Scalar center,
Stuff::Scalar maximum,
Stuff::Scalar dead_band
);
void
BeginAlignment();
void
EndAlignment();
void
SetDeadBand(Stuff::Scalar percent);
Stuff::Scalar
inputCenter;
protected:
Stuff::Scalar
upperRange,
upperDeadband;
};
//#########################################################################
//############################## Joystick #################################
//#########################################################################
class Joystick
#if defined(_ARMOR)
: public Stuff::Signature
#endif
{
public:
enum HatStatus {
NoHat,
HasAHat
};
enum {
XAxis,
YAxis,
ThrottleAxis,
RudderAxis,
HatAxis,
AxisCount
};
Joystick(
DWORD stick_id,
Stuff::Scalar x_dead_band,
Stuff::Scalar y_dead_band,
Stuff::Scalar throttle_dead_band,
Stuff::Scalar rudder_dead_band
);
~Joystick();
void
FilterInput(
int axis,
Stuff::Scalar value
);
void
SetDeadBand(Stuff::Scalar percent);
void
SetXDeadBand(Stuff::Scalar percent);
void
SetYDeadBand(Stuff::Scalar percent);
void
SetThrottleDeadBand(Stuff::Scalar percent);
void
SetRudderDeadBand(Stuff::Scalar percent);
int
buttonCount;
Stuff::Scalar
axisValues[AxisCount];
Stuff::Scalar hatValue;
Stuff::Scalar lastHatValue;
bool
HasHat()
{Check_Object(this); return hatStatus == HasAHat;}
bool
HasAxis(int axis)
{Check_Object(this); return axis<AxisCount && axisFilters[axis]!=NULL;}
bool IsForceFeedback (void)
{ Check_Object(this); return m_ForceFeedback; }
void
AdoptFilter(
int axis,
UnipolarFilter *filter
);
void
Update(
int control_mask,
Adept::ControlsUpdateManagerOf<Stuff::Scalar> *joystick_axis_group,
Adept::ControlsUpdateManagerOf<int> *joystick_button_group,
Adept::ControlsUpdateManagerOf<int> *joystick_hat
);
void
TestInstance() const
{}
bool ShiftButton (void);
void ShiftButton (int id)
{ m_ShiftButton = id; }
int StickID (void) const
{ return joystickID; }
protected:
HatStatus hatStatus;
UnipolarFilter
*axisFilters[AxisCount];
DWORD
joystickID;
GOSJoystickAxis
joystickXInput,
joystickYInput,
throttleInput,
rudderInput;
bool *buttonValues;
bool m_ForceFeedback;
int m_ShiftButton;
static int
CalculateButtonCount(DWORD stick_id);
};
}