22 #ifndef QDENGINE_QDCORE_QD_ANIMATION_H 23 #define QDENGINE_QDCORE_QD_ANIMATION_H 25 #include "qdengine/parser/xml_fwd.h" 26 #include "qdengine/system/graphics/gr_screen_region.h" 27 #include "qdengine/system/graphics/gr_tile_animation.h" 29 #include "qdengine/qdcore/qd_resource.h" 30 #include "qdengine/qdcore/qd_animation_frame.h" 31 #include "qdengine/qdcore/qd_named_object.h" 37 class qdAnimationInfo;
39 const int QD_ANIMATION_FLAG_REFERENCE = 0x01;
40 const int QD_ANIMATION_FLAG_LOOP = 0x04;
41 const int QD_ANIMATION_FLAG_FLIP_HORIZONTAL = 0x08;
42 const int QD_ANIMATION_FLAG_FLIP_VERTICAL = 0x10;
43 const int QD_ANIMATION_FLAG_BLACK_FON = 0x20;
44 const int QD_ANIMATION_FLAG_SUPPRESS_ALPHA = 0x40;
45 const int QD_ANIMATION_FLAG_CROP = 0x80;
46 const int QD_ANIMATION_FLAG_COMPRESS = 0x100;
47 const int QD_ANIMATION_FLAG_TILE_COMPRESS = 0x200;
49 enum qdAnimationStatus {
50 QD_ANIMATION_STOPPED = 0,
53 QD_ANIMATION_END_PLAYING
66 return QD_NAMED_OBJECT_ANIMATION;
73 void set_cur_frame(
int number);
74 int get_cur_frame_number()
const;
79 int num_frames()
const {
83 float length()
const {
86 float cur_time()
const {
90 void set_time(
float tm) {
94 float cur_time_rel()
const {
96 return _cur_time / _length;
99 void set_time_rel(
float tm) {
100 if (tm < 0.0f) tm = 0.0f;
101 if (tm > 0.99f) tm = 0.99f;
102 _cur_time = _length * tm;
104 void advance_time(
float tm);
114 int picture_size_x()
const;
115 int picture_size_y()
const;
117 bool is_playing()
const {
118 return (_status == QD_ANIMATION_PLAYING ||
119 _status == QD_ANIMATION_END_PLAYING);
125 bool is_finished()
const {
128 bool need_stop()
const {
129 return _status == QD_ANIMATION_END_PLAYING;
133 _status = QD_ANIMATION_PLAYING;
134 _is_finished =
false;
138 _status = QD_ANIMATION_STOPPED;
142 _status = QD_ANIMATION_PAUSED;
145 _status = QD_ANIMATION_PLAYING;
148 void quant(
float dt);
150 void redraw(
int x,
int y,
int z,
int mode = 0)
const;
151 void redraw(
int x,
int y,
int z,
float scale,
int mode = 0)
const;
153 void redraw_rot(
int x,
int y,
int z,
float angle,
int mode = 0)
const;
154 void redraw_rot(
int x,
int y,
int z,
float angle,
const Vect2f &scale,
int mode = 0)
const;
156 void draw_mask(
int x,
int y,
int z, uint32 mask_color,
int mask_alpha,
int mode = 0)
const;
157 void draw_mask(
int x,
int y,
int z, uint32 mask_color,
int mask_alpha,
float scale,
int mode = 0)
const;
159 void draw_mask_rot(
int x,
int y,
int z,
float angle, uint32 mask_color,
int mask_alpha,
int mode = 0)
const;
160 void draw_mask_rot(
int x,
int y,
int z,
float angle, uint32 mask_color,
int mask_alpha,
const Vect2f &scale,
int mode = 0)
const;
162 void draw_contour(
int x,
int y, uint32 color)
const;
163 void draw_contour(
int x,
int y, uint32 color,
float scale)
const;
165 bool hit(
int x,
int y)
const;
166 bool hit(
int x,
int y,
float scale)
const;
169 bool remove_frame(
int number);
170 bool remove_frame_range(
int number0,
int number1);
171 bool reverse_frame_range(
int number0,
int number1);
173 void load_script(
const xml::tag *p);
183 bool load_resources();
184 void free_resources();
186 bool scale(
float coeff_x,
float coeff_y);
195 bool tileCompress(grTileCompressionMethod method = TILE_UNCOMPRESSED,
int tolerance = 0);
203 if (p->
check_flag(QD_ANIMATION_FLAG_REFERENCE) && p->_parent ==
this)
return true;
209 _frames_ptr = &_frames;
213 bool is_empty()
const {
214 return (_frames_ptr->
empty());
234 qda_set_file(file_name);
238 if (qda_file().empty()) {
240 if (_frames.
front()->has_file())
241 return _frames.
front()->file();
249 #ifdef __QD_DEBUG_ENABLE__ 250 uint32 resource_data_size()
const;
258 bool add_scale(
float value);
259 bool create_scaled_frames();
262 if (
check_flag(QD_ANIMATION_FLAG_REFERENCE) && _parent)
return _parent->_scales;
265 void clear_scales() {
270 if (
check_flag(QD_ANIMATION_FLAG_REFERENCE) && _parent)
271 return _parent->_tileAnimation;
273 return _tileAnimation;
276 static Common::String flag2str(
int fl,
bool truncate =
false,
bool icon =
false);
290 float _playback_speed;
310 int get_scale_index(
float &scale_value)
const;
318 #endif // QDENGINE_QDCORE_QD_ANIMATION_H
Кадр анимации.
Definition: qd_animation_frame.h:31
Поименованный объект.
Definition: qd_named_object.h:70
grScreenRegion screen_region(int mode=0, float scale=1.0f) const
Возвращает область экрана, занимаемую анимацией.
Информация об анимации.
Definition: qd_animation_info.h:34
void clear()
Definition: array.h:320
Definition: qd_resource.h:34
int named_object_type() const
Возвращает тип объекта.
Definition: qd_animation.h:65
bool check_flag(int fl) const
Возвращает true, если установлен флаг fl.
Definition: qd_named_object.h:99
XML тег.
Definition: xml_tag.h:33
Базовый класс для игровых ресурсов.
Definition: console.h:28
Анимация.
Definition: qd_animation.h:57
bool load_resource()
Загружает в память данные ресурса.
t_T & front()
Definition: list.h:157
bool save_data(Common::WriteStream &fh) const
Запись данных в сэйв.
bool free_resource()
Выгружает из памяти данные ресурса.
Прямоугольная область на экране.
Definition: gr_screen_region.h:31
Definition: gr_tile_animation.h:43
bool load_data(Common::SeekableReadStream &fh, int save_version)
Загрузка данных из сэйва.
bool empty() const
Definition: list.h:219
const Common::Path resource_file() const
Возвращает имя файла, в котором хранится анимация.
Definition: qd_animation.h:237
void set_resource_file(const Common::Path file_name)
Устанавливает имя файла, в котором хранятся данные ресурса.
Definition: qd_animation.h:233