#ifndef RESOURCE_H #define RESOURCE_H #include "IdIndex.h" /* This file defines the Resource "framework" - a system that consists of: ResourceManager - loading of Data such as sprites, animations, sounds, etc. - holds an ID reference Table of names to IDs. - efficient data usage, as each resource is only loaded once by name - efficient computation, as resources are referred to via int after queried with name */ struct ResourcesManager { struct IdIndex *index; struct Resources *resources; }; struct ResourcesManager *newResourceManager(); #define UNHANDLED 0 #define SPRITE 1 #define ANIMATION 2 struct Resources { int id; // id, usually to represent type of data stored (SPRITE, etc.) struct IdIndex index; int length; // size, in terms of elements, of *data ptr array void **data; // void pointer to target data void *(*loadResource_func)(char *filename); // user-specified function for loading the Resource. Returns void pointer to their data. int (*freeResource_func)(void *data); }; // TODO: change name to const struct Resources *newResources(int id, int length); int freeResources(struct Resources *resources); int addResource(struct Resources *res, char *name, void *data); void *getResource(struct Resources *res, char *name); void *getResourceById(struct Resources *res, int id); int getResourceId(struct Resources *res, char *name); int loadResource(struct Resources *res, char *filename); int freeResource(struct Resources *res, char *name); int freeResourceById(struct Resources *res, int id); #endif