ScummVM API documentation
qd_game_object_state.h
1/* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#ifndef QDENGINE_QDCORE_QD_GAME_OBJECT_STATE_H
23#define QDENGINE_QDCORE_QD_GAME_OBJECT_STATE_H
24
25#include "qdengine/parser/xml_fwd.h"
26#include "qdengine/qdcore/qd_contour.h"
27#include "qdengine/qdcore/qd_sound_info.h"
28#include "qdengine/qdcore/qd_animation_info.h"
29#include "qdengine/qdcore/qd_animation_set_info.h"
30#include "qdengine/qdcore/qd_conditional_object.h"
31#include "qdengine/qdcore/qd_named_object.h"
32#include "qdengine/qdcore/qd_coords_animation.h"
33#include "qdengine/qdcore/qd_camera_mode.h"
34#include "qdengine/qdcore/qd_sound_handle.h"
35#include "qdengine/qdcore/qd_screen_text.h"
36#include "qdengine/qdcore/qd_grid_zone.h"
37#include "qdengine/system/sound/snd_sound.h"
38
39namespace QDEngine {
40
42public:
43 qdScreenTransform(float angle = 0.f, const Vect2f &scale = Vect2f(1.f, 1.f)) : _angle(angle), _scale(scale) { }
44
45 bool operator == (const qdScreenTransform &trans) const;
46 bool operator != (const qdScreenTransform &trans) const {
47 return !(*this == trans);
48 }
49 bool operator()() const {
50 return _angle != 0.f || _scale.x != 1.f || _scale.y != 1.f;
51 }
52
53 qdScreenTransform operator *(float value) const {
54 return qdScreenTransform(_angle *value, _scale *value);
55 }
56
57 qdScreenTransform &operator += (const qdScreenTransform &trans) {
58 _angle += trans._angle;
59 _scale += trans._scale;
60
61 return *this;
62 }
63
64 bool change(float dt, const qdScreenTransform &target_trans, const qdScreenTransform &speed);
65
66 float angle() const {
67 return _angle;
68 }
69 void set_angle(float angle) {
70 _angle = angle;
71 }
72
73 const Vect2f &scale() const {
74 return _scale;
75 }
76 void set_scale(const Vect2f &scale) {
77 _scale = scale;
78 }
79 bool has_scale() const {
80 return fabs(_scale.x - 1.f) > FLT_EPS || fabs(_scale.y - 1.f) > FLT_EPS;
81 }
82
83private:
84
85 float _angle;
86 Vect2f _scale;
87
88};
89
92public:
94 enum {
118
124
130
136
141
169 QD_OBJ_STATE_FLAG_FADE_IN = 0x4000000,
170 QD_OBJ_STATE_FLAG_FADE_OUT = 0x8000000,
171 };
172
181 };
182
183 enum {
184 CURSOR_UNASSIGNED = -1
185 };
186
187 qdGameObjectState(StateType tp);
188 qdGameObjectState(const qdGameObjectState &st);
189 virtual ~qdGameObjectState();
190
191 virtual qdGameObjectState &operator = (const qdGameObjectState &st);
192
193 int named_object_type() const {
194 return QD_NAMED_OBJECT_OBJ_STATE;
195 }
196
199 return &_coords_animation;
200 }
203 return &_coords_animation;
204 }
205
207 virtual bool load_script(const xml::tag *p) = 0;
209 virtual bool save_script(Common::WriteStream &fh, int indent = 0) const = 0;
210
212 bool init();
213
215 bool load_data(Common::SeekableReadStream &fh, int save_version);
218
220 virtual bool register_resources();
222 virtual bool unregister_resources();
224 virtual bool load_resources();
226 virtual bool free_resources();
227
230
232 const Vect2s &center_offset() const {
233 return _center_offset;
234 }
236 void set_center_offset(const Vect2s offs) {
237 _center_offset = offs;
238 }
239
241 void quant(float dt);
242
245 return _prev_state;
246 }
249 _prev_state = p;
250 }
251
254 return _state_type;
255 }
256
258 int mouse_cursor_ID() const {
259 return _mouse_cursor_id;
260 }
262
266 void set_mouse_cursor_ID(int id) {
267 _mouse_cursor_id = id;
268 }
270 bool has_mouse_cursor_ID() const {
271 return _mouse_cursor_id != CURSOR_UNASSIGNED;
272 }
273
275 const char *sound_name() const {
276 return _sound_info.name();
277 }
279 void set_sound_name(const char *p) {
280 _sound_info.set_name(p);
281 }
283 qdSound *sound() const;
285 bool has_sound() const {
286 if (sound_name()) return true;
287 else return false;
288 }
291 return &_sound_handle;
292 }
296 bool stop_sound() const;
298 bool set_sound_frequency(float frequency_coeff) const;
299 bool is_sound_finished() const;
300 bool is_sound_playing() const;
301
303 void set_sound_flag(int fl) {
304 _sound_info.set_flag(fl);
305 }
307 void drop_sound_flag(int fl) {
308 _sound_info.drop_flag(fl);
309 }
311 bool check_sound_flag(int fl) const {
312 return _sound_info.check_flag(fl);
313 }
314
316 virtual bool is_state_empty() const;
317
319 bool is_active() const;
321 bool is_default() const;
322
324 float activation_delay() const {
325 return _activation_delay;
326 }
328 void set_activation_delay(float tm) {
329 _activation_delay = tm;
330 }
333 _activation_timer = _activation_delay;
334 }
335
337 void start() {
338 _cur_time = 0.0f;
339 _is_sound_started = false;
340 }
341
343 float cur_time() const {
344 return _cur_time;
345 }
347 float work_time() const;
349 void set_work_time(float tm) {
350 _work_time = tm;
351 }
352
354 bool need_to_walk() const {
355 if (!_coords_animation.is_empty()
356 && _coords_animation.check_flag(QD_COORDS_ANM_OBJECT_START_FLAG))
357 return true;
358 else
359 return false;
360 }
361
362 virtual qdGameObjectState *clone() const = 0;
363
364 virtual float adjust_direction_angle(float angle) const {
365 return angle;
366 }
367
369 const Vect3f start_pos() const {
370 if (!_coords_animation.is_empty()) {
371 return _coords_animation.get_point(0)->dest_pos();
372 } else
373 return Vect3f(0, 0, 0);
374 }
376 float start_direction_angle() const {
377 if (!_coords_animation.is_empty()) {
378 return _coords_animation.get_point(0)->direction_angle();
379 } else
380 return -1.0f;
381 }
382
384 int reference_count() const {
385 return _reference_count;
386 }
389 _reference_count++;
390 }
393 if (_reference_count) _reference_count--;
394 }
395
397 bool has_text() const {
398 return (!_text_ID.empty() || !_short_text_ID.empty());
399 }
401 const char *text() const {
402 if (has_full_text()) return full_text();
403 else return short_text();
404 }
406 const char *full_text() const;
408 const char *short_text() const;
409
411 bool has_full_text() const {
412 return !_text_ID.empty();
413 }
415 bool has_short_text() const {
416 return !_short_text_ID.empty();
417 }
419 const char *full_text_ID() const {
420 return _text_ID.c_str();
421 }
423
426 void set_full_text_ID(const char *p) {
427 if (p) _text_ID = p;
428 else _text_ID.clear();
429 }
431 const char *short_text_ID() const {
432 return _short_text_ID.c_str();
433 }
435
438 void set_short_text_ID(const char *p) {
439 if (p) _short_text_ID = p;
440 else _short_text_ID.clear();
441 }
442
444 bool has_bound() const {
446 }
448 const Vect3f &bound() const {
449 return _bound;
450 }
452 float radius() const {
453 return _radius;
454 }
456 void set_bound(const Vect3f &b);
458 virtual bool auto_bound() {
459 return false;
460 }
461
463 void set_camera_mode(const qdCameraMode &mode) {
464 _camera_mode = mode;
465 }
467 const qdCameraMode &camera_mode() const {
468 return _camera_mode;
469 }
471 bool has_camera_mode() const {
472 return _camera_mode.camera_mode() != qdCameraMode::MODE_UNASSIGNED;
473 }
474
475 float rnd_move_radius() const {
476 return _rnd_move_radius;
477 }
478 void set_rnd_move_radius(float radius) {
479 _rnd_move_radius = radius;
480 }
481
482 float rnd_move_speed() const {
483 return _rnd_move_speed;
484 }
485 void set_rnd_move_speed(float speed) {
486 _rnd_move_speed = speed;
487 }
488
490 bool trigger_can_start() const;
491
492 bool forced_load() const {
494 }
495
496 float text_delay() const {
497 return _text_delay;
498 }
499 bool has_text_delay() const {
500 return _text_delay > FLT_EPS;
501 }
502 void set_text_delay(float delay) {
503 _text_delay = delay;
504 }
505
506 float sound_delay() const {
507 return _sound_delay;
508 }
509 bool has_sound_delay() const {
510 return _sound_delay > FLT_EPS;
511 }
512 void set_sound_delay(float delay) {
513 _sound_delay = delay;
514 }
515
516 int autosave_slot() const {
517 return _autosave_slot;
518 }
519 void set_autosave_slot(int slot) {
520 _autosave_slot = slot;
521 }
522
523 float fade_time() const {
524 return _fade_time;
525 }
526 void set_fade_time(float time) {
527 _fade_time = time;
528 }
529
530 uint32 shadow_color() const {
531 return _shadow_color;
532 }
533 int shadow_alpha() const {
534 return _shadow_alpha;
535 }
536
537 void set_shadow(uint32 color, int alpha) {
538 _shadow_color = color;
539 _shadow_alpha = alpha;
540 }
541
542 const qdScreenTextFormat &text_format(bool topic_mode = false) const {
543 if (_text_format.is_global_depend()) {
544 return (topic_mode && check_flag(QD_OBJ_STATE_FLAG_DIALOG_PHRASE)) ?
545 qdScreenTextFormat::global_topic_format() : qdScreenTextFormat::global_text_format();
546 }
547 return _text_format;
548 }
549 void set_text_format(const qdScreenTextFormat &text_format) {
550 _text_format = text_format;
551 }
552
553 bool has_transform() const {
554 return _transform() || _transform_speed();
555 }
556
557 const qdScreenTransform &transform() const {
558 return _transform;
559 }
560 void set_transform(const qdScreenTransform &tr) {
561 _transform = tr;
562 }
563 const qdScreenTransform &transform_speed() const {
564 return _transform_speed;
565 }
566 void set_transform_speed(const qdScreenTransform &tr_speed) {
567 _transform_speed = tr_speed;
568 }
569
570 static Common::String flag2str(int fl, bool truncate = false, bool icon = false);
571
572protected:
573
577 bool save_script_body(Common::WriteStream &fh, int indent = 0) const;
578
580 virtual bool need_sound_restart() const;
581
582private:
583
585 StateType _state_type;
586
588 Vect2s _center_offset;
590 Vect3f _bound;
592 float _radius;
593
595 qdCoordsAnimation _coords_animation;
596
598 float _activation_delay;
600 float _activation_timer;
601
603
607 float _work_time;
609 float _cur_time;
610
612 qdSoundInfo _sound_info;
614 qdSoundHandle _sound_handle;
616 float _sound_delay;
618 bool _is_sound_started;
619
621 float _text_delay;
623 bool _is_text_shown;
624
626 int _mouse_cursor_id;
627
629 Common::String _text_ID;
631 Common::String _short_text_ID;
632
634 qdCameraMode _camera_mode;
635
636 float _rnd_move_radius;
637 float _rnd_move_speed;
638
640 int _autosave_slot;
641
643 float _fade_time;
644
646 uint32 _shadow_color;
648 int _shadow_alpha;
649
651 qdScreenTransform _transform;
652 qdScreenTransform _transform_speed;
653
655 qdScreenTextFormat _text_format;
656
658
662 int _reference_count;
663
665 qdGameObjectState *_prev_state;
666
667};
668
670
673public:
677
678 qdGameObjectState &operator = (const qdGameObjectState &st);
679 qdGameObjectStateStatic &operator = (const qdGameObjectStateStatic &st);
680
681 qdAnimation *animation() {
682 return _animation_info.animation();
683 }
684 const qdAnimation *animation() const {
685 return _animation_info.animation();
686 }
687 qdAnimationInfo *animation_info() {
688 return &_animation_info;
689 }
690
691 bool load_script(const xml::tag *p);
692 bool save_script(Common::WriteStream &fh, int indent = 0) const;
693
700
701 bool is_state_empty() const;
702
703 qdGameObjectState *clone() const {
704 return new qdGameObjectStateStatic(*this);
705 }
706
709
710private:
711 qdAnimationInfo _animation_info;
712};
713
716public:
720
721 qdGameObjectState &operator = (const qdGameObjectState &st);
722 qdGameObjectStateWalk &operator = (const qdGameObjectStateWalk &st);
723
744
753 };
754
755 enum OffsetType {
756 OFFSET_STATIC = 0,
757 OFFSET_WALK,
758 OFFSET_START,
759 OFFSET_END
760 };
761
762 qdAnimationSet *animation_set() const;
763
764 qdAnimation *animation(float direction_angle);
765 qdAnimation *static_animation(float direction_angle);
766
767 qdAnimationInfo *animation_info(float direction_angle);
768 qdAnimationInfo *static_animation_info(float direction_angle);
769
770 const Vect2i &center_offset(int direction_index, OffsetType offset_type = OFFSET_WALK) const;
771 const Vect2i &center_offset(float direction_angle, OffsetType offset_type = OFFSET_WALK) const;
772 void set_center_offset(int direction_index, const Vect2i &offs, OffsetType offset_type = OFFSET_WALK);
773
774 float walk_sound_frequency(int direction_index) const;
775 float walk_sound_frequency(float direction_angle) const;
776 void set_walk_sound_frequency(int direction_index, float freq);
777
779 bool update_sound_frequency(float direction_angle) const;
780
781 qdAnimationSetInfo *animation_set_info() {
782 return &_animation_set_info;
783 }
784
785 float adjust_direction_angle(float angle) const;
786
787 float direction_angle() const {
788 return _direction_angle;
789 }
790 void set_direction_angle(float ang) {
791 _direction_angle = ang;
792 }
793
794 bool load_script(const xml::tag *p);
795 bool save_script(Common::WriteStream &fh, int indent = 0) const;
796
803
804 bool is_state_empty() const;
805
806 qdGameObjectState *clone() const {
807 return new qdGameObjectStateWalk(*this);
808 }
809
812
813 float acceleration() const {
814 return _acceleration;
815 }
816 void set_acceleration(float acc) {
817 _acceleration = acc;
818 }
819
820 float max_speed() const {
821 return _max_speed;
822 }
823 void set_max_speed(float max_sp) {
824 _max_speed = max_sp;
825 }
826
827 void set_movement_type(movement_type_t type) {
828 _movement_type = type;
829 }
830 movement_type_t movement_type() const {
831 return _movement_type;
832 }
833
834protected:
835
837 bool need_sound_restart() const;
838
839private:
840
841 float _direction_angle;
842 qdAnimationSetInfo _animation_set_info;
843
845 float _acceleration;
847
850 float _max_speed;
851
853 movement_type_t _movement_type;
854
856 Std::vector<Vect2i> _center_offsets;
858 Std::vector<Vect2i> _static_center_offsets;
860 Std::vector<Vect2i> _start_center_offsets;
862 Std::vector<Vect2i> _stop_center_offsets;
863
865 Std::vector<float> _walk_sound_frequency;
866};
867
870public:
874
875 qdGameObjectState &operator = (const qdGameObjectState &st);
876 qdGameObjectStateMask &operator = (const qdGameObjectStateMask &st);
877
878 const char *parent_name() const {
879 return _parent_name.c_str();
880 }
881 void set_parent_name(const char *p) {
882 _parent_name = p;
883 _parent = 0;
884 }
885
886 qdGameObject *parent();
887 const qdGameObject *parent() const;
888
889 bool hit(int x, int y) const;
890 bool draw_mask(uint32 color) const;
891
892 bool can_be_closed() const {
893 return (contour_size() > 2);
894 }
895
896 bool load_script(const xml::tag *p);
897 bool save_script(Common::WriteStream &fh, int indent = 0) const;
898
899 bool is_state_empty() const;
900
902
903 qdGameObjectState *clone() const {
904 return new qdGameObjectStateMask(*this);
905 }
906
907private:
908
910 Common::String _parent_name;
911
913 qdGameObject *_parent;
914};
915
916#ifdef __QD_DEBUG_ENABLE__
917inline bool qdbg_is_object_state(const qdNamedObject *obj, const char *scene_name, const char *object_name, const char *state_name) {
918 if (dynamic_cast<const qdGameObjectState *>(obj)) {
919 if (obj->name() && !strcmp(state_name, obj->name())) {
920 if (!object_name || (obj->owner() && obj->owner()->name() && !strcmp(object_name, obj->owner()->name()))) {
921 if (!scene_name || (obj->owner()->owner() && obj->owner()->owner()->name() && !strcmp(obj->owner()->owner()->name(), scene_name)))
922 return true;
923 }
924 }
925 }
926 return false;
927}
928#else
929inline bool qdbg_is_object_state(const qdNamedObject *obj, const char *scene_name, const char *object_name, const char *state_name) {
930 return false;
931}
932#endif
933
934} // namespace QDEngine
935
936#endif // QDENGINE_QDCORE_QD_GAME_OBJECT_STATE_H
Definition: stream.h:745
Definition: str.h:59
Definition: stream.h:77
Definition: xmath.h:117
Definition: xmath.h:419
Definition: xmath.h:533
Анимация.
Definition: qd_animation.h:57
Информация об анимации.
Definition: qd_animation_info.h:34
Информация о наборе анимаций.
Definition: qd_animation_set_info.h:34
Режим работы камеры.
Definition: qd_camera_mode.h:40
@ MODE_UNASSIGNED
режим не установлен
Definition: qd_camera_mode.h:56
Объект с условиями.
Definition: qd_conditional_object.h:37
trigger_start_mode
Варианты старта триггера.
Definition: qd_conditional_object.h:122
Контур.
Definition: qd_contour.h:39
int contour_size() const
Возвращает количество точек в контуре.
Definition: qd_contour.h:131
Definition: qd_coords_animation.h:37
Базовый класс для игровых объектов.
Definition: qd_game_object.h:53
Состояние динамического объекта - базовый класс.
Definition: qd_game_object_state.h:91
bool save_data(Common::WriteStream &fh) const
Запись данных в сэйв.
int reference_count() const
Возвращает количество ссылок на состояние.
Definition: qd_game_object_state.h:384
float cur_time() const
Возвращает время в секундах, прошедшее с момента активации состояния.
Definition: qd_game_object_state.h:343
bool has_full_text() const
Возвращает true, если у состояния задан текст субтитров.
Definition: qd_game_object_state.h:411
virtual bool auto_bound()
Устанавливает баунд состояния по анимации.
Definition: qd_game_object_state.h:458
float radius() const
Возвращает радиус состояния.
Definition: qd_game_object_state.h:452
float start_direction_angle() const
Возвращает направление объекта в точке, в которой должно активироваться состояние.
Definition: qd_game_object_state.h:376
bool load_script_body(const xml::tag *p)
Загрузка данных из скрипта.
bool has_short_text() const
Возвращает true, если у состояния задан сокращенный текст субтитров.
Definition: qd_game_object_state.h:415
const Vect2s & center_offset() const
Возвращет смещение центра объекта для состояния (в экранных координатах).
Definition: qd_game_object_state.h:232
const Vect3f & bound() const
Возвращает баунд состояния.
Definition: qd_game_object_state.h:448
float activation_delay() const
Возвращает задержку (в секундах) перед активацией состояния.
Definition: qd_game_object_state.h:324
int named_object_type() const
Возвращает тип объекта.
Definition: qd_game_object_state.h:193
bool need_to_walk() const
Возвращает true, если персонажу требуется подойти к точке включения состояния.
Definition: qd_game_object_state.h:354
void set_bound(const Vect3f &b)
Устанавливает баунд состояния.
virtual bool load_resources()
Загрузка ресурсов.
bool set_sound_frequency(float frequency_coeff) const
Установка частоты звука.
bool has_camera_mode() const
Возвращает true, если у состояния задан режим работы камеры.
Definition: qd_game_object_state.h:471
bool has_sound() const
Возвращает true, если для состояния задан звук.
Definition: qd_game_object_state.h:285
bool init()
Инициализация состояния, вызывается при старте и перезапуске игры.
bool check_conditions()
Возвращает true, если условия активации состояния выполняются.
StateType state_type() const
Возвращает тип состояния.
Definition: qd_game_object_state.h:253
float work_time() const
Возвращает длительность состояния в секундах.
void quant(float dt)
Логический квант состояния.
void set_camera_mode(const qdCameraMode &mode)
Устанавливает режим работы камеры, включается при активации состояния.
Definition: qd_game_object_state.h:463
const Vect3f start_pos() const
Возвращает координаты точки, в которой должно активироваться состояние.
Definition: qd_game_object_state.h:369
const char * sound_name() const
Устанавливает имя звукового эффекта, привязанного к состоянию.
Definition: qd_game_object_state.h:275
bool trigger_can_start() const
Возвращает true, если триггер может быть активирован при выполнении его внутренних условий.
qdConditionalObject::trigger_start_mode trigger_start()
Активация триггера.
void drop_sound_flag(int fl)
Скидывает флаг для звука.
Definition: qd_game_object_state.h:307
void set_activation_delay(float tm)
Устанавливает задержку (в секундах) перед активацией состояния.
Definition: qd_game_object_state.h:328
void set_mouse_cursor_ID(int id)
Устанавливает идентификатор мышиного курсора для состояния.
Definition: qd_game_object_state.h:266
bool check_sound_flag(int fl) const
Возвращает true, если установлен флаг для звука.
Definition: qd_game_object_state.h:311
void set_short_text_ID(const char *p)
Устанавливает сокращенный текст субтитров.
Definition: qd_game_object_state.h:438
bool stop_sound() const
Останавливает звук.
void set_activation_timer()
Устанавливает таймер перед активацией состояния.
Definition: qd_game_object_state.h:332
const char * short_text() const
Возвращает сокращенный текст субтитров.
bool play_sound()
Запускает звук, position - стартовяя позиция, от 0.0 до 1.0.
virtual bool register_resources()
Регистрация ресурсов состояния в диспетчере ресурсов.
virtual bool is_state_empty() const
Возвращает true, если состояние пустое.
StateType
Тип состояния.
Definition: qd_game_object_state.h:174
@ STATE_WALK
Походка.
Definition: qd_game_object_state.h:178
@ STATE_MASK
Маска на фоне.
Definition: qd_game_object_state.h:180
@ STATE_STATIC
Статическая анимация.
Definition: qd_game_object_state.h:176
const char * full_text() const
Возвращает полный текст субтитров.
void inc_reference_count()
Инкремент количества ссылок на состояние.
Definition: qd_game_object_state.h:388
virtual bool free_resources()
Выгрузка ресурсов.
const qdSoundHandle * sound_handle() const
Возвращает хэндл звука.
Definition: qd_game_object_state.h:290
virtual bool unregister_resources()
Отмена регистрации ресурсов состояния в диспетчере ресурсов.
virtual bool need_sound_restart() const
Возвращает true, если надо перезапустить звук.
bool is_active() const
Возвращает true, если в данный момент состояние включено.
bool has_bound() const
Возвращает true, если у состояния задан баунд.
Definition: qd_game_object_state.h:444
void dec_reference_count()
Декремент количества ссылок на состояние.
Definition: qd_game_object_state.h:392
const qdCameraMode & camera_mode() const
Режим работы камеры, включается при активации состояния.
Definition: qd_game_object_state.h:467
qdSound * sound() const
Возвращает указатель на звуковой эффект, привязанный к состоянию.
const char * text() const
Возвращает текст субтитров.
Definition: qd_game_object_state.h:401
bool has_mouse_cursor_ID() const
Возвращает true, если состоянию назначен особый мышиный курсор.
Definition: qd_game_object_state.h:270
void set_work_time(float tm)
Устанавливает длительность состояния в секундах.
Definition: qd_game_object_state.h:349
void set_full_text_ID(const char *p)
Устанавливает полный текст субтитров.
Definition: qd_game_object_state.h:426
int mouse_cursor_ID() const
Возвращает идентификатор мышиного курсора для состояния.
Definition: qd_game_object_state.h:258
bool save_script_body(Common::WriteStream &fh, int indent=0) const
Запись данных в скрипт.
const qdCoordsAnimation * coords_animation() const
Возвращает указатель на траекторию движения объекта для состояния.
Definition: qd_game_object_state.h:202
bool load_data(Common::SeekableReadStream &fh, int save_version)
Загрузка данных из сэйва.
bool has_text() const
Возвращает true, если у состояния задан текст субтитров.
Definition: qd_game_object_state.h:397
void set_center_offset(const Vect2s offs)
Устанавливает смещение центра объекта для состояния (в экранных координатах).
Definition: qd_game_object_state.h:236
qdCoordsAnimation * coords_animation()
Возвращает указатель на траекторию движения объекта для состояния.
Definition: qd_game_object_state.h:198
bool is_default() const
Возвращает true, если состояние стартовое.
void set_sound_flag(int fl)
Устанавливает флаг для звука.
Definition: qd_game_object_state.h:303
void set_prev_state(qdGameObjectState *p)
Устанавливает предыдущее состояние.
Definition: qd_game_object_state.h:248
virtual bool load_script(const xml::tag *p)=0
Загрузка данных из скрипта.
virtual bool save_script(Common::WriteStream &fh, int indent=0) const =0
Запись данных в скрипт.
@ QD_OBJ_STATE_FLAG_AUTO_SAVE
Автоматически писать сэйв при активации состояния.
Definition: qd_game_object_state.h:168
@ QD_OBJ_STATE_FLAG_AUTO_LOAD
Автоматически загружать сэйв при активации состояния.
Definition: qd_game_object_state.h:166
@ QD_OBJ_STATE_FLAG_STAY_IN_INVENTORY
Не вытаскивать объект из инвентори, когда он взят на мышь.
Definition: qd_game_object_state.h:151
@ QD_OBJ_STATE_FLAG_DISABLE_WALK_INTERRUPT
Запретить прерывать подход к стартовой точке состояния.
Definition: qd_game_object_state.h:145
@ QD_OBJ_STATE_FLAG_ENABLE_SKIP
Состояние можно скиповать кликом мыши.
Definition: qd_game_object_state.h:158
@ QD_OBJ_STATE_FLAG_NOT_IN_TRIGGERS
The state is not in triggers. Deprecated, replaced with is_in_triggers()
Definition: qd_game_object_state.h:98
@ QD_OBJ_STATE_FLAG_WAS_ACTIVATED
Состояние уже было активировано.
Definition: qd_game_object_state.h:139
@ QD_OBJ_STATE_FLAG_GLOBAL_OWNER
Объект, которому принадлежит состояние - глобальный.
Definition: qd_game_object_state.h:104
@ QD_OBJ_STATE_FLAG_ENABLE_INTERRUPT
Разрешить прерывать состояние.
Definition: qd_game_object_state.h:134
@ QD_OBJ_STATE_FLAG_MOVE_TO_INVENTORY
Положить объект в инвентори по окончании состояния.
Definition: qd_game_object_state.h:108
@ QD_OBJ_STATE_FLAG_FORCED_LOAD
Definition: qd_game_object_state.h:156
@ QD_OBJ_STATE_FLAG_INVENTORY
Состояние для инвентори.
Definition: qd_game_object_state.h:106
@ QD_OBJ_STATE_FLAG_SOUND_SYNC
Синхронизировать анимацию по звуку.
Definition: qd_game_object_state.h:128
@ QD_OBJ_STATE_FLAG_HIDE_OBJECT
Прятать объект по окончании состояния.
Definition: qd_game_object_state.h:102
@ QD_OBJ_STATE_FLAG_MOUSE_HOVER_STATE
Включать состояние, когда мышь над объектом в инвентори.
Definition: qd_game_object_state.h:149
@ QD_OBJ_STATE_FLAG_HIDDEN
Объект спрятан.
Definition: qd_game_object_state.h:96
@ QD_OBJ_STATE_FLAG_ACTIVATION_TIMER
Активирована задержка перед включением состояния.
Definition: qd_game_object_state.h:114
@ QD_OBJ_STATE_FLAG_ACTIVATION_TIMER_END
Задержка перед включением состояния окончилась.
Definition: qd_game_object_state.h:116
@ QD_OBJ_STATE_FLAG_RESTORE_PREV_STATE
Восстанавливать предыдущее состояние по окончании состояния.
Definition: qd_game_object_state.h:100
@ QD_OBJ_STATE_FLAG_MOVE_TO_INVENTORY_FAILED
Положить в инвентори не удалось.
Definition: qd_game_object_state.h:110
@ QD_OBJ_STATE_FLAG_ACTIVATE_PERSONAGE
По окончании работы состояния делать персонажа-владельца активным.
Definition: qd_game_object_state.h:164
@ QD_OBJ_STATE_FLAG_HAS_BOUND
У состояния задан баунд.
Definition: qd_game_object_state.h:112
@ QD_OBJ_STATE_FLAG_MOVE_ON_OBJECT
При включении состояния класть объект в центр объекта под мышью.
Definition: qd_game_object_state.h:162
@ QD_OBJ_STATE_FLAG_MOVE_TO_ZONE
При включении состояния класть объект на зону под мышью.
Definition: qd_game_object_state.h:160
@ QD_OBJ_STATE_FLAG_DIALOG_PHRASE
Заданный для состояния текст - вариант фразы для диалогов.
Definition: qd_game_object_state.h:122
@ QD_OBJ_STATE_FLAG_MOUSE_STATE
Включать состояние, когда объект взят на мышь.
Definition: qd_game_object_state.h:147
const char * full_text_ID() const
Возвращает полный текст субтитров.
Definition: qd_game_object_state.h:419
qdGameObjectState * prev_state()
Возвращает указатель на предыдущее состояние.
Definition: qd_game_object_state.h:244
void set_sound_name(const char *p)
Возвращает имя звукового эффекта, привязанного к состоянию.
Definition: qd_game_object_state.h:279
void start()
Вызывается при активации состояния.
Definition: qd_game_object_state.h:337
const char * short_text_ID() const
Возвращает сокращенный текст субтитров.
Definition: qd_game_object_state.h:431
Состояние динамического объекта - маска на статическом объекте.
Definition: qd_game_object_state.h:869
bool load_resources()
Загрузка ресурсов.
bool save_script(Common::WriteStream &fh, int indent=0) const
Запись данных в скрипт.
bool load_script(const xml::tag *p)
Чтение данных из скрипта.
bool is_state_empty() const
Возвращает true, если состояние пустое.
Состояние динамического объекта - статическая анимация.
Definition: qd_game_object_state.h:672
bool register_resources()
Регистрация ресурсов состояния в диспетчере ресурсов.
bool is_state_empty() const
Возвращает true, если состояние пустое.
bool load_resources()
Загрузка ресурсов.
bool auto_bound()
Устанавливает баунд состояния по анимации.
bool load_script(const xml::tag *p)
Загрузка данных из скрипта.
bool unregister_resources()
Отмена регистрации ресурсов состояния в диспетчере ресурсов.
bool free_resources()
Выгрузка ресурсов.
bool save_script(Common::WriteStream &fh, int indent=0) const
Запись данных в скрипт.
Состояние динамического объекта - походка.
Definition: qd_game_object_state.h:715
bool register_resources()
Регистрация ресурсов состояния в диспетчере ресурсов.
bool auto_bound()
Устанавливает баунд состояния по анимации.
bool load_resources()
Загрузка ресурсов.
bool need_sound_restart() const
Возвращает true, если надо перезапустить звук.
movement_type_t
режимы передвижения для персонажа
Definition: qd_game_object_state.h:725
@ MOVEMENT_UP_LEFT
ходит только влево-вверх
Definition: qd_game_object_state.h:746
@ MOVEMENT_SMOOTH
ходит по восьми и больше направлениям со сглаживанием
Definition: qd_game_object_state.h:743
@ MOVEMENT_EIGHT_DIRS
ходит по восьми направлениям
Definition: qd_game_object_state.h:741
@ MOVEMENT_UP_RIGHT
ходит только вправо-вверх
Definition: qd_game_object_state.h:748
@ MOVEMENT_DOWN
ходит только вниз
Definition: qd_game_object_state.h:733
@ MOVEMENT_DOWN_LEFT
ходит только влево-вниз
Definition: qd_game_object_state.h:752
@ MOVEMENT_VERTICAL
ходит только по вертикали
Definition: qd_game_object_state.h:737
@ MOVEMENT_UP
ходит только вверх
Definition: qd_game_object_state.h:729
@ MOVEMENT_HORIZONTAL
ходит только по горизонтали
Definition: qd_game_object_state.h:735
@ MOVEMENT_RIGHT
ходит только вправо
Definition: qd_game_object_state.h:731
@ MOVEMENT_FOUR_DIRS
ходит по четырем направлениям
Definition: qd_game_object_state.h:739
@ MOVEMENT_LEFT
ходит только влево
Definition: qd_game_object_state.h:727
@ MOVEMENT_DOWN_RIGHT
ходит только вправо-вниз
Definition: qd_game_object_state.h:750
bool update_sound_frequency(float direction_angle) const
Установка частоты звука.
bool load_script(const xml::tag *p)
Загрузка данных из скрипта.
bool save_script(Common::WriteStream &fh, int indent=0) const
Запись данных в скрипт.
bool is_state_empty() const
Возвращает true, если состояние пустое.
bool free_resources()
Выгрузка ресурсов.
bool unregister_resources()
Отмена регистрации ресурсов состояния в диспетчере ресурсов.
const char * name() const
Возвращает имя объекта.
Definition: qd_named_object_base.h:40
void set_name(const char *p)
Устанавливает имя объекта.
Definition: qd_named_object_base.h:45
bool check_flag(int fl) const
Возвращает true, если установлен флаг fl.
Definition: qd_named_object.h:99
void set_flag(int fl)
Устанавливает флаг.
Definition: qd_named_object.h:91
void drop_flag(int fl)
Скидывает флаг.
Definition: qd_named_object.h:95
Обозначает отсутствие шрифта
Definition: qd_screen_text.h:39
Definition: qd_game_object_state.h:41
Класс для управления звуками.
Definition: qd_sound_handle.h:31
Звук.
Definition: qd_sound.h:35
Информация о звуке.
Definition: qd_sound_info.h:34
XML тег.
Definition: xml_tag.h:33
Базовый класс для игровых ресурсов.
Definition: console.h:28