mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-04-28 15:57:59 +03:00

* Work
* Add ois.lib
* Add OIS headers/libs to project
* Fix small mistakes
* Update input.cpp
* Update input.cpp
* Update input.cpp
* Remove unnecessary event handlers as we are using direct polling
* Fix numpad controls not polling
* Enclose all input code under namespace, provide debug OIS lib variation
* Fix incorrect inventory call binding, add pause to control dialog
* Deselect by pushing inventory button as well, fix crossbow ammo string draw
* Demagic NUM_CONTROLS
* Verbose input init logging
* Calibrate and properly register movement analog axis input
* Fix crash when empty string is being displayed
* Initialize vibration interface, if it exists
* Register keyboard directional input as analog axis input as well
* Fix statistics exiting
* Fix weird UpdateInput call
* Copy current layout to configuration
* Fix issues with saving controls
* Register axis values for POVs too
* Register several POV directions at once
* Increase deadzone a bit
* Simplify enums
* Update input.cpp
* Move includes out of input.h
* Bump deadzone even further as it seems xbox controllers have massive axis errors
* Prevent event spamming in case OIS polling failed
* Destroy input system on exit, cosmetic changes
* Take deadzone into account when normalizing axis values
* Update TombEngine.vcxproj
* Resolve small precision loss in axis normalizing
* Clean up unused control constants and enums
* Update input.h
* Demagic InputActions enum
* Render pause menu header
* Introduce helper functions to modulate Lara turn rates and begin replacements
* Make turn directions explicit
* Conduct remaining replacements of turn rate modulations
* Update lara_helpers.cpp
* Add smoothstep function to math library
* Use scaled axis value for true analog input
* Update input.cpp
* Add Joey's camera rotation from old branch
* Fix camera not going back to previous position when stick is released
* Simplify ModulateLaraTurnRate()
* Widen look angle
* Avoid collisions with actions bound to non-directional axis
* Small tidying
* Remove unused header
* Remove copypasted code
* Mask flare animation
* Rename 5th and 6th axis to LT/RT
* Prototype force feedback support
* Add directional rumble support (probably XInput-only)
* Shake controller on startup if supports vibration
* Update OIS libs to support XInput FF
* Simplify ModulateLaraTurnRate()
* Update player modulation functions; simplify turning, leaning, and flexing in state functions; lara.h cleanup
* Update Win32ForceFeedback.h
* Fix crawl flex function
* Revert "Update Win32ForceFeedback.h"
This reverts commit aa7099ed5b
.
* Update OIS libs
* Add options for thumbstick camera and vibration
* Make use of autotarget option
* Display NON-SCREAMING names in controls, add hack to cancel axis value on both right+left input events
* Remove useless control hacks for simultaneous directional input
* Delete ten_itemdata_generated.h
* Add scroll lock to bindable controls
* Update input.cpp
* Update input.cpp
* Make input device namings consistent
* Bring back IN_SELECT override
* Fix crashing on startup and some other bugs
* Add rumble to some in-game events
* Add some more vibration events, stop them when going to menus
* Some changes to rumble power
* Add rumble for rocket/grenade launchers and explosive damage
* Add rumble for screen shake effect
* Fix 2 mistakes in inventory strings
* Rumble for camera more precisely
* Fix debounce in binocular mode
* Update camera.cpp
* Add HK lasersight rumble
* Simplify ModulateLaraLean()
* Update input.cpp
* Fix crawl flex modulation(?)
* Add slight rumble to harpoon and crossbow fire
* Remove the confusing counteracting turn rate reset in favour of something simpler
* Simplify turn rate reset input checks; leanup
* Clamp turn rate axis coeff when airborne
* Remove empty line
* Simplify a function
* Cleanup
* Fix rumble being constant
* Use shorter rumble time for shooting guns
* Fix single arm shooting
* Fix leaning left with joystick; clamp crawl flex max; tweak walk lean max; cleanup
* Don't do too long splat and jump smash vibrations
* Cancel turn rate when exiting water, grabbing ledge, or doing a splat
* Rename function
* Move ModulateLaraTurnRateY() callsin crawl and crouch turn states
* Reset turn rate when performing crawl vault
* Convert all health decrease events to DoDamage calls
* Remove SpasmEffectCount and unify touching with DoDamage
* Give specific time delay before sprint jump is possible
* Don't rumble on zero damage
* Reorder input pipeline to prevent left+right collisions
* Rename shady global
* Rumble when breaking neck in swandive
* Update lara_jump.cpp
* Don't vibrate on soft splat
* Fix combine item text alignment
* Vibrate in settings only if setting was changed
* Pulse gamepad on critical health condition
* Don't get out of water into objects
* Add critical air constant
Co-authored-by: Sezz
254 lines
7 KiB
C++
254 lines
7 KiB
C++
/*
|
|
The zlib/libpng License
|
|
|
|
Copyright (c) 2018 Arthur Brainville
|
|
Copyright (c) 2015 Andrew Fenn
|
|
Copyright (c) 2005-2010 Phillip Castaneda (pjcast -- www.wreckedgames.com)
|
|
|
|
This software is provided 'as-is', without any express or implied warranty. In no
|
|
event will the authors be held liable for any damages arising from the use of this
|
|
software.
|
|
|
|
Permission is granted to anyone to use this software for any purpose, including
|
|
commercial applications, and to alter it and redistribute it freely, subject to the
|
|
following restrictions:
|
|
|
|
1. The origin of this software must not be misrepresented; you must not claim that
|
|
you wrote the original software. If you use this software in a product,
|
|
an acknowledgment in the product documentation would be appreciated
|
|
but is not required.
|
|
|
|
2. Altered source versions must be plainly marked as such, and must not be
|
|
misrepresented as being the original software.
|
|
|
|
3. This notice may not be removed or altered from any source distribution.
|
|
*/
|
|
#ifndef OIS_Joystick_H
|
|
#define OIS_Joystick_H
|
|
#include "OISObject.h"
|
|
#include "OISEvents.h"
|
|
|
|
namespace OIS
|
|
{
|
|
/** @remarks default sensitivity for vector3 component of joystick */
|
|
#define OIS_JOYSTICK_VECTOR3_DEFAULT 2.28f
|
|
|
|
//! POV / HAT Joystick component
|
|
class _OISExport Pov : public Component
|
|
{
|
|
public:
|
|
Pov() :
|
|
Component(OIS_POV), direction(0) { }
|
|
|
|
static const int Centered = 0x00000000;
|
|
static const int North = 0x00000001;
|
|
static const int South = 0x00000010;
|
|
static const int East = 0x00000100;
|
|
static const int West = 0x00001000;
|
|
static const int NorthEast = 0x00000101;
|
|
static const int SouthEast = 0x00000110;
|
|
static const int NorthWest = 0x00001001;
|
|
static const int SouthWest = 0x00001010;
|
|
|
|
int direction;
|
|
};
|
|
|
|
//! A sliding axis - only used in Win32 Right Now
|
|
class _OISExport Slider : public Component
|
|
{
|
|
public:
|
|
Slider() :
|
|
Component(OIS_Slider), abX(0), abY(0) {};
|
|
//! true if pushed, false otherwise
|
|
int abX, abY;
|
|
};
|
|
|
|
/**
|
|
Represents the state of the joystick
|
|
All members are valid for both buffered and non buffered mode
|
|
Sticks with zero values are not present on the device
|
|
*/
|
|
class _OISExport JoyStickState
|
|
{
|
|
public:
|
|
//! Constructor
|
|
JoyStickState() { clear(); }
|
|
|
|
//! Represents all the buttons (uses a bitset)
|
|
std::vector<bool> mButtons;
|
|
|
|
//! Represents all the single axes on the device
|
|
std::vector<Axis> mAxes;
|
|
|
|
//! Represents the value of a POV. Maximum of 4
|
|
Pov mPOV[4];
|
|
|
|
//! Represent the max sliders
|
|
Slider mSliders[4];
|
|
|
|
//! Represents all Vector type controls the device exports
|
|
std::vector<Vector3> mVectors;
|
|
|
|
//! internal method to reset all variables to initial values
|
|
void clear()
|
|
{
|
|
for(std::vector<bool>::iterator i = mButtons.begin(), e = mButtons.end(); i != e; ++i)
|
|
{
|
|
(*i) = false;
|
|
}
|
|
|
|
for(std::vector<Axis>::iterator i = mAxes.begin(), e = mAxes.end(); i != e; ++i)
|
|
{
|
|
i->absOnly = true; //Currently, joysticks only report Absolute values
|
|
i->clear();
|
|
}
|
|
|
|
for(std::vector<Vector3>::iterator i = mVectors.begin(), e = mVectors.end(); i != e; ++i)
|
|
{
|
|
i->clear();
|
|
}
|
|
|
|
for(int i = 0; i < 4; ++i)
|
|
{
|
|
mPOV[i].direction = Pov::Centered;
|
|
mSliders[i].abX = mSliders[i].abY = 0;
|
|
}
|
|
}
|
|
};
|
|
|
|
/** Specialised for joystick events */
|
|
class _OISExport JoyStickEvent : public EventArg
|
|
{
|
|
public:
|
|
JoyStickEvent(Object* obj, const JoyStickState& st) :
|
|
EventArg(obj), state(st) { }
|
|
virtual ~JoyStickEvent() { }
|
|
|
|
const JoyStickState& state;
|
|
|
|
private:
|
|
// Prevent copying.
|
|
JoyStickEvent(const JoyStickEvent&);
|
|
JoyStickEvent& operator=(JoyStickEvent);
|
|
};
|
|
|
|
/**
|
|
To recieve buffered joystick input, derive a class from this, and implement the
|
|
methods here. Then set the call back to your JoyStick instance with JoyStick::setEventCallback
|
|
Each JoyStick instance can use the same callback class, as a devID number will be provided
|
|
to differentiate between connected joysticks. Of course, each can have a seperate
|
|
callback instead.
|
|
*/
|
|
class _OISExport JoyStickListener
|
|
{
|
|
public:
|
|
virtual ~JoyStickListener() { }
|
|
/** @remarks Joystick button down event */
|
|
virtual bool buttonPressed(const JoyStickEvent& arg, int button) = 0;
|
|
|
|
/** @remarks Joystick button up event */
|
|
virtual bool buttonReleased(const JoyStickEvent& arg, int button) = 0;
|
|
|
|
/** @remarks Joystick axis moved event */
|
|
virtual bool axisMoved(const JoyStickEvent& arg, int axis) = 0;
|
|
|
|
//-- Not so common control events, so are not required --//
|
|
//! Joystick Event, and sliderID
|
|
virtual bool sliderMoved(const JoyStickEvent& arg, int index)
|
|
{
|
|
OIS_UNUSED(arg);
|
|
OIS_UNUSED(index);
|
|
return true;
|
|
}
|
|
|
|
//! Joystick Event, and povID
|
|
virtual bool povMoved(const JoyStickEvent& arg, int index)
|
|
{
|
|
OIS_UNUSED(arg);
|
|
OIS_UNUSED(index);
|
|
return true;
|
|
}
|
|
|
|
//! Joystick Event, and Vector3ID
|
|
virtual bool vector3Moved(const JoyStickEvent& arg, int index)
|
|
{
|
|
OIS_UNUSED(arg);
|
|
OIS_UNUSED(index);
|
|
return true;
|
|
}
|
|
};
|
|
|
|
/**
|
|
Joystick base class. To be implemented by specific system (ie. DirectX joystick)
|
|
This class is useful as you remain OS independent using this common interface.
|
|
*/
|
|
class _OISExport JoyStick : public Object
|
|
{
|
|
public:
|
|
virtual ~JoyStick() { }
|
|
|
|
/**
|
|
@remarks
|
|
Returns the number of requested components
|
|
@param cType
|
|
The ComponentType you are interested in knowing about
|
|
*/
|
|
int getNumberOfComponents(ComponentType cType) const;
|
|
|
|
/**
|
|
@remarks
|
|
Sets a cutoff limit for changes in the Vector3 component for movement to
|
|
be ignored. Helps reduce much event traffic for frequent small/sensitive
|
|
changes
|
|
@param degrees
|
|
The degree under which Vector3 events should be discarded
|
|
*/
|
|
void setVector3Sensitivity(float degrees = OIS_JOYSTICK_VECTOR3_DEFAULT);
|
|
|
|
/**
|
|
@remarks
|
|
Returns the sensitivity cutoff for Vector3 Component
|
|
*/
|
|
float getVector3Sensitivity() const;
|
|
|
|
/**
|
|
@remarks
|
|
Register/unregister a JoyStick Listener - Only one allowed for simplicity. If broadcasting
|
|
is neccessary, just broadcast from the callback you registered.
|
|
@param joyListener
|
|
Send a pointer to a class derived from JoyStickListener or 0 to clear the callback
|
|
*/
|
|
virtual void setEventCallback(JoyStickListener* joyListener);
|
|
|
|
/** @remarks Returns currently set callback.. or null */
|
|
JoyStickListener* getEventCallback() const;
|
|
|
|
/** @remarks Returns the state of the joystick - is valid for both buffered and non buffered mode */
|
|
const JoyStickState& getJoyStickState() const { return mState; }
|
|
|
|
//! The minimal axis value
|
|
static const int MIN_AXIS = -32768;
|
|
|
|
//! The maximum axis value
|
|
static const int MAX_AXIS = 32767;
|
|
|
|
protected:
|
|
JoyStick(const std::string& vendor, bool buffered, int devID, InputManager* creator);
|
|
|
|
//! Number of sliders
|
|
int mSliders;
|
|
|
|
//! Number of POVs
|
|
int mPOVs;
|
|
|
|
//! The JoyStickState structure (contains all component values)
|
|
JoyStickState mState;
|
|
|
|
//! The callback listener
|
|
JoyStickListener* mListener;
|
|
|
|
//! Adjustment factor for orientation vector accuracy
|
|
float mVector3Sensitivity;
|
|
};
|
|
}
|
|
#endif
|