mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 21:01:52 +00:00
Started making Input framebased and added KeyCodes
This commit is contained in:
@@ -48,7 +48,9 @@ namespace GlitchyEngine
|
|||||||
{
|
{
|
||||||
while(_running)
|
while(_running)
|
||||||
{
|
{
|
||||||
_gameTime.Tick();
|
_gameTime.NewFrame();
|
||||||
|
|
||||||
|
Input.NewFrame();
|
||||||
|
|
||||||
DirectX.ImmediateContext.ClearRenderTargetView(DirectX.BackBufferTarget, .(1, 0, 1));
|
DirectX.ImmediateContext.ClearRenderTargetView(DirectX.BackBufferTarget, .(1, 0, 1));
|
||||||
|
|
||||||
|
|||||||
@@ -4,14 +4,14 @@ namespace GlitchyEngine.Events
|
|||||||
{
|
{
|
||||||
public abstract class KeyEvent : Event
|
public abstract class KeyEvent : Event
|
||||||
{
|
{
|
||||||
protected int32 _keyCode;
|
protected Key _keyCode;
|
||||||
|
|
||||||
[Inline]
|
[Inline]
|
||||||
public int32 KeyCode => _keyCode;
|
public Key KeyCode => _keyCode;
|
||||||
|
|
||||||
public override EventCategory Category => .Input | .Keyboard
|
public override EventCategory Category => .Input | .Keyboard
|
||||||
|
|
||||||
protected this(int32 keyCode)
|
protected this(Key keyCode)
|
||||||
{
|
{
|
||||||
_keyCode = keyCode;
|
_keyCode = keyCode;
|
||||||
}
|
}
|
||||||
@@ -28,7 +28,7 @@ namespace GlitchyEngine.Events
|
|||||||
|
|
||||||
public override StringView Name => "KeyPressed";
|
public override StringView Name => "KeyPressed";
|
||||||
|
|
||||||
public this(int32 keyCode, int32 repeatCount) : base(keyCode)
|
public this(Key keyCode, int32 repeatCount) : base(keyCode)
|
||||||
{
|
{
|
||||||
_repeatCount = repeatCount;
|
_repeatCount = repeatCount;
|
||||||
}
|
}
|
||||||
@@ -46,7 +46,7 @@ namespace GlitchyEngine.Events
|
|||||||
|
|
||||||
public override StringView Name => "KeyReleased";
|
public override StringView Name => "KeyReleased";
|
||||||
|
|
||||||
public this(int32 keyCode) : base(keyCode) { }
|
public this(Key keyCode) : base(keyCode) { }
|
||||||
|
|
||||||
public override void ToString(String strBuffer)
|
public override void ToString(String strBuffer)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ namespace GlitchyEngine
|
|||||||
/**
|
/**
|
||||||
* Tells the timer that a frame has passed and updates the counters.
|
* Tells the timer that a frame has passed and updates the counters.
|
||||||
*/
|
*/
|
||||||
public void Tick()
|
public void NewFrame()
|
||||||
{
|
{
|
||||||
TimeSpan old = _totalTime;
|
TimeSpan old = _totalTime;
|
||||||
_totalTime = Elapsed;
|
_totalTime = Elapsed;
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ namespace GlitchyEngine.ImGui
|
|||||||
dispatcher.Dispatch<KeyPressedEvent>(scope (e) =>
|
dispatcher.Dispatch<KeyPressedEvent>(scope (e) =>
|
||||||
{
|
{
|
||||||
ref ImGui.IO io = ref ImGui.GetIO();
|
ref ImGui.IO io = ref ImGui.GetIO();
|
||||||
io.KeysDown[e.KeyCode] = true;
|
io.KeysDown[(int32)e.KeyCode] = true;
|
||||||
|
|
||||||
io.KeyCtrl = io.KeysDown[VK_CONTROL];
|
io.KeyCtrl = io.KeysDown[VK_CONTROL];
|
||||||
io.KeyShift = io.KeysDown[VK_SHIFT];
|
io.KeyShift = io.KeysDown[VK_SHIFT];
|
||||||
@@ -138,7 +138,7 @@ namespace GlitchyEngine.ImGui
|
|||||||
dispatcher.Dispatch<KeyReleasedEvent>(scope (e) =>
|
dispatcher.Dispatch<KeyReleasedEvent>(scope (e) =>
|
||||||
{
|
{
|
||||||
ref ImGui.IO io = ref ImGui.GetIO();
|
ref ImGui.IO io = ref ImGui.GetIO();
|
||||||
io.KeysDown[e.KeyCode] = false;
|
io.KeysDown[(int32)e.KeyCode] = false;
|
||||||
|
|
||||||
io.KeyCtrl = io.KeysDown[VK_CONTROL];
|
io.KeyCtrl = io.KeysDown[VK_CONTROL];
|
||||||
io.KeyShift = io.KeysDown[VK_SHIFT];
|
io.KeyShift = io.KeysDown[VK_SHIFT];
|
||||||
|
|||||||
@@ -6,16 +6,40 @@ namespace GlitchyEngine
|
|||||||
{
|
{
|
||||||
public static class Input
|
public static class Input
|
||||||
{
|
{
|
||||||
public static extern bool IsKeyPressed(int32 keycode);
|
public static extern bool IsKeyPressed(Key keycode);
|
||||||
public static extern bool IsKeyReleased(int32 keycode);
|
public static extern bool IsKeyReleased(Key keycode);
|
||||||
public static extern bool IsKeyToggled(int32 keycode);
|
public static extern bool IsKeyToggled(Key keycode);
|
||||||
|
|
||||||
|
public static extern bool WasKeyPressed(Key keycode);
|
||||||
|
public static extern bool WasKeyReleased(Key keycode);
|
||||||
|
public static extern bool WasKeyToggled(Key keycode);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Determines whether or not the key is being pressed down.
|
||||||
|
* @remarks IsKeyPressing(kc) == IsKeyPressed(kc) && !IsKeyReleased(kc)
|
||||||
|
*/
|
||||||
|
public static extern bool IsKeyPressing(Key keycode);
|
||||||
|
/*
|
||||||
|
* Determines whether or not the key is being released down.
|
||||||
|
* @remarks IsKeyReleasing(kc) == !IsKeyPressed(kc) && IsKeyReleased(kc)
|
||||||
|
*/
|
||||||
|
public static extern bool IsKeyReleasing(Key keycode);
|
||||||
|
|
||||||
public static extern bool IsMouseButtonPressed(MouseButton button);
|
public static extern bool IsMouseButtonPressed(MouseButton button);
|
||||||
public static extern bool IsMouseButtonReleased(MouseButton button);
|
public static extern bool IsMouseButtonReleased(MouseButton button);
|
||||||
|
|
||||||
|
public static extern bool WasMouseButtonPressed(MouseButton button);
|
||||||
|
public static extern bool WasMouseButtonReleased(MouseButton button);
|
||||||
|
|
||||||
public static extern int32 GetMouseX();
|
public static extern int32 GetMouseX();
|
||||||
public static extern int32 GetMouseY();
|
public static extern int32 GetMouseY();
|
||||||
|
|
||||||
|
public static extern int32 GetLastMouseX();
|
||||||
|
public static extern int32 GetLastMouseY();
|
||||||
|
|
||||||
public static extern Point GetMousePosition();
|
public static extern Point GetMousePosition();
|
||||||
|
public static extern Point GetLastMousePosition();
|
||||||
|
|
||||||
|
public static extern void NewFrame();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,120 @@
|
|||||||
|
namespace GlitchyEngine
|
||||||
|
{
|
||||||
|
public enum Key : int32
|
||||||
|
{
|
||||||
|
// Based on Win32 Virtual Keys
|
||||||
|
LeftButton = 1, // Left mouse button
|
||||||
|
RightRutton = 2, // Right mouse button
|
||||||
|
MiddleButton = 4, // Middle mouse button(three - button mouse)
|
||||||
|
XButton1 = 5, // X1 mouse button
|
||||||
|
XButton2 = 6, // X2 mouse button
|
||||||
|
Backspace = 8, // Backspace key
|
||||||
|
Tab = 9, // Tab key
|
||||||
|
Return = 13, // Enter key
|
||||||
|
Shift = 16, // Shift key
|
||||||
|
Control = 17, // Ctrl key
|
||||||
|
Alt = 18, // Alt key
|
||||||
|
Pause = 19, // Pause key
|
||||||
|
CapsLock = 20, // Caps Lock key
|
||||||
|
Escape = 27, // ESC key
|
||||||
|
Space = 32, // Spacebar
|
||||||
|
Prior = 33, // Page Up key
|
||||||
|
Next = 34, // Page Down key
|
||||||
|
End = 35, // END key
|
||||||
|
Home = 36, // HOME key
|
||||||
|
Left = 37, // LEFT ARROW key
|
||||||
|
Up = 38, // UP ARROW key
|
||||||
|
Right = 39, // RIGHT ARROW key
|
||||||
|
Down = 40, // DOWN ARROW key
|
||||||
|
Print = 42, // PRINT key
|
||||||
|
Insert = 45, // INS key
|
||||||
|
Delete = 46, // DEL key
|
||||||
|
Help = 47, // HELP key
|
||||||
|
Zero = 48, // 0 key
|
||||||
|
One = 49, // 1 key
|
||||||
|
Two = 50, // 2 key
|
||||||
|
Three = 51, // 3 key
|
||||||
|
Four = 52, // 4 key
|
||||||
|
Five = 53, // 5 key
|
||||||
|
Six = 54, // 6 key
|
||||||
|
Seven = 55, // 7 key
|
||||||
|
Eight = 56, // 8 key
|
||||||
|
Nine = 57, // 9 key
|
||||||
|
A = 65, // A key
|
||||||
|
B = 66, // B key
|
||||||
|
C = 67, // C key
|
||||||
|
D = 68, // D key
|
||||||
|
E = 69, // E key
|
||||||
|
F = 70, // F key
|
||||||
|
G = 71, // G key
|
||||||
|
H = 72, // H key
|
||||||
|
I = 73, // I key
|
||||||
|
J = 74, // J key
|
||||||
|
K = 75, // K key
|
||||||
|
L = 76, // L key
|
||||||
|
M = 77, // M key
|
||||||
|
N = 78, // N key
|
||||||
|
O = 79, // O key
|
||||||
|
P = 80, // P key
|
||||||
|
Q = 81, // Q key
|
||||||
|
R = 82, // R key
|
||||||
|
S = 83, // S key
|
||||||
|
T = 84, // T key
|
||||||
|
U = 85, // U key
|
||||||
|
V = 86, // V key
|
||||||
|
W = 87, // W key
|
||||||
|
X = 88, // X key
|
||||||
|
Y = 89, // Y key
|
||||||
|
Z = 90, // Z key
|
||||||
|
LeftSuper = 91, // Left Windows key(Microsoft® Natural® keyboard)
|
||||||
|
RightSuper = 92, // Right Windows key(Natural keyboard)
|
||||||
|
Numpad0 = 96, // Numeric keypad 0 key
|
||||||
|
Numpad1 = 97, // Numeric keypad 1 key
|
||||||
|
Numpad2 = 98, // Numeric keypad 2 key
|
||||||
|
Numpad3 = 99, // Numeric keypad 3 key
|
||||||
|
Numpad4 = 100, // Numeric keypad 4 key
|
||||||
|
Numpad5 = 101, // Numeric keypad 5 key
|
||||||
|
Numpad6 = 102, // Numeric keypad 6 key
|
||||||
|
Numpad7 = 103, // Numeric keypad 7 key
|
||||||
|
Numpad8 = 104, // Numeric keypad 8 key
|
||||||
|
Numpad9 = 105, // Numeric keypad 9 key
|
||||||
|
Multiply = 106, // Multiply key
|
||||||
|
Add = 107, // Add key
|
||||||
|
Separator = 108, // Separator key
|
||||||
|
Subtract = 109, // Subtract key
|
||||||
|
Decimal = 110, // Decimal key
|
||||||
|
Divide = 111, // Divide key
|
||||||
|
F1 = 112, // F1 key
|
||||||
|
F2 = 113, // F2 key
|
||||||
|
F3 = 114, // F3 key
|
||||||
|
F4 = 115, // F4 key
|
||||||
|
F5 = 116, // F5 key
|
||||||
|
F6 = 117, // F6 key
|
||||||
|
F7 = 118, // F7 key
|
||||||
|
F8 = 119, // F8 key
|
||||||
|
F9 = 120, // F9 key
|
||||||
|
F10 = 121, // F10 key
|
||||||
|
F11 = 122, // F11 key
|
||||||
|
F12 = 123, // F12 key
|
||||||
|
F13 = 124, // F13 key
|
||||||
|
F14 = 125, // F14 key
|
||||||
|
F15 = 126, // F15 key
|
||||||
|
F16 = 127, // F16 key
|
||||||
|
F17 = 128, // F17 key
|
||||||
|
F18 = 129, // F18 key
|
||||||
|
F19 = 130, // F19 key
|
||||||
|
F20 = 131, // F20 key
|
||||||
|
F21 = 132, // F21 key
|
||||||
|
F22 = 133, // F22 key
|
||||||
|
F23 = 134, // F23 key
|
||||||
|
F24 = 135, // F24 key
|
||||||
|
Numlock = 144, // NUM LOCK key
|
||||||
|
Scroll = 145, // SCROLL LOCK key
|
||||||
|
LeftShift = 160, // Left SHIFT key
|
||||||
|
RightShift = 161, // Right SHIFT key
|
||||||
|
LeftControl = 162, // Left CONTROL key
|
||||||
|
RightControl = 163, // Right CONTROL key
|
||||||
|
LeftAlt = 164, // Left Alt key
|
||||||
|
RightAlt = 165 // Right Alt key
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,33 +9,63 @@ namespace GlitchyEngine
|
|||||||
{
|
{
|
||||||
extension Input
|
extension Input
|
||||||
{
|
{
|
||||||
|
static int8* LastKeyStates = new int8[256]* ~ delete _;
|
||||||
|
static int8* CurrentkeyStates = new int8[256]* ~ delete _;
|
||||||
|
|
||||||
[CLink, CallingConvention(.Stdcall)]
|
[CLink, CallingConvention(.Stdcall)]
|
||||||
static extern int16 GetKeyState(int32 keycode);
|
static extern int16 GetKeyState(int32 keycode);
|
||||||
|
|
||||||
public override static bool IsKeyPressed(int32 keycode)
|
public override static bool IsKeyPressed(Key keycode)
|
||||||
{
|
{
|
||||||
int16 state = GetKeyState(keycode);
|
//int16 state = GetKeyState((.)keycode);
|
||||||
|
int8 state = CurrentkeyStates[(int)keycode];
|
||||||
return state < 0;
|
return state < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override static bool IsKeyReleased(int32 keycode)
|
public override static bool IsKeyReleased(Key keycode)
|
||||||
{
|
{
|
||||||
int16 state = GetKeyState(keycode);
|
//int16 state = GetKeyState((.)keycode);
|
||||||
|
int8 state = CurrentkeyStates[(int)keycode];
|
||||||
return state >= 0;
|
return state >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override static bool IsKeyToggled(int32 keycode)
|
public override static bool IsKeyToggled(Key keycode)
|
||||||
{
|
{
|
||||||
int16 state = GetKeyState(keycode);
|
//int16 state = GetKeyState((.)keycode);
|
||||||
|
int8 state = CurrentkeyStates[(int)keycode];
|
||||||
return (state & 0x1) == 1;
|
return (state & 0x1) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override static bool WasKeyPressed(Key keycode)
|
||||||
|
{
|
||||||
|
int8 state = LastKeyStates[(int)keycode];
|
||||||
|
return state < 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override static bool WasKeyReleased(Key keycode)
|
||||||
|
{
|
||||||
|
int8 state = LastKeyStates[(int)keycode];
|
||||||
|
return state >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override static bool WasKeyToggled(Key keycode)
|
||||||
|
{
|
||||||
|
int8 state = LastKeyStates[(int)keycode];
|
||||||
|
return (state & 0x1) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override static bool IsKeyPressing(Key keycode)
|
||||||
|
{
|
||||||
|
return default;
|
||||||
|
//return IsKeyPressed(keycode) && WasKeyReleased(keycode);
|
||||||
|
}
|
||||||
|
|
||||||
private static mixin MouseButtonToKeyCode(MouseButton button)
|
private static mixin MouseButtonToKeyCode(MouseButton button)
|
||||||
{
|
{
|
||||||
int32 keycode;
|
int32 keycode;
|
||||||
switch(button)
|
switch(button)
|
||||||
{
|
{
|
||||||
case .LeftButton:
|
case MouseButton.LeftButton:
|
||||||
keycode = VK_LBUTTON;
|
keycode = VK_LBUTTON;
|
||||||
case .RightButton:
|
case .RightButton:
|
||||||
keycode = VK_RBUTTON;
|
keycode = VK_RBUTTON;
|
||||||
@@ -54,13 +84,15 @@ namespace GlitchyEngine
|
|||||||
|
|
||||||
public override static bool IsMouseButtonPressed(MouseButton button)
|
public override static bool IsMouseButtonPressed(MouseButton button)
|
||||||
{
|
{
|
||||||
int16 state = GetKeyState(MouseButtonToKeyCode!(button));
|
//int16 state = GetKeyState(MouseButtonToKeyCode!(button));
|
||||||
|
int8 state = CurrentkeyStates[MouseButtonToKeyCode!(button)];
|
||||||
return state < 0;
|
return state < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override static bool IsMouseButtonReleased(MouseButton button)
|
public override static bool IsMouseButtonReleased(MouseButton button)
|
||||||
{
|
{
|
||||||
int16 state = GetKeyState(MouseButtonToKeyCode!(button));
|
//int16 state = GetKeyState(MouseButtonToKeyCode!(button));
|
||||||
|
int8 state = CurrentkeyStates[MouseButtonToKeyCode!(button)];
|
||||||
return state >= 0;
|
return state >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,5 +130,23 @@ namespace GlitchyEngine
|
|||||||
{
|
{
|
||||||
return GetMousePos!().Y;
|
return GetMousePos!().Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override static void NewFrame()
|
||||||
|
{
|
||||||
|
// Switch last and current keyStates
|
||||||
|
int8* buffer = LastKeyStates;
|
||||||
|
LastKeyStates = CurrentkeyStates;
|
||||||
|
CurrentkeyStates = buffer;
|
||||||
|
|
||||||
|
// Get current keyboard state
|
||||||
|
var result = DirectX.Windows.Winuser.GetKeyboardState((uint8*)CurrentkeyStates);
|
||||||
|
|
||||||
|
if(result == 0)
|
||||||
|
{
|
||||||
|
DirectX.Common.HResult res = (.)GetLastError();
|
||||||
|
|
||||||
|
Log.EngineLogger.Error("Failed to get keyboard state Message({}){}:", (int32)res, res);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -297,12 +297,12 @@ namespace GlitchyEngine.Platform.Windows
|
|||||||
|
|
||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
{
|
{
|
||||||
var event = scope KeyPressedEvent((int32)wParam, (int32)lParam & 0xFFFF);
|
var event = scope KeyPressedEvent((Key)wParam, (int32)lParam & 0xFFFF);
|
||||||
window._eventCallback(event);
|
window._eventCallback(event);
|
||||||
}
|
}
|
||||||
case WM_KEYUP:
|
case WM_KEYUP:
|
||||||
{
|
{
|
||||||
var event = scope KeyReleasedEvent((int32)wParam);
|
var event = scope KeyReleasedEvent((Key)wParam);
|
||||||
window._eventCallback(event);
|
window._eventCallback(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ namespace Sandbox
|
|||||||
|
|
||||||
public override void Update(GameTime gameTime)
|
public override void Update(GameTime gameTime)
|
||||||
{
|
{
|
||||||
|
if(Input.IsKeyPressed(.Tab))
|
||||||
|
Log.ClientLogger.Info("Tab key is pressed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnEvent(Event event)
|
public override void OnEvent(Event event)
|
||||||
|
|||||||
Reference in New Issue
Block a user