kettek2/wiki/games/newsboy/Newsboy_0x00/engine/Resource.h

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