108 lines
2.8 KiB
C
108 lines
2.8 KiB
C
#pragma once
|
|
|
|
#include <Core/Common/CoreUtils.h>
|
|
#include <Core/HAL/Display/Display.h>
|
|
#include <Core/HAL/Keyboard/Keyboard.h>
|
|
#include <Core/HAL/Keyboard/KeyCode.h>
|
|
#include <Core/HAL/Mouse/Mouse.h>
|
|
#include <Juliet.h>
|
|
|
|
typedef uint32 EventType;
|
|
enum
|
|
{
|
|
EventType_None = 0,
|
|
EventType_First = EventType_None,
|
|
|
|
// Application Events
|
|
EventType_Application_Exit = 100,
|
|
EventType_Application_OS_Terminate = 101,
|
|
EventType_Application_Begin = EventType_Application_Exit,
|
|
EventType_Application_End = EventType_Application_OS_Terminate,
|
|
|
|
// Window Events
|
|
EventType_Window_Close_Request = 200,
|
|
EventType_Window_Begin = EventType_Window_Close_Request,
|
|
EventType_Window_End = EventType_Window_Close_Request,
|
|
|
|
// Keyboard Event
|
|
EventType_Key_Down = 300,
|
|
EventType_Key_Up = 301,
|
|
EventType_Keyboard_Begin = EventType_Key_Down,
|
|
EventType_Keyboard_End = EventType_Key_Up,
|
|
|
|
// Mouse Event
|
|
EventType_Mouse_Move = 400,
|
|
EventType_Mouse_ButtonPressed = 401,
|
|
EventType_Mouse_ButtonReleased = 402,
|
|
|
|
EventType_Mouse_Begin = EventType_Mouse_Move,
|
|
EventType_Mouse_End = EventType_Mouse_ButtonReleased,
|
|
|
|
EventType_Last
|
|
};
|
|
|
|
typedef struct WindowEvent WindowEvent;
|
|
typedef struct KeyboardEvent KeyboardEvent;
|
|
typedef struct MouseMovementEvent MouseMovementEvent;
|
|
typedef struct MouseButtonEvent MouseButtonEvent;
|
|
typedef union AllSystemEventUnion AllSystemEventUnion;
|
|
typedef struct SystemEvent SystemEvent;
|
|
|
|
struct WindowEvent
|
|
{
|
|
WindowID AssociatedWindowID;
|
|
uint32 DataPadding[2];
|
|
};
|
|
|
|
struct KeyboardEvent
|
|
{
|
|
KeyboardID AssociatedKeyboardID;
|
|
WindowID WindowID;
|
|
Key Key;
|
|
KeyState KeyState;
|
|
KeyMod KeyModeState;
|
|
};
|
|
|
|
struct MouseMovementEvent
|
|
{
|
|
MouseID AssociatedMouseID;
|
|
WindowID WindowID;
|
|
float X;
|
|
float Y;
|
|
float X_Displacement;
|
|
float Y_Displacement;
|
|
MouseButton ButtonState;
|
|
};
|
|
|
|
struct MouseButtonEvent
|
|
{
|
|
MouseID AssociatedMouseID;
|
|
WindowID WindowID;
|
|
float X;
|
|
float Y;
|
|
MouseButton ButtonState;
|
|
bool8 IsPressed;
|
|
};
|
|
|
|
union AllSystemEventUnion
|
|
{
|
|
WindowEvent Window;
|
|
KeyboardEvent Keyboard;
|
|
MouseMovementEvent MouseMovement;
|
|
MouseButtonEvent MouseButton;
|
|
uint8 Padding[128];
|
|
};
|
|
StaticAssert(sizeof(AllSystemEventUnion) == 128, SystemEventUnionSizeCheck);
|
|
|
|
struct SystemEvent
|
|
{
|
|
EventType Type;
|
|
uint64 Timestamp;
|
|
AllSystemEventUnion Data;
|
|
};
|
|
|
|
extern JULIET_API bool8 GetEvent(SystemEvent* event);
|
|
extern JULIET_API bool8 WaitEvent(SystemEvent* event, int32 timeoutInNS);
|
|
extern JULIET_API bool8 AddEvent(SystemEvent* event);
|
|
extern void Events_NewFrame(float deltaTime);
|