source: nrEngine/src/Resource.cpp @ 35

Revision 35, 4.8 KB checked in by art, 12 years ago (diff)

Big changes in resource managment system. Interface functions were renamed.
Resource loading is now done throughthe resource and not through the loader.

Line 
1/***************************************************************************
2 *                                                                         *
3 *   (c) Art Tevs, MPI Informatik Saarbruecken                             *
4 *       mailto: <tevs@mpi-sb.mpg.de>                                      *
5 *                                                                         *
6 *   This program is free software; you can redistribute it and/or modify  *
7 *   it under the terms of the GNU General Public License as published by  *
8 *   the Free Software Foundation; either version 2 of the License, or     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 ***************************************************************************/
12
13
14//----------------------------------------------------------------------------------
15// Includes
16//----------------------------------------------------------------------------------
17#include "Resource.h"
18#include "Exception.h"
19#include "Log.h"
20
21namespace nrEngine {
22
23        //----------------------------------------------------------------------------------
24        IResource::IResource(const std::string& resType)
25        {
26                // setup default data
27                mResIsLoaded = false;
28                mResHandle = 0;
29                mResIsEmpty = false;
30                mResDataSize = sizeof(*this);
31                setResourceType(resType);
32        }
33
34        //----------------------------------------------------------------------------------
35        IResource::~IResource()
36        {
37       
38        }
39
40        //----------------------------------------------------------------------------------
41        Result IResource::unload()
42        {
43                // check if resource is loaded
44                if (isResourceLoaded())
45                {
46                        // unload resource
47                        Result ret = unloadResource();
48
49                        // if ok, then inform resource manager, that we are unloaded now
50                        if (ret == OK)
51                                Engine::sResourceManager()->notifyUnloaded(this);
52                        else
53                                return ret;
54                }
55                return OK;
56        }
57       
58        //----------------------------------------------------------------------------------
59        Result IResource::reload(PropertyList* params)
60        {
61                // if resource is loaded, then unload it first
62                if (isResourceLoaded())
63                {
64                        Result ret = unload();
65                        if (ret != OK) return ret;
66                }
67                       
68                // check if resource is loaded
69                if (!isResourceLoaded())
70                {
71                        // unload resource
72                        Result ret = reloadResource(params);
73
74                        // if ok, then inform resource manager, that we are reloaded now
75                        if (ret == OK)
76                                Engine::sResourceManager()->notifyLoaded(this);
77                        else
78                                return ret;
79                }
80                return OK;
81        }
82       
83        //----------------------------------------------------------------------------------
84        Result IResource::remove()
85        {
86                // unload resource first
87                unload();
88
89                // remove resource in the loader
90                return mResLoader->remove(getSharedPtrFromThis());
91        }
92
93#if 0
94        //----------------------------------------------------------------------------------
95        Result IResource::unloadResThroughLoader()
96        {
97                // check for valid loader
98                if (mResLoader == NULL)
99                {
100                        char msg[128];
101                        sprintf(msg, "Resource %s does not get valid loader!", getResName().c_str());
102                        NR_EXCEPT(RES_LOADER_NOT_EXISTS, msg, "IResource::~IResource()");
103                }
104                return mResLoader->unload(getSharedPtrFromThis());
105        }
106
107        //----------------------------------------------------------------------------------
108        Result IResource::reloadResThroughLoader()
109        {
110                // check for valid loader
111                if (mResLoader == NULL)
112                {
113                        char msg[128];
114                        sprintf(msg, "Resource %s does not get valid loader!", getResName().c_str());
115                        NR_EXCEPT(RES_LOADER_NOT_EXISTS, msg, "IResource::~IResource()");
116                }
117                return mResLoader->reload(getSharedPtrFromThis());
118        }
119       
120        //----------------------------------------------------------------------------------
121        Result IResource::removeResThroughLoader()
122        {
123                // check for valid loader
124                if (mResLoader == NULL)
125                {
126                        char msg[128];
127                        sprintf(msg, "Resource %s does not get valid loader!", getResName().c_str());
128                        NR_EXCEPT(RES_LOADER_NOT_EXISTS, msg, "IResource::~IResource()");
129                }
130                return mResLoader->remove(getSharedPtrFromThis());
131        }
132#endif 
133        //----------------------------------------------------------------------------------
134        void IResource::addResourceFilename(const std::string& filename)
135        {
136                // first check if such a filename already exists
137                std::list<std::string>::iterator it = std::find(mResFileNames.begin(), mResFileNames.end(), filename);
138                if (it == mResFileNames.end())
139                        mResFileNames.push_back(filename);
140        }
141       
142        //----------------------------------------------------------------------------------
143        void IResource::addResourceFilename(const std::list<std::string>& flist)
144        {
145                std::list<std::string>::const_iterator it = flist.begin();
146                for (; it != flist.end(); it++)
147                        addResourceFilename(*it);
148        }
149
150        //----------------------------------------------------------------------------------
151        void IResource::setResourceFilename(const std::list<std::string>& flist)
152        {
153                mResFileNames = flist;
154        }
155
156};
157
Note: See TracBrowser for help on using the repository browser.