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:
@@ -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_ */
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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_ */
|
||||
Reference in New Issue
Block a user