Prepare for event system

Moved stuff around.
Create an entry point for RSE.
Created base for events module

Signed-off-by: Piotr Krygier <piotrkrygier@everyonecancode@xyz>
This commit is contained in:
Piotr Krygier
2026-03-03 11:26:43 +01:00
parent 7d6156be01
commit bbbe69d73c
13 changed files with 245 additions and 53 deletions
+17
View File
@@ -0,0 +1,17 @@
rse_events_sources = [
]
sdl3_dep = dependency('sdl3',
version : '>=3.4.0')
rse_events_lib = shared_library(
'rse_events',
rse_events_sources,
include_directories : [
'../'
],
dependencies : [
],
link_with: rse_utilities_lib,
install : true
)
+37
View File
@@ -0,0 +1,37 @@
/**
* @file events_context.h
* @author Piotr Krygier (piotrkrygier@everyonencancode.xyz)
* @brief Events context for Red Scarf Engine
* @version 0.1
* @date 2026-03-02
*
* @copyright Copyright (c) 2026
*
*/
#ifndef EVENT_CONTEXT_H_
#define EVENT_CONTEXT_H_
#include "SDL3/SDL_mouse.h"
#include "utilities/commons.h"
struct mouse_event_data_t
{
float x_pos;
float y_pos;
SDL_MouseButtonFlags mouse_buttons;
};
typedef rse_err_t (*rse_event_handler_t)(void*);
struct event_handlers
{
rse_event_handler_t mouse_event;
};
struct events_context
{
struct event_handlers event_handlers;
};
#endif /* EVENT_CONTEXT_H_ */
+81
View File
@@ -0,0 +1,81 @@
/**
* @file events_manager.c
* @author Piotr Krygier (piotrkrygier@everyonencancode.xyz)
* @brief Events manager for Red Scarf Engine
* @version 0.1
* @date 2026-03-02
*
* @copyright Copyright (c) 2026
*
*/
#include "events_manager.h"
#include "SDL3/SDL_events.h"
#include "SDL3/SDL_mouse.h"
#include "events_context.h"
#include "utilities/commons.h"
#include "utilities/errors_common.h"
static rse_err_t default_event(void* args)
{
(void)args;
return RSE_ERROR_NO_ERROR;
}
static rse_err_t quit_event(void)
{
return RSE_ERROR_NO_ERROR;
}
static rse_err_t mouse_event(struct events_context* events_context)
{
struct mouse_event_data_t mouse_data = {0};
mouse_data.mouse_buttons = SDL_GetMouseState(&mouse_data.x_pos, &mouse_data.y_pos);
return events_context->event_handlers.mouse_event((void*)&mouse_data);
}
rse_err_t events_init(struct events_context* events_context)
{
events_context->event_handlers.mouse_event = default_event;
return RSE_ERROR_NO_ERROR;
}
rse_err_t events_set_event_handler(struct events_context* events_context,
enum RSE_EVENT_TYPE event_type,
rse_event_handler_t event_handler)
{
switch (event_type) {
case RSE_EVENT_TYPE_MOUSE:
events_context->event_handlers.mouse_event = event_handler;
break;
default:
SDL_LogCritical(SDL_LOG_CATEGORY_APPLICATION, "Invalid event type provided");
return RSE_ERROR_INVALID_PARAM;
}
return RSE_ERROR_NO_ERROR;
}
rse_err_t events_run(struct events_context* context)
{
SDL_Event event;
rse_err_t status = RSE_ERROR_NO_ERROR;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_EVENT_QUIT:
STATUS_CHECK(quit_event());
break;
case SDL_EVENT_MOUSE_BUTTON_DOWN:
STATUS_CHECK(mouse_event(context));
break;
}
}
return status;
}
+20
View File
@@ -0,0 +1,20 @@
/**
* @file events_manager.h
* @author Piotr Krygier (piotrkrygier@everyonencancode.xyz)
* @brief Events manager for Red Scarf Engine
* @version 0.1
* @date 2026-03-02
*
* @copyright Copyright (c) 2026
*
*/
#ifndef EVENTS_MANAGER_H_
#define EVENTS_MANAGER_H_
enum RSE_EVENT_TYPE {
RSE_EVENT_TYPE_MOUSE,
};
#endif /* EVENTS_MANAGER_H_ */