68 lines
1.8 KiB
C
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
|
|
); |