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;
169 QD_OBJ_STATE_FLAG_FADE_IN = 0x4000000,
170 QD_OBJ_STATE_FLAG_FADE_OUT = 0x8000000,
184 CURSOR_UNASSIGNED = -1
188 qdGameObjectState(
const qdGameObjectState &st);
189 virtual ~qdGameObjectState();
191 virtual qdGameObjectState &operator = (
const qdGameObjectState &st);
194 return QD_NAMED_OBJECT_OBJ_STATE;
199 return &_coords_animation;
203 return &_coords_animation;
233 return _center_offset;
237 _center_offset = offs;
259 return _mouse_cursor_id;
267 _mouse_cursor_id = id;
271 return _mouse_cursor_id != CURSOR_UNASSIGNED;
276 return _sound_info.
name();
291 return &_sound_handle;
299 bool is_sound_finished()
const;
300 bool is_sound_playing()
const;
325 return _activation_delay;
329 _activation_delay = tm;
333 _activation_timer = _activation_delay;
339 _is_sound_started =
false;
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());
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();
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;
492 bool forced_load()
const {
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;
542 const qdScreenTextFormat &text_format(
bool topic_mode =
false)
const {
543 if (_text_format.is_global_depend()) {
545 qdScreenTextFormat::global_topic_format() : qdScreenTextFormat::global_text_format();
549 void set_text_format(
const qdScreenTextFormat &text_format) {
550 _text_format = text_format;
553 bool has_transform()
const {
554 return _transform() || _transform_speed();
557 const qdScreenTransform &transform()
const {
560 void set_transform(
const qdScreenTransform &tr) {
563 const qdScreenTransform &transform_speed()
const {
564 return _transform_speed;
566 void set_transform_speed(
const qdScreenTransform &tr_speed) {
567 _transform_speed = tr_speed;
570 static Common::String flag2str(
int fl,
bool truncate =
false,
bool icon =
false);
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;
762 qdAnimationSet *animation_set()
const;
764 qdAnimation *animation(
float direction_angle);
765 qdAnimation *static_animation(
float direction_angle);
767 qdAnimationInfo *animation_info(
float direction_angle);
768 qdAnimationInfo *static_animation_info(
float direction_angle);
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);
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);
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;
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;
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 {
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)))
929inline bool qdbg_is_object_state(
const qdNamedObject *obj,
const char *scene_name,
const char *object_name,
const char *state_name) {
Анимация.
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_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