Initial commit

This commit is contained in:
github-classroom[bot]
2025-05-08 08:33:11 +00:00
committed by GitHub
commit 294e9ab735
188 changed files with 65381 additions and 0 deletions

View File

@@ -0,0 +1,176 @@
/*=============================================================================*/
// Copyright 2021-2022 Elite Engine
// Authors: Matthieu Delaere, Thomas Goussaert
/*=============================================================================*/
// EInputCodes.h: all codes for all possible input types.
/*=============================================================================*/
#ifndef ELITE_INPUT_CODES
#define ELITE_INPUT_CODES
namespace Elite
{
/*! InputType: holds what type of input this action comes from */
enum InputType
{
eDefault,
eKeyboard,
eMouseButton,
eMouseWheel,
eMouseMotion
};
/*! InputState: holds current state of input */
enum InputState
{
eDown,
eReleased,
};
/*! InputMouseButton: holds current button of mouse used */
enum InputMouseButton
{
eLeft = 1,
eMiddle = 2,
eRight = 3,
};
/*! InputScancode: scancode based on SDL
(which is based on the USB usage page: http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) */
enum InputScancode
{
eScancode_Unknown = 0,
eScancode_A = 4,
eScancode_B = 5,
eScancode_C = 6,
eScancode_D = 7,
eScancode_E = 8,
eScancode_F = 9,
eScancode_G = 10,
eScancode_H = 11,
eScancode_I = 12,
eScancode_J = 13,
eScancode_K = 14,
eScancode_L = 15,
eScancode_M = 16,
eScancode_N = 17,
eScancode_O = 18,
eScancode_P = 19,
eScancode_Q = 20,
eScancode_R = 21,
eScancode_S = 22,
eScancode_T = 23,
eScancode_U = 24,
eScancode_V = 25,
eScancode_W = 26,
eScancode_X = 27,
eScancode_Y = 28,
eScancode_Z = 29,
eScancode_1 = 30,
eScancode_2 = 31,
eScancode_3 = 32,
eScancode_4 = 33,
eScancode_5 = 34,
eScancode_6 = 35,
eScancode_7 = 36,
eScancode_8 = 37,
eScancode_9 = 38,
eScancode_0 = 39,
eScancode_Return = 40,
eScancode_Escape = 41,
eScancode_Backspace = 42,
eScancode_Tab = 43,
eScancode_Space = 44,
eScancode_Minus = 45,
eScancode_Equals = 46,
eScancode_LeftBracket = 47,
eScancode_RightBracket = 48,
eScancode_Backslash = 49,
eScancode_Nonuslash = 50,
eScancode_Semicolon = 51,
eScancode_Apostrophe = 52,
eScancode_Grave = 53,
eScancode_Comma = 54,
eScancode_Period = 55,
eScancode_Slash = 56,
eScancode_Capslock = 57,
eScancode_F1 = 58,
eScancode_F2 = 59,
eScancode_F3 = 60,
eScancode_F4 = 61,
eScancode_F5 = 62,
eScancode_F6 = 63,
eScancode_F7 = 64,
eScancode_F8 = 65,
eScancode_F9 = 66,
eScancode_F10 = 67,
eScancode_F11 = 68,
eScancode_F12 = 69,
eScancode_PrintScreen = 70,
eScancode_ScrollLock = 71,
eScancode_Pause = 72,
eScancode_Insert = 73,
eScancode_Home = 74,
eScancode_PageUp = 75,
eScancode_Delete = 76,
eScancode_End = 77,
eScancode_PageDown = 78,
eScancode_Right = 79,
eScancode_Left = 80,
eScancode_Down = 81,
eScancode_Up = 82,
eScancode_NumLockClear = 83,
eScancode_KP_Divide = 84,
eScancode_KP_Mulitply = 85,
eScancode_KP_Minus = 86,
eScancode_KP_Plus = 87,
eScancode_KP_Enter = 88,
eScancode_KP_1 = 89,
eScancode_KP_2 = 90,
eScancode_KP_3 = 91,
eScancode_KP_4 = 92,
eScancode_KP_5 = 93,
eScancode_KP_6 = 94,
eScancode_KP_7 = 95,
eScancode_KP_8 = 96,
eScancode_KP_9 = 97,
eScancode_KP_0 = 98,
eScancode_KP_Period = 99,
eScancode_F13 = 104,
eScancode_F14 = 105,
eScancode_F15 = 106,
eScancode_F16 = 107,
eScancode_F17 = 108,
eScancode_F18 = 109,
eScancode_F19 = 110,
eScancode_F20 = 111,
eScancode_F21 = 112,
eScancode_F22 = 113,
eScancode_F23 = 114,
eScancode_F24 = 115,
eScancode_VolumeUp = 128,
eScancode_VolumeDown = 129,
eScancode_LockingCapsLock = 130,
eScancode_LockingNumLock = 131,
eScancode_LockingScrollLock = 132,
eScancode_KP_Comma = 133,
eScancode_KP_EqualsSAS400 = 134,
eScancode_LCtrl = 224,
eScancode_LShift = 225,
eScancode_LAlt = 226,
eScancode_LGUI = 227,
eScancode_RCtrl = 228,
eScancode_RShift = 229,
eScancode_RAlt = 230,
eScancode_RGUI = 231,
};
}
#endif

View File

