22 #ifndef QDENGINE_QDCORE_QD_GAME_OBJECT_STATE_H 23 #define QDENGINE_QDCORE_QD_GAME_OBJECT_STATE_H 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" 47 return !(*
this == trans);
49 bool operator()()
const {
50 return _angle != 0.f || _scale.x != 1.f || _scale.y != 1.f;
58 _angle += trans._angle;
59 _scale += trans._scale;
69 void set_angle(
float angle) {
73 const Vect2f &scale()
const {
76 void set_scale(
const Vect2f &scale) {
79 bool has_scale()
const {
80 return fabs(_scale.x - 1.f) > FLT_EPS || fabs(_scale.y - 1.f) > FLT_EPS;
96 QD_OBJ_STATE_FLAG_HIDDEN = 0x01,
98 QD_OBJ_STATE_FLAG_NOT_IN_TRIGGERS = 0x02,
100 QD_OBJ_STATE_FLAG_RESTORE_PREV_STATE = 0x04,
102 QD_OBJ_STATE_FLAG_HIDE_OBJECT = 0x08,
104 QD_OBJ_STATE_FLAG_GLOBAL_OWNER = 0x10,
106 QD_OBJ_STATE_FLAG_INVENTORY = 0x20,
108 QD_OBJ_STATE_FLAG_MOVE_TO_INVENTORY = 0x40,
110 QD_OBJ_STATE_FLAG_MOVE_TO_INVENTORY_FAILED = 0x80,
112 QD_OBJ_STATE_FLAG_HAS_BOUND = 0x100,
114 QD_OBJ_STATE_FLAG_ACTIVATION_TIMER = 0x200,
116 QD_OBJ_STATE_FLAG_ACTIVATION_TIMER_END = 0x400,
122 QD_OBJ_STATE_FLAG_DIALOG_PHRASE = 0x800,
128 QD_OBJ_STATE_FLAG_SOUND_SYNC = 0x1000,
134 QD_OBJ_STATE_FLAG_ENABLE_INTERRUPT = 0x2000,
139 QD_OBJ_STATE_FLAG_WAS_ACTIVATED = 0x4000,
145 QD_OBJ_STATE_FLAG_DISABLE_WALK_INTERRUPT = 0x8000,
147 QD_OBJ_STATE_FLAG_MOUSE_STATE = 0x10000,
149 QD_OBJ_STATE_FLAG_MOUSE_HOVER_STATE = 0x20000,
151 QD_OBJ_STATE_FLAG_STAY_IN_INVENTORY = 0x40000,
156 QD_OBJ_STATE_FLAG_FORCED_LOAD = 0x80000,
158 QD_OBJ_STATE_FLAG_ENABLE_SKIP = 0x100000,
160 QD_OBJ_STATE_FLAG_MOVE_TO_ZONE = 0x200000,
162 QD_OBJ_STATE_FLAG_MOVE_ON_OBJECT = 0x400000,
164 QD_OBJ_STATE_FLAG_ACTIVATE_PERSONAGE = 0x800000,
166 QD_OBJ_STATE_FLAG_AUTO_LOAD = 0x1000000,
168 QD_OBJ_STATE_FLAG_AUTO_SAVE = 0x2000000,
169 QD_OBJ_STATE_FLAG_FADE_IN = 0x4000000,
170 QD_OBJ_STATE_FLAG_FADE_OUT = 0x8000000,
184 CURSOR_UNASSIGNED = -1
194 return QD_NAMED_OBJECT_OBJ_STATE;
199 return &_coords_animation;
203 return &_coords_animation;
207 virtual bool load_script(
const xml::tag *p) = 0;
220 virtual bool register_resources();
222 virtual bool unregister_resources();
224 virtual bool load_resources();
226 virtual bool free_resources();
229 bool check_conditions();
233 return _center_offset;
237 _center_offset = offs;
241 void quant(
float dt);
259 return _mouse_cursor_id;
267 _mouse_cursor_id = id;
271 return _mouse_cursor_id != CURSOR_UNASSIGNED;
276 return _sound_info.name();
280 _sound_info.set_name(p);
286 if (sound_name())
return true;
291 return &_sound_handle;
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;
304 _sound_info.set_flag(fl);
308 _sound_info.drop_flag(fl);
312 return _sound_info.check_flag(fl);
316 virtual bool is_state_empty()
const;
319 bool is_active()
const;
321 bool is_default()
const;
325 return _activation_delay;
329 _activation_delay = tm;
333 _activation_timer = _activation_delay;
339 _is_sound_started =
false;
347 float work_time()
const;
355 if (!_coords_animation.is_empty()
356 && _coords_animation.check_flag(QD_COORDS_ANM_OBJECT_START_FLAG))
364 virtual float adjust_direction_angle(
float angle)
const {
370 if (!_coords_animation.is_empty()) {
371 return _coords_animation.get_point(0)->dest_pos();
377 if (!_coords_animation.is_empty()) {
378 return _coords_animation.get_point(0)->direction_angle();
385 return _reference_count;
393 if (_reference_count) _reference_count--;
398 return (!_text_ID.empty() || !_short_text_ID.empty());
402 if (has_full_text())
return full_text();
403 else return short_text();
406 const char *full_text()
const;
408 const char *short_text()
const;
412 return !_text_ID.empty();
416 return !_short_text_ID.empty();
420 return _text_ID.c_str();
428 else _text_ID.clear();
432 return _short_text_ID.c_str();
439 if (p) _short_text_ID = p;
440 else _short_text_ID.clear();
445 return check_flag(QD_OBJ_STATE_FLAG_HAS_BOUND);
456 void set_bound(
const Vect3f &b);
475 float rnd_move_radius()
const {
476 return _rnd_move_radius;
478 void set_rnd_move_radius(
float radius) {
479 _rnd_move_radius = radius;
482 float rnd_move_speed()
const {
483 return _rnd_move_speed;
485 void set_rnd_move_speed(
float speed) {
486 _rnd_move_speed = speed;
490 bool trigger_can_start()
const;
492 bool forced_load()
const {
493 return check_flag(QD_OBJ_STATE_FLAG_FORCED_LOAD);
496 float text_delay()
const {
499 bool has_text_delay()
const {
500 return _text_delay > FLT_EPS;
502 void set_text_delay(
float delay) {
506 float sound_delay()
const {
509 bool has_sound_delay()
const {
510 return _sound_delay > FLT_EPS;
512 void set_sound_delay(
float delay) {
513 _sound_delay = delay;
516 int autosave_slot()
const {
517 return _autosave_slot;
519 void set_autosave_slot(
int slot) {
520 _autosave_slot = slot;
523 float fade_time()
const {
526 void set_fade_time(
float time) {
530 uint32 shadow_color()
const {
531 return _shadow_color;
533 int shadow_alpha()
const {
534 return _shadow_alpha;
537 void set_shadow(uint32 color,
int alpha) {
538 _shadow_color = color;
539 _shadow_alpha = alpha;
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();
550 _text_format = text_format;
553 bool has_transform()
const {
554 return _transform() || _transform_speed();
564 return _transform_speed;
567 _transform_speed = tr_speed;
570 static Common::String flag2str(
int fl,
bool truncate =
false,
bool icon =
false);
575 bool load_script_body(
const xml::tag *p);
580 virtual bool need_sound_restart()
const;
598 float _activation_delay;
600 float _activation_timer;
618 bool _is_sound_started;
626 int _mouse_cursor_id;
636 float _rnd_move_radius;
637 float _rnd_move_speed;
646 uint32 _shadow_color;
662 int _reference_count;
682 return _animation_info.animation();
685 return _animation_info.animation();
688 return &_animation_info;
691 bool load_script(
const xml::tag *p);
695 bool register_resources();
697 bool unregister_resources();
698 bool load_resources();
699 bool free_resources();
701 bool is_state_empty()
const;
765 qdAnimation *static_animation(
float direction_angle);
770 const Vect2i ¢er_offset(
int direction_index, OffsetType offset_type = OFFSET_WALK)
const;
771 const Vect2i ¢er_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);
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);
779 bool update_sound_frequency(
float direction_angle)
const;
782 return &_animation_set_info;
785 float adjust_direction_angle(
float angle)
const;
787 float direction_angle()
const {
788 return _direction_angle;
790 void set_direction_angle(
float ang) {
791 _direction_angle = ang;
794 bool load_script(
const xml::tag *p);
798 bool register_resources();
800 bool unregister_resources();
801 bool load_resources();
802 bool free_resources();
804 bool is_state_empty()
const;
813 float acceleration()
const {
814 return _acceleration;
816 void set_acceleration(
float acc) {
820 float max_speed()
const {
823 void set_max_speed(
float max_sp) {
828 _movement_type = type;
831 return _movement_type;
837 bool need_sound_restart()
const;
841 float _direction_angle;
878 const char *parent_name()
const {
879 return _parent_name.c_str();
881 void set_parent_name(
const char *p) {
889 bool hit(
int x,
int y)
const;
890 bool draw_mask(uint32 color)
const;
892 bool can_be_closed()
const {
893 return (contour_size() > 2);
896 bool load_script(
const xml::tag *p);
899 bool is_state_empty()
const;
901 bool load_resources();
916 #ifdef __QD_DEBUG_ENABLE__ 917 inline 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())) {
929 inline bool qdbg_is_object_state(
const qdNamedObject *obj,
const char *scene_name,
const char *object_name,
const char *state_name) {
936 #endif // QDENGINE_QDCORE_QD_GAME_OBJECT_STATE_H Базовый класс для игровых объектов.
Definition: qd_game_object.h:53
bool has_mouse_cursor_ID() const
Возвращает true, если состоянию назначен особый мышиный курсор.
Definition: qd_game_object_state.h:270
qdGameObjectState * prev_state()
Возвращает указатель на предыдущее состояние.
Definition: qd_game_object_state.h:244
const char * sound_name() const
Устанавливает имя звукового эффекта, привязанного к состоянию.
Definition: qd_game_object_state.h:275
StateType
Тип состояния.
Definition: qd_game_object_state.h:174
float start_direction_angle() const
Возвращает направление объекта в точке, в которой должно активироваться состояние.
Definition: qd_game_object_state.h:376
bool check_sound_flag(int fl) const
Возвращает true, если установлен флаг для звука.
Definition: qd_game_object_state.h:311
Definition: qd_coords_animation.h:37
void inc_reference_count()
Инкремент количества ссылок на состояние.
Definition: qd_game_object_state.h:388
const char * short_text_ID() const
Возвращает сокращенный текст субтитров.
Definition: qd_game_object_state.h:431
Класс для управления звуками.
Definition: qd_sound_handle.h:31
int reference_count() const
Возвращает количество ссылок на состояние.
Definition: qd_game_object_state.h:384
Поименованный объект.
Definition: qd_named_object.h:70
ходит только вверх
Definition: qd_game_object_state.h:729
void set_activation_timer()
Устанавливает таймер перед активацией состояния.
Definition: qd_game_object_state.h:332
Информация об анимации.
Definition: qd_animation_info.h:34
void dec_reference_count()
Декремент количества ссылок на состояние.
Definition: qd_game_object_state.h:392
ходит только вправо
Definition: qd_game_object_state.h:731
Definition: qd_animation_set.h:34
const char * name() const
Возвращает имя объекта.
Definition: qd_named_object_base.h:40
ходит по восьми и больше направлениям со сглаживанием
Definition: qd_game_object_state.h:743
bool has_bound() const
Возвращает true, если у состояния задан баунд.
Definition: qd_game_object_state.h:444
ходит по восьми направлениям
Definition: qd_game_object_state.h:741
void set_short_text_ID(const char *p)
Устанавливает сокращенный текст субтитров.
Definition: qd_game_object_state.h:438
Звук.
Definition: qd_sound.h:35
void set_work_time(float tm)
Устанавливает длительность состояния в секундах.
Definition: qd_game_object_state.h:349
Статическая анимация.
Definition: qd_game_object_state.h:176
режим не установлен
Definition: qd_camera_mode.h:56
int mouse_cursor_ID() const
Возвращает идентификатор мышиного курсора для состояния.
Definition: qd_game_object_state.h:258
const Vect3f start_pos() const
Возвращает координаты точки, в которой должно активироваться состояние.
Definition: qd_game_object_state.h:369
const Vect3f & bound() const
Возвращает баунд состояния.
Definition: qd_game_object_state.h:448
void start()
Вызывается при активации состояния.
Definition: qd_game_object_state.h:337
const qdSoundHandle * sound_handle() const
Возвращает хэндл звука.
Definition: qd_game_object_state.h:290
Контур.
Definition: qd_contour.h:39
Обозначает отсутствие шрифта
Definition: qd_screen_text.h:39
const char * text() const
Возвращает текст субтитров.
Definition: qd_game_object_state.h:401
bool has_camera_mode() const
Возвращает true, если у состояния задан режим работы камеры.
Definition: qd_game_object_state.h:471
qdCoordsAnimation * coords_animation()
Возвращает указатель на траекторию движения объекта для состояния.
Definition: qd_game_object_state.h:198
Состояние динамического объекта - базовый класс.
Definition: qd_game_object_state.h:91
void set_prev_state(qdGameObjectState *p)
Устанавливает предыдущее состояние.
Definition: qd_game_object_state.h:248
Объект с условиями.
Definition: qd_conditional_object.h:37
Состояние динамического объекта - маска на статическом объекте.
Definition: qd_game_object_state.h:869
Информация о наборе анимаций.
Definition: qd_animation_set_info.h:34
void set_camera_mode(const qdCameraMode &mode)
Устанавливает режим работы камеры, включается при активации состояния.
Definition: qd_game_object_state.h:463
virtual bool auto_bound()
Устанавливает баунд состояния по анимации.
Definition: qd_game_object_state.h:458
ходит только по вертикали
Definition: qd_game_object_state.h:737
ходит только по горизонтали
Definition: qd_game_object_state.h:735
StateType state_type() const
Возвращает тип состояния.
Definition: qd_game_object_state.h:253
XML тег.
Definition: xml_tag.h:33
Походка.
Definition: qd_game_object_state.h:178
Базовый класс для игровых ресурсов.
Definition: console.h:28
float cur_time() const
Возвращает время в секундах, прошедшее с момента активации состояния.
Definition: qd_game_object_state.h:343
Режим работы камеры.
Definition: qd_camera_mode.h:40
void set_center_offset(const Vect2s offs)
Устанавливает смещение центра объекта для состояния (в экранных координатах).
Definition: qd_game_object_state.h:236
Анимация.
Definition: qd_animation.h:57
const qdCoordsAnimation * coords_animation() const
Возвращает указатель на траекторию движения объекта для состояния.
Definition: qd_game_object_state.h:202
movement_type_t
режимы передвижения для персонажа
Definition: qd_game_object_state.h:725
ходит только влево-вверх
Definition: qd_game_object_state.h:746
trigger_start_mode
Варианты старта триггера.
Definition: qd_conditional_object.h:122
const Vect2s & center_offset() const
Возвращет смещение центра объекта для состояния (в экранных координатах).
Definition: qd_game_object_state.h:232
void set_full_text_ID(const char *p)
Устанавливает полный текст субтитров.
Definition: qd_game_object_state.h:426
ходит только влево
Definition: qd_game_object_state.h:727
float radius() const
Возвращает радиус состояния.
Definition: qd_game_object_state.h:452
ходит по четырем направлениям
Definition: qd_game_object_state.h:739
void set_activation_delay(float tm)
Устанавливает задержку (в секундах) перед активацией состояния.
Definition: qd_game_object_state.h:328
Состояние динамического объекта - походка.
Definition: qd_game_object_state.h:715
const qdCameraMode & camera_mode() const
Режим работы камеры, включается при активации состояния.
Definition: qd_game_object_state.h:467
Информация о звуке.
Definition: qd_sound_info.h:34
void set_sound_name(const char *p)
Возвращает имя звукового эффекта, привязанного к состоянию.
Definition: qd_game_object_state.h:279
bool has_text() const
Возвращает true, если у состояния задан текст субтитров.
Definition: qd_game_object_state.h:397
ходит только вправо-вниз
Definition: qd_game_object_state.h:750
bool has_full_text() const
Возвращает true, если у состояния задан текст субтитров.
Definition: qd_game_object_state.h:411
ходит только вниз
Definition: qd_game_object_state.h:733
bool has_sound() const
Возвращает true, если для состояния задан звук.
Definition: qd_game_object_state.h:285
float activation_delay() const
Возвращает задержку (в секундах) перед активацией состояния.
Definition: qd_game_object_state.h:324
int named_object_type() const
Возвращает тип объекта.
Definition: qd_game_object_state.h:193
void drop_sound_flag(int fl)
Скидывает флаг для звука.
Definition: qd_game_object_state.h:307
void set_sound_flag(int fl)
Устанавливает флаг для звука.
Definition: qd_game_object_state.h:303
bool has_short_text() const
Возвращает true, если у состояния задан сокращенный текст субтитров.
Definition: qd_game_object_state.h:415
Состояние динамического объекта - статическая анимация.
Definition: qd_game_object_state.h:672
bool need_to_walk() const
Возвращает true, если персонажу требуется подойти к точке включения состояния.
Definition: qd_game_object_state.h:354
const char * full_text_ID() const
Возвращает полный текст субтитров.
Definition: qd_game_object_state.h:419
void set_mouse_cursor_ID(int id)
Устанавливает идентификатор мышиного курсора для состояния.
Definition: qd_game_object_state.h:266
qdNamedObject * owner() const
Возвращает владельца объекта.
Definition: qd_named_object.h:79
ходит только вправо-вверх
Definition: qd_game_object_state.h:748