1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
/*
Copyright (c) 2008 Robin Vobruba <hoijui.quaero@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _RESOURCEHANDLER_H
#define _RESOURCEHANDLER_H
#include <vector>
#include <map>
#include <boost/noncopyable.hpp>
#include "creg/creg_cond.h"
#include "Resource.h"
class CResourceMapAnalyzer;
class CResourceHandler : public boost::noncopyable
{
CR_DECLARE(CResourceHandler);
public:
static CResourceHandler* GetInstance();
static void FreeInstance();
/**
* @brief add a resource
* @param resource the resource to add
* @return the id of the resource just added
*
* Adds a CResource to the pool and retun its resourceId.
*/
int AddResource(const CResource& resource);
/**
* @brief resource
* @param resourceId index to fetch
* @return the searched resource
*
* Accesses a CResource instance at a given index
*/
const CResource* GetResource(int resourceId) const;
/**
* @brief resource by name
* @param resourceName name of the resource to fetch
* @return the searched resource
*
* Accesses a CResource instance by name
*/
const CResource* GetResourceByName(const std::string& resourceName) const;
/**
* @brief resource index by name
* @param resourceName name of the resource to fetch
* @return index of the searched resource
*
* Accesses a resource by name
*/
int GetResourceId(const std::string& resourceName) const;
/**
* @brief resource map
* @param resourceId index of the resource whichs map to fetch
* @return the resource values for all the pixels of the map
*
* Returns a resource map by index.
*/
const unsigned char* GetResourceMap(int resourceId) const;
/**
* @brief resource map size
* @param resourceId index of the resource whichs map size to fetch
* @return the number of values in the resource map
*
* Returns the resource map size by index.
*/
size_t GetResourceMapSize(int resourceId) const;
/**
* @brief resource map width
* @param resourceId index of the resource whichs map width to fetch
* @return width of values in the resource map
*
* Returns the resource map width by index.
*/
size_t GetResourceMapWidth(int resourceId) const;
/**
* @brief resource map height
* @param resourceId index of the resource whichs map height to fetch
* @return height of values in the resource map
*
* Returns the resource map height by index.
*/
size_t GetResourceMapHeight(int resourceId) const;
/**
* @brief resource map analyzer
* @param resourceId index of the resource whichs map analyzer to fetch
* @return resource map analyzer
*
* Returns the resource map analyzer by index.
*/
const CResourceMapAnalyzer* GetResourceMapAnalyzer(int resourceId);
size_t GetNumResources() const;
// bool IsMetal(int resourceId) const;
// bool IsEnergy(int resourceId) const;
int GetMetalId() const;
int GetEnergyId() const;
bool IsValidId(int resourceId) const;
private:
static CResourceHandler* instance;
CResourceHandler();
~CResourceHandler();
std::vector<CResource> resources;
std::map<int, CResourceMapAnalyzer*> resourceMapAnalyzers;
int metalResourceId;
int energyResourceId;
};
#define resourceHandler CResourceHandler::GetInstance()
#endif // _RESOURCEHANDLER_H
|