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
213 lines
6 KiB
C++
213 lines
6 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.
|
|
3. This notice may not be removed or altered from any source distribution.
|
|
*/
|
|
#ifndef OIS_InputManager_H
|
|
#define OIS_InputManager_H
|
|
|
|
#include "OISPrereqs.h"
|
|
|
|
namespace OIS
|
|
{
|
|
//Forward declare a couple of classes we might use later
|
|
class LIRCFactoryCreator;
|
|
class WiiMoteFactoryCreator;
|
|
|
|
/**
|
|
Base Manager class. No longer a Singleton; so feel free to create as many InputManager's as you have
|
|
windows.
|
|
*/
|
|
class _OISExport InputManager
|
|
{
|
|
public:
|
|
/**
|
|
@remarks
|
|
Returns version number (useful in DLL/SO libs)
|
|
@returns
|
|
Bits: 1-8 Patch number, 9-16 Minor version, 17-32 Major version
|
|
*/
|
|
static unsigned int getVersionNumber();
|
|
|
|
/**
|
|
@remarks
|
|
Returns version string (useful in DLL/SO libs)
|
|
@returns
|
|
Version name
|
|
*/
|
|
const std::string& getVersionName();
|
|
|
|
/**
|
|
@remarks
|
|
Creates appropriate input system dependent on platform.
|
|
@param winHandle
|
|
Contains OS specific window handle (such as HWND or X11 Window)
|
|
@returns
|
|
A pointer to the created manager, or raises Exception
|
|
*/
|
|
static InputManager* createInputSystem(std::size_t winHandle);
|
|
|
|
/**
|
|
@remarks
|
|
Creates appropriate input system dependent on platform.
|
|
@param paramList
|
|
ParamList contains OS specific info (such as HWND and HINSTANCE for window apps),
|
|
and access mode.
|
|
@returns
|
|
A pointer to the created manager, or raises Exception
|
|
*/
|
|
static InputManager* createInputSystem(ParamList& paramList);
|
|
|
|
/**
|
|
@remarks
|
|
Destroys the InputManager
|
|
@param manager
|
|
Manager to destroy
|
|
*/
|
|
static void destroyInputSystem(InputManager* manager);
|
|
|
|
/**
|
|
@remarks Gets the name of the current platform input system
|
|
*/
|
|
const std::string& inputSystemName();
|
|
|
|
/**
|
|
@remarks
|
|
Returns the number of the specified OIS::Type devices discovered by OIS
|
|
@param iType
|
|
Type that you are interested in
|
|
*/
|
|
int getNumberOfDevices(Type iType);
|
|
|
|
/**
|
|
@remarks
|
|
Lists all unused devices
|
|
@returns
|
|
DeviceList which contains Type and vendor of device
|
|
*/
|
|
DeviceList listFreeDevices();
|
|
|
|
/**
|
|
@remarks
|
|
Tries to create an object with the specified vendor. If you have no
|
|
preference of vendor, leave vender as default (""). Raises exception on failure
|
|
*/
|
|
Object* createInputObject(Type iType, bool bufferMode, const std::string& vendor = "");
|
|
|
|
/**
|
|
@remarks Destroys Input Object
|
|
*/
|
|
void destroyInputObject(Object* obj);
|
|
|
|
/**
|
|
@remarks
|
|
Add a custom object factory to allow for user controls.
|
|
@param factory
|
|
Factory instance to add
|
|
@notes
|
|
Make sure you do not delete the factory before devices created from
|
|
the factory are destroyed (either by calling RemoveFactoryCreator, or shutting down
|
|
the input system). Order should be something like the following:
|
|
* Create Input System
|
|
* Create Factory Instance
|
|
* AddFactoryCreator(factory)
|
|
* Create a device from the InputManager (device created by factory)
|
|
* One of the follwoing:
|
|
* removeFactoryCreator(factory)
|
|
* inputManager->destroyInputObject(obj)
|
|
* destroyInputSystem(inputManager)
|
|
* destroy Factory Instance
|
|
You can safely delete the factory instance once you have removed it or shut down the
|
|
input manager.
|
|
*/
|
|
void addFactoryCreator(FactoryCreator* factory);
|
|
|
|
/**
|
|
@remarks
|
|
Remove a previously added object factory
|
|
@param factory
|
|
Factory object to remove.
|
|
@notes
|
|
Removing a factory will automatically destroy any Objects created from the factory
|
|
*/
|
|
void removeFactoryCreator(FactoryCreator* factory);
|
|
|
|
//! All generic devices OIS supports internally (if they are compiled in)
|
|
enum AddOnFactories {
|
|
AddOn_All = 0, //All Devices
|
|
AddOn_LIRC = 1, //PC Linux Infrared Remote Control
|
|
AddOn_WiiMote = 2 //PC WiiMote Support
|
|
};
|
|
|
|
/**
|
|
@remarks
|
|
Enable an addon FactoryCreator extension. By default, none are activated.
|
|
If the desired support was not compiled in, this has no effect. Calling
|
|
multiple times has no effect. Once activated, there is no way to deactivate -
|
|
simply destroy and recreate input manager.
|
|
*/
|
|
void enableAddOnFactory(AddOnFactories factory);
|
|
|
|
protected:
|
|
/**
|
|
@remarks
|
|
Called from createInputSystem, gives derived input class a chance to setup after it is created
|
|
*/
|
|
virtual void _initialize(ParamList& paramList) = 0;
|
|
|
|
/**
|
|
@remarks
|
|
Derived classes must provide input system name
|
|
*/
|
|
explicit InputManager(const std::string& name);
|
|
|
|
/**
|
|
@remarks
|
|
Virtual Destructor - this base class will clean up all devices still opened in mFactoryObjects list
|
|
*/
|
|
virtual ~InputManager();
|
|
|
|
//! OIS Version name
|
|
const std::string m_VersionName;
|
|
|
|
//! FactoryCreator list
|
|
FactoryList mFactories;
|
|
|
|
//! Factory created objects - useful so we can find creator to send destruction request to
|
|
FactoryCreatedObject mFactoryObjects;
|
|
|
|
//! Name of the input system
|
|
const std::string mInputSystemName;
|
|
|
|
//! Extra factory (not enabled by default)
|
|
LIRCFactoryCreator* m_lircSupport;
|
|
WiiMoteFactoryCreator* m_wiiMoteSupport;
|
|
|
|
private:
|
|
// Prevent copying.
|
|
InputManager(const InputManager&);
|
|
InputManager& operator=(const InputManager&);
|
|
};
|
|
}
|
|
#endif
|