diff options
| author | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-12-13 08:16:48 +0100 | 
|---|---|---|
| committer | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-12-13 08:16:48 +0100 | 
| commit | 193d5bf4d9577e63202cec45b21ed85a76a89f09 (patch) | |
| tree | f25e2f1d0efebcb72e3c411f380222a84459e37a | |
| parent | 6e2aa75019a28c298454f50b7bfb0dca100e0936 (diff) | |
keyboard state implemented
| -rw-r--r-- | src/crepe/api/Event.h | 4 | ||||
| -rw-r--r-- | src/crepe/api/KeyCodes.h | 2 | ||||
| -rw-r--r-- | src/crepe/facade/SDLContext.cpp | 10 | ||||
| -rw-r--r-- | src/crepe/facade/SDLContext.h | 12 | 
4 files changed, 9 insertions, 19 deletions
| diff --git a/src/crepe/api/Event.h b/src/crepe/api/Event.h index d222e51..66dd0cc 100644 --- a/src/crepe/api/Event.h +++ b/src/crepe/api/Event.h @@ -2,8 +2,6 @@  // TODO discussing the location of these events  #include <string> -#include <unordered_map> -  #include "KeyCodes.h"  #include "types.h" @@ -25,7 +23,6 @@ public:  	//! The key that was pressed.  	Keycode key = Keycode::NONE; -	keyboard_state_t keyboard_state;  };  /** @@ -35,7 +32,6 @@ class KeyReleaseEvent : public Event {  public:  	//! The key that was released.  	Keycode key = Keycode::NONE; -	keyboard_state_t keyboard_state;  };  /** diff --git a/src/crepe/api/KeyCodes.h b/src/crepe/api/KeyCodes.h index 4a3bf57..fa0d17c 100644 --- a/src/crepe/api/KeyCodes.h +++ b/src/crepe/api/KeyCodes.h @@ -157,5 +157,5 @@ typedef enum {  	NUM_KEYCODES = 512,  } Keycode; -typedef std::unordered_map<Keycode, bool> keyboard_state_t; +  } // namespace crepe diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index d70a7bb..6e47561 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -84,7 +84,7 @@ Keycode SDLContext::sdl_to_keycode(SDL_Scancode sdl_key) {      return Keycode::NONE;  } -keyboard_state_t SDLContext::get_keyboard_state() { +void SDLContext::update_keyboard_state() {  	// Array to hold the key states (true if pressed, false if not)  	std::array<bool, Keycode::NUM_KEYCODES> keyState{};  	SDL_PumpEvents(); @@ -94,11 +94,10 @@ keyboard_state_t SDLContext::get_keyboard_state() {  		Keycode key = sdl_to_keycode(static_cast<SDL_Scancode>(i));  		if (key != Keycode::NONE) { -			keyboard_state[key] = current_state[i] != 0; +			this->keyboard_state[key] = current_state[i] != 0;  		}  	} -	return keyboard_state;  }  MouseButton SDLContext::sdl_to_mousebutton(Uint8 sdl_button) { @@ -293,25 +292,24 @@ std::vector<SDLContext::EventData> SDLContext::get_events() {  				break;  			case SDL_KEYDOWN:  			{ - +				this->update_keyboard_state();  				EventData transfer_event;  				transfer_event.event_type = SDLContext::EventType::KEYDOWN;  				transfer_event.data.key_data = KeyData{  					.key = sdl_to_keycode(event.key.keysym.scancode),  					.key_repeat = event.key.repeat != 0, -					.keyboard_state = this->get_keyboard_state(),  				};  				event_list.push_back(transfer_event);  			}  				break;  			case SDL_KEYUP:  			{ +				this->update_keyboard_state();  				EventData transfer_event;  				transfer_event.event_type = SDLContext::EventType::KEYUP;  				transfer_event.data.key_data = KeyData{  					.key = sdl_to_keycode(event.key.keysym.scancode),  					.key_repeat = false, -					.keyboard_state = this->get_keyboard_state(),  				};  				event_list.push_back(transfer_event);  			} diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index feb51f4..b10bcfe 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -125,16 +125,12 @@ public:  	/**  	 * \brief Retrieves the current state of the keyboard.  	 * -	 * This method returns the state of all keys on the keyboard, represented as a -	 * `std::array` of boolean values. Each element of the array corresponds to a +	 * This method updates the state of all keys on the keyboard. Each element of the unordered map corresponds to a  	 * specific key defined in the `Keycode` enum, and the value indicates whether  	 * the key is currently pressed (true) or not pressed (false). -	 * -	 * \return A `keyboard_state_t` representing the state of -	 *         each key on the keyboard, where `true` means the key is pressed, and -	 *         `false` means it is not pressed. +	 *   	 */ -	keyboard_state_t get_keyboard_state(); +	void update_keyboard_state();  	/**  	 * \brief Gets the singleton instance of SDLContext.  	 * \return Reference to the SDLContext instance. @@ -296,7 +292,7 @@ private:  	 */  	CameraAuxiliaryData cam_aux_data;  private:  -	keyboard_state_t keyboard_state; +	std::unordered_map<Keycode, bool> keyboard_state;  	const std::unordered_map<SDL_Scancode, Keycode> LOOKUP_TABLE = {          {SDL_SCANCODE_SPACE, Keycode::SPACE},          {SDL_SCANCODE_APOSTROPHE, Keycode::APOSTROPHE}, |