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
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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 3 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 QDENGINE_QDCORE_QD_RESOURCE_H
#define QDENGINE_QDCORE_QD_RESOURCE_H
#include "common/path.h"
//! Базовый класс для игровых ресурсов.
/**
Анимации, звуки и т.д.
*/
namespace QDEngine {
class qdResource {
public:
//! Форматы файлов.
enum file_format_t {
//! анимация - .qda
RES_ANIMATION,
//! спрайт - .tga
RES_SPRITE,
//! звук - .wav
RES_SOUND,
//! неопознанный формат
RES_UNKNOWN
};
qdResource();
qdResource(const qdResource &res);
virtual ~qdResource();
qdResource &operator = (const qdResource &res);
//! Загружает в память данные ресурса.
virtual bool load_resource() = 0;
//! Выгружает из памяти данные ресурса.
virtual bool free_resource() = 0;
//! Устанавливает имя файла, в котором хранятся данные ресурса.
virtual void set_resource_file(const Common::Path file_name) = 0;
//! Возвращает имя файла, в котором хранятся данные ресурса.
/**
Если оно не задано, должна возвращаеть NULL.
*/
virtual const Common::Path resource_file() const = 0;
//! Возвращает true, если данные ресурса загружены в память.
bool is_resource_loaded() const {
return _is_loaded;
}
static file_format_t file_format(const Common::Path file_name);
#ifdef __QD_DEBUG_ENABLE__
virtual uint32 resource_data_size() const = 0;
#endif
protected:
//! Устанавливает или скидывает флаг, показывающий что данные ресурса загружены в память.
void toggle_resource_status(bool st = true) {
_is_loaded = st;
}
private:
//! Равно true, если данные ресурса загружены в память.
bool _is_loaded;
};
#ifdef __QD_DEBUG_ENABLE__
class qdResourceInfo {
public:
qdResourceInfo(const qdResource *res = NULL, const qdNamedObject *owner = NULL);
qdResourceInfo(const qdResourceInfo &inf) : _resource(inf._resource), _data_size(inf._data_size), _resource_owner(inf._resource_owner) { }
~qdResourceInfo();
qdResourceInfo &operator = (const qdResourceInfo &inf) {
if (this == &inf) return *this;
_resource = inf._resource;
_resource_owner = inf._resource_owner;
_data_size = inf._data_size;
return *this;
}
bool operator < (const qdResourceInfo &inf) const {
return _data_size < inf._data_size;
}
uint32 data_size() const {
return _data_size;
}
qdResource::file_format_t file_format() const;
private:
uint32 _data_size;
const qdResource *_resource;
const qdNamedObject *_resource_owner;
};
typedef Std::vector<qdResourceInfo> qdResourceInfoContainer;
#endif
} // namespace QDEngine
#endif // QDENGINE_QDCORE_QD_RESOURCE_H
|