| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- // ----------------------------------------------------------------
- // From Game Programming in C++ by Sanjay Madhav
- // Copyright (C) 2017 Sanjay Madhav. All rights reserved.
- //
- // Released under the BSD License
- // See LICENSE in root directory for full details.
- // ----------------------------------------------------------------
- #include "InputSystem.h"
- #include <SDL/SDL.h>
- #include <cstring>
- bool KeyboardState::GetKeyValue(int keyCode) const
- {
- return mCurrState[keyCode] == 1;
- }
- ButtonState KeyboardState::GetKeyState(int keyCode) const
- {
- if (mPrevState[keyCode] == 0)
- {
- if (mCurrState[keyCode] == 0)
- {
- return ENone;
- }
- else
- {
- return EPressed;
- }
- }
- else // Prev state must be 1
- {
- if (mCurrState[keyCode] == 0)
- {
- return EReleased;
- }
- else
- {
- return EHeld;
- }
- }
- }
- bool MouseState::GetButtonValue(int button) const
- {
- return (SDL_BUTTON(button) & mCurrButtons) == 1;
- }
- ButtonState MouseState::GetButtonState(int button) const
- {
- int mask = SDL_BUTTON(button);
- if ((mask & mPrevButtons) == 0)
- {
- if ((mask & mCurrButtons) == 0)
- {
- return ENone;
- }
- else
- {
- return EPressed;
- }
- }
- else
- {
- if ((mask & mCurrButtons) == 0)
- {
- return EReleased;
- }
- else
- {
- return EHeld;
- }
- }
- }
- bool InputSystem::Initialize()
- {
- // Keyboard
- // Assign current state pointer
- mState.Keyboard.mCurrState = SDL_GetKeyboardState(NULL);
- // Clear previous state memory
- memset(mState.Keyboard.mPrevState, 0,
- SDL_NUM_SCANCODES);
- // Mouse (just set everything to 0)
- mState.Mouse.mCurrButtons = 0;
- mState.Mouse.mPrevButtons = 0;
- return true;
- }
- void InputSystem::Shutdown()
- {
- }
- void InputSystem::PrepareForUpdate()
- {
- // Copy current state to previous
- // Keyboard
- memcpy(mState.Keyboard.mPrevState,
- mState.Keyboard.mCurrState,
- SDL_NUM_SCANCODES);
- // Mouse
- mState.Mouse.mPrevButtons = mState.Mouse.mCurrButtons;
- mState.Mouse.mIsRelative = false;
- mState.Mouse.mScrollWheel = Vector2::Zero;
- }
- void InputSystem::Update()
- {
- // Mouse
- int x = 0, y = 0;
- if (mState.Mouse.mIsRelative)
- {
- mState.Mouse.mCurrButtons =
- SDL_GetRelativeMouseState(&x, &y);
- }
- else
- {
- mState.Mouse.mCurrButtons =
- SDL_GetMouseState(&x, &y);
- }
- mState.Mouse.mMousePos.x = static_cast<float>(x);
- mState.Mouse.mMousePos.y = static_cast<float>(y);
- }
- void InputSystem::ProcessEvent(SDL_Event& event)
- {
- switch (event.type)
- {
- case SDL_MOUSEWHEEL:
- mState.Mouse.mScrollWheel = Vector2(
- static_cast<float>(event.wheel.x),
- static_cast<float>(event.wheel.y));
- break;
- default:
- break;
- }
- }
- void InputSystem::SetRelativeMouseMode(bool value)
- {
- SDL_bool set = value ? SDL_TRUE : SDL_FALSE;
- SDL_SetRelativeMouseMode(set);
- mState.Mouse.mIsRelative = value;
- }
|