#ifndef OBJECT_STORE_H #define OBJECT_STORE_H #include "Renderer.h" #include "SDL_events.h" #include "engine_build_config.h" #include "reusable_ids.h" #include #ifdef __cplusplus extern "C" { #endif // !__cplusplus typedef void (*EventHandlerPtr)(void *object, const SDL_Event *event); typedef void (*UpdateFuncPtr)(void *object, float 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, float 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 DEBUG_ENGINE void print_objects(ObjectStore *os); #endif // !DEBUG_ENGINE #ifdef __cplusplus } #endif // !__cplusplus #endif // !OBJECT_STORE_H