/* ** Haaf's Game Engine 1.7 ** Copyright (C) 2003-2007, Relish Games ** hge.relishgames.com ** ** hgeResourceManager helper class implementation */ #include "hgeresource.h" #include "parser.h" #include "resources.h" HGE *hgeResourceManager::hge=0; hgeResourceManager::hgeResourceManager(const char *scriptname) { hge=hgeCreate(HGE_VERSION); for(int i=0;iRelease(); } void hgeResourceManager::_parse_script(const char *scriptname) { ResDesc *rc, *rcnext; if(scriptname) { RScript::Parse(this, NULL, scriptname, NULL); rc=res[RES_SCRIPT]; while(rc) { rc->Free(); rcnext=rc->next; delete rc; rc=rcnext; } res[RES_SCRIPT]=0; } } void hgeResourceManager::_remove_all() { int i; ResDesc *rc, *rcnext; for(i=0;iFree(); rcnext=rc->next; delete rc; rc=rcnext; } res[i]=0; } } void hgeResourceManager::ChangeScript(const char *scriptname) { _remove_all(); _parse_script(scriptname); } bool hgeResourceManager::Precache(int groupid) { int i; ResDesc *rc; bool bResult=true; for(i=0;iresgroup) bResult=bResult && (rc->Get(this)!=0); rc=rc->next; } } return bResult; } void hgeResourceManager::Purge(int groupid) { int i; ResDesc *rc; for(i=0;iresgroup) rc->Free(); rc=rc->next; } } } void* hgeResourceManager::GetResource(const char *name, int resgroup) { void *reshandle; RResource *resource; ResDesc *Res=FindRes(this, RES_RESOURCE, name); if(Res) return (void *)Res->Get(this); else { reshandle=hge->Resource_Load(name); if(reshandle) { resource=new RResource(); resource->handle=(size_t)reshandle; resource->resgroup=resgroup; strcpy(resource->name, name); strcpy(resource->filename, name); AddRes(this, RES_RESOURCE, resource); return reshandle; } } return 0; } HTEXTURE hgeResourceManager::GetTexture(const char *name, int resgroup) { HTEXTURE reshandle; RTexture *resource; ResDesc *Res=FindRes(this, RES_TEXTURE, name); if(Res) return (HTEXTURE)Res->Get(this); else { reshandle=hge->Texture_Load(name); if(reshandle) { resource=new RTexture(); resource->handle=reshandle; resource->resgroup=resgroup; resource->mipmap=false; strcpy(resource->name, name); strcpy(resource->filename, name); AddRes(this, RES_TEXTURE, resource); return reshandle; } } return 0; } HEFFECT hgeResourceManager::GetEffect(const char *name, int resgroup) { HEFFECT reshandle; REffect *resource; ResDesc *Res=FindRes(this, RES_EFFECT, name); if(Res) return (HEFFECT)Res->Get(this); else { reshandle=hge->Effect_Load(name); if(reshandle) { resource=new REffect(); resource->handle=reshandle; resource->resgroup=resgroup; strcpy(resource->name, name); strcpy(resource->filename, name); AddRes(this, RES_EFFECT, resource); return reshandle; } } return 0; } HTARGET hgeResourceManager::GetTarget(const char *name) { ResDesc *Res=FindRes(this, RES_TARGET, name); if(Res) return (HTARGET)Res->Get(this); else return 0; } hgeSprite* hgeResourceManager::GetSprite(const char *name) { ResDesc *Res=FindRes(this, RES_SPRITE, name); if(Res) return (hgeSprite *)Res->Get(this); else return 0; } hgeAnimation* hgeResourceManager::GetAnimation(const char *name) { ResDesc *Res=FindRes(this, RES_ANIMATION, name); if(Res) return (hgeAnimation *)Res->Get(this); else return 0; } hgeFont* hgeResourceManager::GetFont(const char *name) { ResDesc *Res=FindRes(this, RES_FONT, name); if(Res) return (hgeFont *)Res->Get(this); else return 0; } hgeParticleSystem* hgeResourceManager::GetParticleSystem(const char *name) { ResDesc *Res=FindRes(this, RES_PARTICLE, name); if(Res) return (hgeParticleSystem *)Res->Get(this); else return 0; } hgeDistortionMesh* hgeResourceManager::GetDistortionMesh(const char *name) { ResDesc *Res=FindRes(this, RES_DISTORT, name); if(Res) return (hgeDistortionMesh *)Res->Get(this); else return 0; } hgeStringTable* hgeResourceManager::GetStringTable(const char *name, int resgroup) { hgeStringTable *strtable; RStringTable *resource; ResDesc *Res=FindRes(this, RES_STRTABLE, name); if(Res) return (hgeStringTable*)Res->Get(this); else { strtable=new hgeStringTable(name); if(strtable) { resource=new RStringTable(); resource->handle=(size_t)strtable; resource->resgroup=resgroup; strcpy(resource->name, name); strcpy(resource->filename, name); AddRes(this, RES_STRTABLE, resource); return strtable; } } return 0; }