aboutsummaryrefslogtreecommitdiff
path: root/archive/hgehelp/hgeresource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archive/hgehelp/hgeresource.cpp')
-rw-r--r--archive/hgehelp/hgeresource.cpp254
1 files changed, 254 insertions, 0 deletions
diff --git a/archive/hgehelp/hgeresource.cpp b/archive/hgehelp/hgeresource.cpp
new file mode 100644
index 0000000..e681369
--- /dev/null
+++ b/archive/hgehelp/hgeresource.cpp
@@ -0,0 +1,254 @@
+/*
+** 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;i<RESTYPES;i++) res[i]=0;
+ _parse_script(scriptname);
+}
+
+hgeResourceManager::~hgeResourceManager()
+{
+ _remove_all();
+ hge->Release();
+}
+
+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;i<RESTYPES;i++)
+ {
+ rc=res[i];
+ while(rc)
+ {
+ rc->Free();
+ 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;i<RESTYPES;i++)
+ {
+ rc=res[i];
+ while(rc)
+ {
+ if(!groupid || groupid==rc->resgroup) bResult=bResult && (rc->Get(this)!=0);
+ rc=rc->next;
+ }
+ }
+
+ return bResult;
+}
+
+void hgeResourceManager::Purge(int groupid)
+{
+ int i;
+ ResDesc *rc;
+
+ for(i=0;i<RESTYPES;i++)
+ {
+ rc=res[i];
+ while(rc)
+ {
+ if(!groupid || groupid==rc->resgroup) 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;
+}