@@ -0,0 +1,60 @@
/*=============================================================================*/
// Copyright 2018-2019 Elite Engine
// Authors: Matthieu Delaere
/*=============================================================================*/
// EInputData.h: all structs/data used by the input manager
/*=============================================================================*/
#ifndef ELITE_INPUT_DATA
#define ELITE_INPUT_DATA
namespace Elite
{
struct KeyboardData //8 bytes
{
int TimeStamp = 0;
InputScancode ScanCode = eScancode_Unknown;
KeyboardData() = default;
KeyboardData(int timeStamp, InputScancode keyCode) :
TimeStamp(timeStamp), ScanCode(keyCode)
{}
};
struct MouseData //== 24 bytes
{
int TimeStamp = 0;
InputMouseButton Button = InputMouseButton(0);
int X = 0; //Position X relative to window OR amound of scroll, based on Type!
int Y = 0; //Position Y relative to window OR amound of scroll, based on Type!
int XRel = 0;
int YRel = 0; //Y == Direction when scrolling (1 == UP, -1 == DOWN)
MouseData() = default;
MouseData(int timeStamp, InputMouseButton button, int x, int y,
int xRel = 0, int yRel = 0) :
TimeStamp(timeStamp), Button(button), X(x), Y(y),
XRel(xRel), YRel(yRel)
{}
};
union InputData //"Wasting" 16 bytes for a more user-friendly setup, SDL wastes even more memory (= 48 bytes)
{
MouseData MouseInputData;
KeyboardData KeyboardInputData;
InputData(MouseData data) : MouseInputData(data) {}
InputData(KeyboardData data) : KeyboardInputData(data) {}
};
//=== Actual InputAction used by the InputManager ===
struct InputAction
{
InputType InputActionType = InputType::eDefault;
InputState InputActionState = eDown;
InputData InputActionData;
InputAction(InputType type, InputState state, InputData data) :
InputActionType(type), InputActionState(state), InputActionData(data) {}
InputAction() = default;
};
}
#endif

View File

@@ -0,0 +1,48 @@
//=== General Includes ===
#include "stdafx.h"
#include "EInputManager.h"
using namespace Elite;
//=== Public Functions ===
MouseData EInputManager::GetMouseData(InputType type, InputMouseButton button)
{
auto result = std::find_if(m_InputContainer.begin(), m_InputContainer.end(),
[type, button](const InputAction& ia)
{
return
(ia.InputActionType == type) &&
(ia.InputActionData.MouseInputData.Button == button);
});
if (result != m_InputContainer.end())
return (*result).InputActionData.MouseInputData;
return
MouseData();
}
//=== Private Functions ===
bool EInputManager::IsKeyPresent(InputType type, InputState state, InputScancode code)
{
auto result = std::find_if(m_InputContainer.begin(), m_InputContainer.end(),
[type, state, code](const InputAction& ia)
{
return
(ia.InputActionType == type) &&
(ia.InputActionState == state) &&
(ia.InputActionData.KeyboardInputData.ScanCode == code);
});
return (result != m_InputContainer.end());
}
bool EInputManager::IsMousePresent(InputType type, InputState state, InputMouseButton button)
{
auto result = std::find_if(m_InputContainer.begin(), m_InputContainer.end(),
[type, state, button](const InputAction& ia)
{
return
(ia.InputActionType == type) &&
(ia.InputActionState == state) &&
(ia.InputActionData.MouseInputData.Button == button);
});
return (result != m_InputContainer.end());
}

View File

@@ -0,0 +1,49 @@
/*=============================================================================*/
// Copyright 2021-2022 Elite Engine
// Authors: Matthieu Delaere
/*=============================================================================*/
// EInputManager.h: manager class that controls the input in the engine.
/*=============================================================================*/
#ifndef ELITE_INPUT_MANAGER
#define ELITE_INPUT_MANAGER
namespace Elite
{
//=== Forward Declaration ===
#if (PLATFORM_ID == PLATFORM_WINDOWS)
class SDLWindow;
#endif
/*! EInputManager: manager class that controls all the input, captured from active platform & window*/
class EInputManager final : public ESingleton<EInputManager>
{
public:
bool IsKeyboardKeyDown(InputScancode key) { return IsKeyPresent(eKeyboard, eDown, key); };
bool IsKeyboardKeyUp(InputScancode key) { return IsKeyPresent(eKeyboard, eReleased, key); }
bool IsMouseButtonDown(InputMouseButton button) { return IsMousePresent(eMouseButton, eDown, button); }
bool IsMouseButtonUp(InputMouseButton button) { return IsMousePresent(eMouseButton, eReleased, button); }
bool IsMouseScrolling() { return IsMousePresent(eMouseWheel); }
bool IsMouseMoving() { return IsMousePresent(eMouseMotion); }
MouseData GetMouseData(InputType type, InputMouseButton button = InputMouseButton(0));
private:
//=== Friends ===
//Our window has access to add input events to our queue, our application can later use these events
#if (PLATFORM_ID == PLATFORM_WINDOWS)
friend SDLWindow;
#endif
//=== Internal Functions
void Flush(){ m_InputContainer.clear();};
void AddInputAction(const InputAction& inputAction)
{ m_InputContainer.push_back(inputAction); };
bool IsKeyPresent(InputType type, InputState state, InputScancode code);
bool IsMousePresent(InputType type, InputState state = InputState(0), InputMouseButton button = InputMouseButton(0));
//=== Datamembers ===
std::vector<InputAction> m_InputContainer;
};
}
#endif