56 lines
1.4 KiB
C
56 lines
1.4 KiB
C
#ifndef OBJECT_STORE_H
|
|
#define OBJECT_STORE_H
|
|
|
|
#include "Renderer.h"
|
|
#include "SDL_events.h"
|
|
#include "aliases.h"
|
|
#include "reusable_ids.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // !__cplusplus
|
|
|
|
typedef void (*EventHandlerPtr)(void *object, const SDL_Event *event);
|
|
typedef void (*UpdateFuncPtr)(void *object, f32 delta);
|
|
typedef void (*RenderFuncPtr)(void *object);
|
|
|
|
typedef struct object_store ObjectStore;
|
|
|
|
/**
|
|
* Attempts to allocate an ObjectStore object on the heap.
|
|
*
|
|
* Returns the pointer to the object when it succeeds, or NULL if it fails.
|
|
*/
|
|
ObjectStore *create_object_store();
|
|
|
|
/**
|
|
* Attempts to add an object to the store.
|
|
*
|
|
* Returns the ObjectID on success or an INVALID_ID in the case of failure.
|
|
*/
|
|
ObjectID add_object_to_store(ObjectStore *os, void *object, EventHandlerPtr eh,
|
|
UpdateFuncPtr uf, RenderFuncPtr rf);
|
|
|
|
/**
|
|
* Removes an object from the store using its ID.
|
|
*
|
|
* Does nothing if the ID is not valid.
|
|
*/
|
|
void remove_object_from_store(ObjectStore *os, ObjectID *id_ptr);
|
|
|
|
void handle_all_objects_events(ObjectStore *os, const SDL_Event *event);
|
|
void update_all_objects(ObjectStore *os, f32 delta);
|
|
void render_all_objects(ObjectStore *os);
|
|
|
|
/**
|
|
* Frees the memory allocated to the ObjectStore object and performs the
|
|
* necessary cleanup.
|
|
*/
|
|
void destroy_object_store(ObjectStore **os);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif // !__cplusplus
|
|
|
|
#endif // !OBJECT_STORE_H
|