First implementation of input control with KeyStateManager
To try to do: Manage edges
This commit is contained in:
parent
0fea63c566
commit
1aff9c9b8f
4 changed files with 149 additions and 2 deletions
79
src/KeyStateManager.cpp
Normal file
79
src/KeyStateManager.cpp
Normal file
|
@ -0,0 +1,79 @@
|
|||
//
|
||||
// Created by trotfunky on 07/10/2019.
|
||||
//
|
||||
|
||||
#include "KeyStateManager.h"
|
||||
#include <iostream>
|
||||
|
||||
std::map<unsigned char,bool> KeyStateManager::ascii_keys_status = {};
|
||||
std::map<int,bool> KeyStateManager::special_keys_status = {};
|
||||
|
||||
void KeyStateManager::register_glut_callbacks()
|
||||
{
|
||||
glutKeyboardFunc(KeyStateManager::key_press);
|
||||
glutKeyboardUpFunc(KeyStateManager::key_up);
|
||||
glutSpecialFunc(KeyStateManager::special_key_press);
|
||||
glutSpecialUpFunc(KeyStateManager::special_key_up);
|
||||
}
|
||||
|
||||
bool KeyStateManager::is_key_pressed(unsigned char key)
|
||||
{
|
||||
if (ascii_keys_status.find(key) == ascii_keys_status.end())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return ascii_keys_status.at(key);
|
||||
}
|
||||
|
||||
bool KeyStateManager::is_special_key_pressed(int key)
|
||||
{
|
||||
if (special_keys_status.find(key) == special_keys_status.end())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return special_keys_status.at(key);
|
||||
}
|
||||
|
||||
void KeyStateManager::key_press(unsigned char event_key, int mouse_x, int mouse_y)
|
||||
{
|
||||
update_key(event_key,true);
|
||||
}
|
||||
|
||||
void KeyStateManager::key_up(unsigned char event_key, int mouse_x, int mouse_y)
|
||||
{
|
||||
update_key(event_key,false);
|
||||
}
|
||||
|
||||
void KeyStateManager::special_key_press(int event_key, int mouse_x, int mouse_y)
|
||||
{
|
||||
update_special_key(event_key,true);
|
||||
}
|
||||
|
||||
void KeyStateManager::special_key_up(int event_key, int mouse_x, int mouse_y)
|
||||
{
|
||||
update_special_key(event_key,false);
|
||||
}
|
||||
|
||||
void KeyStateManager::update_key(unsigned char event_key, bool new_status)
|
||||
{
|
||||
if (ascii_keys_status.find(event_key) != ascii_keys_status.end())
|
||||
{
|
||||
ascii_keys_status.at(event_key) = new_status;
|
||||
}
|
||||
else
|
||||
{
|
||||
ascii_keys_status.insert({event_key,new_status});
|
||||
}
|
||||
}
|
||||
|
||||
void KeyStateManager::update_special_key(int event_key, bool new_status)
|
||||
{
|
||||
if (special_keys_status.find(event_key) != special_keys_status.end())
|
||||
{
|
||||
special_keys_status.at(event_key) = new_status;
|
||||
}
|
||||
else
|
||||
{
|
||||
special_keys_status.insert({event_key,new_status});
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue