182 lines
3.5 KiB
C++
182 lines
3.5 KiB
C++
#include <assert.h>
|
|
#include <memory.h>
|
|
#include "utils/maths.h"
|
|
#include "input/inputsystem.h"
|
|
|
|
const int kMaxKeyboardKeys = 460;
|
|
const int kMaxMouseButtons = mouseButton_LastNamed + 1; //5;
|
|
const float kKeyThreshold = 0.2f;
|
|
|
|
IInputSystem* g_inputSystem = NULL;
|
|
|
|
class InputSystem : public IInputSystem
|
|
{
|
|
public:
|
|
InputSystem();
|
|
~InputSystem();
|
|
|
|
void Init();
|
|
void Shutdown();
|
|
void Update();
|
|
|
|
size_t GetMaxScancode() const;
|
|
size_t GetMaxMouseButton() const;
|
|
|
|
char TranslateScancode(scanCode_t scancode) const;
|
|
|
|
void OnKeyDown(scanCode_t scancode);
|
|
void OnKeyUp(scanCode_t scancode);
|
|
void OnMouseKeyDown(mouseButton_t mousebutton);
|
|
void OnMouseKeyUp(mouseButton_t mousebutton);
|
|
void OnMouseMove(int x, int y);
|
|
void OnMouseWheel(int x, int y);
|
|
|
|
bool IsKeyPressed(scanCode_t scancode) const;
|
|
bool IsMouseButtonPressed(mouseButton_t mousebutton) const;
|
|
|
|
void GetMousePosition(int* x, int* y) const;
|
|
void GetMouseWheelPosition(int* x, int* y) const;
|
|
|
|
const char* ActionToString(Action action) const;
|
|
void BindKey(Action action, scanCode_t scancode);
|
|
bool IsActionActive(Action action) const;
|
|
void UnBindKey(Action action);
|
|
void UnBindAll();
|
|
|
|
private:
|
|
bool m_keyboardKeys[kMaxKeyboardKeys];
|
|
bool m_mouseButtons[kMaxMouseButtons];
|
|
Point2 m_mousePosition;
|
|
};
|
|
|
|
InputSystem::InputSystem()
|
|
{
|
|
memset( m_keyboardKeys, 0, sizeof( m_keyboardKeys ) );
|
|
memset( m_mouseButtons, 0, sizeof( m_mouseButtons ) );
|
|
memset( &m_mousePosition, 0, sizeof( m_mousePosition ) );
|
|
}
|
|
|
|
InputSystem::~InputSystem()
|
|
{
|
|
}
|
|
|
|
void InputSystem::Init()
|
|
{
|
|
// Nothing to do
|
|
}
|
|
|
|
void InputSystem::Shutdown()
|
|
{
|
|
// Nothing to do
|
|
}
|
|
|
|
void InputSystem::Update()
|
|
{
|
|
// TODO: Reset all pressed keys ...
|
|
}
|
|
|
|
size_t InputSystem::GetMaxScancode() const
|
|
{
|
|
return kMaxKeyboardKeys;
|
|
}
|
|
|
|
size_t InputSystem::GetMaxMouseButton() const
|
|
{
|
|
return kMaxMouseButtons;
|
|
}
|
|
|
|
char InputSystem::TranslateScancode(scanCode_t scancode) const
|
|
{
|
|
assert(0 && "Not implemented");
|
|
return 0;
|
|
}
|
|
|
|
void InputSystem::OnKeyDown(scanCode_t scancode)
|
|
{
|
|
assert(scancode <= kMaxKeyboardKeys);
|
|
m_keyboardKeys[scancode] = true;
|
|
}
|
|
|
|
void InputSystem::OnKeyUp(scanCode_t scancode)
|
|
{
|
|
assert(scancode <= kMaxKeyboardKeys);
|
|
m_keyboardKeys[scancode] = false;
|
|
}
|
|
|
|
void InputSystem::OnMouseKeyDown(mouseButton_t mousebutton)
|
|
{
|
|
assert(mousebutton <= kMaxMouseButtons);
|
|
m_mouseButtons[mousebutton] = true;
|
|
}
|
|
|
|
void InputSystem::OnMouseKeyUp(mouseButton_t mousebutton)
|
|
{
|
|
assert(mousebutton <= kMaxMouseButtons);
|
|
m_mouseButtons[mousebutton] = false;
|
|
}
|
|
|
|
void InputSystem::OnMouseMove(int x, int y)
|
|
{
|
|
m_mousePosition.x = (int)x;
|
|
m_mousePosition.y = (int)y;
|
|
}
|
|
|
|
void InputSystem::OnMouseWheel(int x, int y)
|
|
{
|
|
}
|
|
|
|
bool InputSystem::IsKeyPressed(scanCode_t scancode) const
|
|
{
|
|
assert(scancode <= KEY_MAX);
|
|
return m_keyboardKeys[scancode];
|
|
}
|
|
|
|
bool InputSystem::IsMouseButtonPressed(mouseButton_t mousebutton) const
|
|
{
|
|
assert(mousebutton <= kMaxMouseButtons);
|
|
return m_mouseButtons[mousebutton];
|
|
}
|
|
|
|
void InputSystem::GetMousePosition(int* x, int* y) const
|
|
{
|
|
if (x) *x = m_mousePosition.x;
|
|
if (y) *y = m_mousePosition.y;
|
|
}
|
|
|
|
void InputSystem::GetMouseWheelPosition(int* x, int* y) const
|
|
{
|
|
}
|
|
|
|
const char* InputSystem::ActionToString(Action action) const
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
void InputSystem::BindKey(Action action, scanCode_t scancode)
|
|
{
|
|
}
|
|
|
|
bool InputSystem::IsActionActive(Action action) const
|
|
{
|
|
return false;
|
|
}
|
|
|
|
void InputSystem::UnBindKey(Action action)
|
|
{
|
|
}
|
|
|
|
void InputSystem::UnBindAll()
|
|
{
|
|
}
|
|
|
|
IInputSystem* CreateInputSystem(void* wndHandle)
|
|
{
|
|
return new InputSystem();
|
|
}
|
|
|
|
void DestroyInputSystem(IInputSystem* pInstance)
|
|
{
|
|
InputSystem* pInput = (InputSystem*)pInstance;
|
|
delete pInput;
|
|
}
|