Dawn/src/engine/event.h

68 lines
1.8 KiB
C

// Copyright (c) 2022 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "../libs.h"
#include "../assert/assert.h"
#include "../util/array.h"
#define EVENT_LISTENER_COUNT_MAX 128
typedef uint8_t event_t;
typedef bool eventcallback_t(
void *user, event_t event, void *args[], int32_t argc
);
typedef struct {
void *user;
event_t event;
eventcallback_t *callback;
} eventlistener_t;
typedef struct {
eventlistener_t listeners[EVENT_LISTENER_COUNT_MAX];
} eventmanager_t;
/**
* Initialize the event manager.
*
* @param manager Event manager to initialize.
*/
void eventManagerInit(eventmanager_t *manager);
/**
* Subscribe to an event on a given event manager.
*
* @param man Event manager to subscribe to.
* @param event Event to subscribe to.
* @param user Any custom user data to provide to the event callback.
* @param callback Callback to fire when the event is triggered.
* @return The event listener that was subscribed to.
*/
eventlistener_t * eventManagerSubscribe(
eventmanager_t *man, event_t event, void *user, eventcallback_t *callback
);
/**
* Unsubscribe an event listener that was previously subscribed.
*
* @param listener Listener to unsubscribe.
*/
void eventManagerUnsubscribe(eventmanager_t *man, eventlistener_t *listener);
/**
* Trigger a specific event on the event manager.
*
* @param manager Manager to trigger the event on.
* @param event Event to trigger
* @param args Array of pointers for event arguments.
* @param argc Count of event arguments.
* @return True if no events are subscribed, otherwise only returns true if all
* event listeners also return true.
*/
bool eventManagerTrigger(
eventmanager_t *manager, event_t event, void *args[], int32_t argc
);