Files
Juliet/Juliet/include/Core/HAL/Event/SystemEvent.h
T

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);