Files
unease/engine/input/inputsystem.cpp
2025-02-28 04:43:17 +03:00

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;
}