File: qd_interface_element_state_mode.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 (156 lines) | stat: -rw-r--r-- 5,228 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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/* 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_INTERFACE_ELEMENT_STATE_MODE_H
#define QDENGINE_QDCORE_QD_INTERFACE_ELEMENT_STATE_MODE_H

#include "common/path.h"
#include "qdengine/qdcore/qd_contour.h"

namespace QDEngine {

//! Событие, привязанное к состоянию интерфейсного элемента.
/**
Включает анимацию и звук при выполнении некоторых условий (например при наведении
мыши на элемент интерфейса.
*/
class qdInterfaceElementStateMode {
public:
	qdInterfaceElementStateMode();
	qdInterfaceElementStateMode(const qdInterfaceElementStateMode &ev);
	~qdInterfaceElementStateMode();

	qdInterfaceElementStateMode &operator = (const qdInterfaceElementStateMode &ev);

	//! Устанавливает имя файла звука.
	/**
	Если надо убрать звук - передать NULL в качестве имени файла.
	*/
	void set_sound_file(const Common::Path name);
	//! Возвращает имя файла звука.
	const Common::Path sound_file() const {
		return _sound_file;
	}
	//! Устанавливает звук события.
	void set_sound(const qdSound *p) {
		_sound = p;
	}
	//! Возвращает звук события.
	const qdSound *sound() const {
		return _sound;
	}
	//! Возвращает true, если к событию привязан звук.
	bool has_sound() const {
		return !_sound_file.empty();
	}

	//! Устанавливает имя файла для анимации.
	/**
	Если надо убрать анимацию - передать NULL в качестве имени файла.
	*/
	void set_animation_file(const Common::Path name);
	//! Возвращает имя файла для анимации.
	const Common::Path animation_file() const {
		return _animation_file;
	}
	//! Возвращает флаги анимации.
	int animation_flags() const {
		return _animation_flags;
	}

	//! Устанавливает флаг анимации.
	void set_animation_flag(int fl) {
		_animation_flags |= fl;
	}
	//! Скидывает флаг анимации.
	void drop_animation_flag(int fl) {
		_animation_flags &= ~fl;
	}
	//! Возвращает true, если для анимации установлен флаг fl.
	bool check_animation_flag(int fl) const {
		if (_animation_flags & fl) return true;
		return false;
	}

	//! Устанавливает указатель на анимацию события.
	void set_animation(const qdAnimation *p) {
		_animation = p;
	}
	//! Возвращает указатель на анимацию события.
	const qdAnimation *animation() const {
		return _animation;
	}
	//! Возвращает true, если к состоянию привязана анимация.
	bool has_animation() const {
		return !_animation_file.empty();
	}
	//! Возвращает true, если у состояния задан контур.
	bool has_contour() const {
		return !_contour.is_contour_empty();
	}
	//! Возвращает true, если точка с экранными координатами (x,у) попадает внутрь контура.
	bool hit_test(int x, int y) const {
		return _contour.is_inside(Vect2s(x, y));
	}

	//! Записывает контур в cnt.
	bool get_contour(qdContour &cnt) const {
		cnt = _contour;
		return true;
	}
	//! Устанавливает контур.
	bool set_contour(const qdContour &cnt) {
		_contour = cnt;
		return true;
	}

	//! Запись данных в скрипт.
	/**
	type_id - тип события
	*/
	bool save_script(Common::WriteStream &fh, int type_id = 0, int indent = 0) const;
	//! Загрузка данных из скрипта.
	bool load_script(const xml::tag *p);

private:

	//! Имя файла звука.
	Common::Path _sound_file;

	//! Звук, включаемый событием.
	const qdSound *_sound;

	//! Имя файла для анимации
	Common::Path _animation_file;
	//! Флаги для анимации.
	int _animation_flags;

	//! Анимация, включаемая событием.
	const qdAnimation *_animation;

	//! Контур.
	qdContour _contour;
};

} // namespace QDEngine

#endif // QDENGINE_QDCORE_QD_INTERFACE_ELEMENT_STATE_MODE_H