File: qd_resource.h

package info (click to toggle)
scummvm 2.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 450,580 kB
  • sloc: cpp: 4,299,825; asm: 28,322; python: 12,901; sh: 11,302; java: 9,289; xml: 7,895; perl: 2,639; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (130 lines) | stat: -rw-r--r-- 3,795 bytes parent folder | download | duplicates (2)
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