Add Binding Parameters

This commit is contained in:
mushgunAX 2022-12-30 21:57:59 +08:00
parent 472f52af89
commit fed7f340cd
1 changed files with 33 additions and 7 deletions

View File

@ -358,7 +358,7 @@ namespace SHADE
//How far the user needs to move an analog stick before application //How far the user needs to move an analog stick before application
//registers the movement //registers the movement
double dead = 0.1; double dead = 0.2;
//Speed in units per second that the axis will move toward target value for digital //Speed in units per second that the axis will move toward target value for digital
//For mouse movement / scrolling, serves as multiplier //For mouse movement / scrolling, serves as multiplier
@ -691,10 +691,32 @@ namespace SHADE
return bindings; return bindings;
} }
//Add a new binding to the map //Add a new binding to the map with settings
static inline void AddBinding(std::string const& newBindingName) noexcept //Binding type is between four different types,
//KB_MB_CONTROLLER Binding is connected to the keyboard, mouse and controller buttons and its analog inputs
//MOUSE_X Binding is connected to horizontal movement of the mouse
//MOUSE_Y Binding is connected to the vertical movement of the mouse
//MOUSE_SCROLL Binding is connected to the scrolling of the mouse wheel
//Inverted is whether positive inputs result in a negative value and vice-versa
//Snap is if inputting in the opposite direction results in the value snapping to 0 before continuing in the direction
//Sensitivity is how fast the value moves with input
//Dead is how much analogue input magnitude on a scale of 0 to 1 is required before being registered
//Gravity is how fast the value moves to neutral without input
static inline void AddBinding(std::string const& newBindingName,
SH_BINDINGTYPE const bindingType = SH_BINDINGTYPE::KB_MB_CONTROLLER,
bool const inverted = false,
bool const snap = false,
double const sensitivity = 1.0,
double const dead = 0.2,
double const gravity = 1.0) noexcept
{ {
bindings.insert({ newBindingName, SHLogicalBindingData() }); bindings.insert({ newBindingName, SHLogicalBindingData() });
bindings[newBindingName].bindingType = bindingType;
bindings[newBindingName].inverted = inverted;
bindings[newBindingName].snap = snap;
bindings[newBindingName].sensitivity = sensitivity;
bindings[newBindingName].dead = dead;
bindings[newBindingName].gravity = gravity;
} }
//Remove a binding and all its associated inputs from the list //Remove a binding and all its associated inputs from the list
@ -741,6 +763,7 @@ namespace SHADE
//Gets the gravity of the binding //Gets the gravity of the binding
//The rate at which the value moves to neutral if no input in the direction is read //The rate at which the value moves to neutral if no input in the direction is read
//Should be non-negative //Should be non-negative
//Irrelevant for mouse movement and scrolling
static inline double GetBindingGravity(std::string const& bindingName) static inline double GetBindingGravity(std::string const& bindingName)
{ {
return bindings[bindingName].gravity; return bindings[bindingName].gravity;
@ -749,6 +772,7 @@ namespace SHADE
//Sets the gravity of the binding //Sets the gravity of the binding
//The rate at which the value moves to neutral if no input in the direction is read //The rate at which the value moves to neutral if no input in the direction is read
//Should be non-negative //Should be non-negative
//Irrelevant for mouse movement and scrolling
static inline void SetBindingGravity(std::string const& bindingName, double const newValue) static inline void SetBindingGravity(std::string const& bindingName, double const newValue)
{ {
bindings[bindingName].gravity = newValue; bindings[bindingName].gravity = newValue;
@ -756,7 +780,7 @@ namespace SHADE
//Get the dead zone of the binding on a scale of 0 to 1, //Get the dead zone of the binding on a scale of 0 to 1,
//Any positive or negative analog input with magnitude less than this will be registered as neutral //Any positive or negative analog input with magnitude less than this will be registered as neutral
//irrelvant for digital inputs //Irrelvant for digital inputs, mouse movement and scrolling
static inline double GetBindingDead(std::string const& bindingName) static inline double GetBindingDead(std::string const& bindingName)
{ {
return bindings[bindingName].dead; return bindings[bindingName].dead;
@ -764,7 +788,7 @@ namespace SHADE
//Get the dead zone of the binding on a scale of 0 to 1, //Get the dead zone of the binding on a scale of 0 to 1,
//Any positive or negative analog input with magnitude less than this will be registered as neutral //Any positive or negative analog input with magnitude less than this will be registered as neutral
//irrelvant for digital inputs //Irrelvant for digital inputs, mouse movement and scrolling
static inline void SetBindingDead(std::string const& bindingName, double const newValue) static inline void SetBindingDead(std::string const& bindingName, double const newValue)
{ {
bindings[bindingName].dead = newValue; bindings[bindingName].dead = newValue;
@ -773,7 +797,7 @@ namespace SHADE
//Get the sensitivity of the binding //Get the sensitivity of the binding
//Serves as a multiplier for mouse movement/scrolling //Serves as a multiplier for mouse movement/scrolling
//For other digital inputs, serves as a rate of how fast axis value goes to maximum positive/negative //For other digital inputs, serves as a rate of how fast axis value goes to maximum positive/negative
//For other analog inputs, serves as a multiplier //For other analog inputs, serves as a multiplier, but axis value magnitude will still be capped at 1
static inline double GetBindingSensitivity(std::string const& bindingName) static inline double GetBindingSensitivity(std::string const& bindingName)
{ {
return bindings[bindingName].sensitivity; return bindings[bindingName].sensitivity;
@ -782,7 +806,7 @@ namespace SHADE
//Set the sensitivity of the binding //Set the sensitivity of the binding
//Serves as a multiplier for mouse movement/scrolling //Serves as a multiplier for mouse movement/scrolling
//For other digital inputs, serves as a rate of how fast axis value goes to maximum positive/negative //For other digital inputs, serves as a rate of how fast axis value goes to maximum positive/negative
//For other analog inputs, serves as a multiplier //For other analog inputs, serves as a multiplier, but axis value magnitude will still be capped at 1
static inline void SetBindingSensitivity(std::string const& bindingName, double const newValue) static inline void SetBindingSensitivity(std::string const& bindingName, double const newValue)
{ {
bindings[bindingName].sensitivity = newValue; bindings[bindingName].sensitivity = newValue;
@ -791,6 +815,7 @@ namespace SHADE
//Gets the snap of the binding //Gets the snap of the binding
//If no other input on the axis is present and a input is made in the opposite direction of the current value, //If no other input on the axis is present and a input is made in the opposite direction of the current value,
//the binding's value will jump to neutral 0 before resuming in the input direction //the binding's value will jump to neutral 0 before resuming in the input direction
//Irrelevant for mouse movement and scrolling
static inline bool GetBindingSnap(std::string const& bindingName) static inline bool GetBindingSnap(std::string const& bindingName)
{ {
return bindings[bindingName].snap; return bindings[bindingName].snap;
@ -799,6 +824,7 @@ namespace SHADE
//Sets the snap of the binding //Sets the snap of the binding
//If no other input on the axis is present and a input is made in the opposite direction of the current value, //If no other input on the axis is present and a input is made in the opposite direction of the current value,
//the binding's value will jump to neutral 0 before resuming in the input direction //the binding's value will jump to neutral 0 before resuming in the input direction
//Irrelevant for mouse movement and scrolling
static inline void SetBindingSnap(std::string const& bindingName, bool const newValue) static inline void SetBindingSnap(std::string const& bindingName, bool const newValue)
{ {
bindings[bindingName].snap = newValue; bindings[bindingName].snap = newValue;