| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #include "BsInputConfiguration.h"
- namespace BansheeEngine
- {
- Map<String, UINT32> VirtualButton::UniqueButtonIds;
- UINT32 VirtualButton::NextButtonId = 0;
- Map<String, UINT32> VirtualAxis::UniqueAxisIds;
- UINT32 VirtualAxis::NextAxisId = 0;
- VIRTUAL_BUTTON_DESC::VIRTUAL_BUTTON_DESC()
- :buttonCode(BC_0), modifiers(ButtonModifier::None), repeatable(false)
- { }
- VIRTUAL_BUTTON_DESC::VIRTUAL_BUTTON_DESC(ButtonCode buttonCode, ButtonModifier modifiers, bool repeatable)
- :buttonCode(buttonCode), modifiers(modifiers), repeatable(repeatable)
- { }
- VIRTUAL_AXIS_DESC::VIRTUAL_AXIS_DESC()
- : type((UINT32)InputAxis::MouseX), deadZone(0.0001f), sensitivity(1.0f), invert(false)
- { }
- VIRTUAL_AXIS_DESC::VIRTUAL_AXIS_DESC(UINT32 type, float deadZone, float sensitivity, bool invert)
- :type(type), deadZone(deadZone), sensitivity(sensitivity), invert(invert)
- { }
- VirtualButton::VirtualButton()
- :buttonIdentifier(0)
- { }
- VirtualButton::VirtualButton(const String& name)
- {
- auto findIter = UniqueButtonIds.find(name);
- if(findIter != UniqueButtonIds.end())
- buttonIdentifier = findIter->second;
- else
- {
- buttonIdentifier = NextButtonId;
- UniqueButtonIds[name] = NextButtonId++;
- }
- }
- VirtualAxis::VirtualAxis()
- :axisIdentifier(0)
- { }
- VirtualAxis::VirtualAxis(const String& name)
- {
- auto findIter = UniqueAxisIds.find(name);
- if (findIter != UniqueAxisIds.end())
- axisIdentifier = findIter->second;
- else
- {
- axisIdentifier = NextAxisId;
- UniqueAxisIds[name] = NextAxisId++;
- }
- }
- InputConfiguration::InputConfiguration()
- :mRepeatInterval(300)
- { }
- void InputConfiguration::registerButton(const String& name, ButtonCode buttonCode, ButtonModifier modifiers, bool repeatable)
- {
- Vector<VirtualButtonData>& btnData = mButtons[buttonCode & 0x0000FFFF];
- INT32 idx = -1;
- for(UINT32 i = 0; i < (UINT32)btnData.size(); i++)
- {
- if(btnData[i].desc.modifiers == modifiers)
- {
- idx = (INT32)i;
- break;
- }
- }
- if(idx == -1)
- {
- idx = (INT32)btnData.size();
- btnData.push_back(VirtualButtonData());
- }
- VirtualButtonData& btn = btnData[idx];
- btn.name = name;
- btn.desc = VIRTUAL_BUTTON_DESC(buttonCode, modifiers, repeatable);
- btn.button = VirtualButton(name);
- }
- void InputConfiguration::unregisterButton(const String& name)
- {
- Vector<UINT32> toRemove;
- for(UINT32 i = 0; i < BC_Count; i++)
- {
- for(UINT32 j = 0; j < (UINT32)mButtons[i].size(); j++)
- {
- if(mButtons[i][j].name == name)
- toRemove.push_back(j);
- }
- UINT32 numRemoved = 0;
- for(auto& toRemoveIdx : toRemove)
- {
- mButtons[i].erase(mButtons[i].begin() + toRemoveIdx - numRemoved);
- numRemoved++;
- }
- toRemove.clear();
- }
- }
- void InputConfiguration::registerAxis(const String& name, const VIRTUAL_AXIS_DESC& desc)
- {
- VirtualAxis axis(name);
- if (axis.axisIdentifier >= (UINT32)mAxes.size())
- mAxes.resize(axis.axisIdentifier + 1);
- mAxes[axis.axisIdentifier].name = name;
- mAxes[axis.axisIdentifier].desc = desc;
- mAxes[axis.axisIdentifier].axis = axis;
- }
- void InputConfiguration::unregisterAxis(const String& name)
- {
- for (UINT32 i = 0; i < (UINT32)mAxes.size(); i++)
- {
- if (mAxes[i].name == name)
- {
- mAxes.erase(mAxes.begin() + i);
- i--;
- }
- }
- }
- bool InputConfiguration::_getButton(ButtonCode code, UINT32 modifiers, VirtualButton& btn, VIRTUAL_BUTTON_DESC& btnDesc) const
- {
- const Vector<VirtualButtonData>& btnData = mButtons[code & 0x0000FFFF];
- for(UINT32 i = 0; i < (UINT32)btnData.size(); i++)
- {
- if((((UINT32)btnData[i].desc.modifiers) & modifiers) == ((UINT32)btnData[i].desc.modifiers))
- {
- btn = btnData[i].button;
- btnDesc = btnData[i].desc;
- return true;
- }
- }
- return false;
- }
- bool InputConfiguration::_getAxis(const VirtualAxis& axis, VIRTUAL_AXIS_DESC& axisDesc) const
- {
- if (axis.axisIdentifier >= (UINT32)mAxes.size())
- return false;
- axisDesc = mAxes[axis.axisIdentifier].desc;
- return true;
- }
- }
|