44 lines
1.5 KiB
C
44 lines
1.5 KiB
C
#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
|