22 #ifndef QDENGINE_QDCORE_QD_GAME_OBJECT_MOVING_H 23 #define QDENGINE_QDCORE_QD_GAME_OBJECT_MOVING_H 25 #include "qdengine/parser/xml_fwd.h" 26 #include "qdengine/qdcore/qd_game_object_animated.h" 30 class qdInterfaceButton;
32 const int QD_MOVING_OBJ_PATH_LENGTH = 200;
44 return QD_NAMED_OBJECT_MOVING_OBJ;
47 enum movement_mode_t {
79 CONTROL_ATTACHMENT_TO_ACTIVE_WITH_MOVING = 0x800,
101 if (_control_types & type)
return true;
105 _control_types |= type;
108 _control_types &= ~type;
111 int get_control_types() {
return _control_types; }
112 int get_movement_mode() {
return _movement_mode; }
116 bool is_walkable(
const Vect3f &pos)
const;
117 bool is_walkable(
const Vect2s &pos)
const;
119 const Vect3f &
bound(
bool perspective_correction =
true)
const;
120 Vect3f calc_bound_in_pos(
Vect3f pos,
bool perspective_correction =
true);
121 bool calc_walk_grid(
Vect2s ¢er,
Vect2s &size)
const;
131 float direction_angle()
const {
132 return _direction_angle;
134 float calc_direction_angle(
const Vect3f &target)
const;
135 float animate_rotation(
float dt);
136 float rotation_angle()
const {
137 return _rotation_angle;
140 float rotation_angle_per_quant()
const {
141 return _rotation_angle_per_quant;
143 void set_rotation_angle_per_quant(
float ang) {
144 _rotation_angle_per_quant = ang;
147 bool set_direction(
float angle);
148 int get_direction(
float angle)
const;
150 float default_direction_angle()
const {
151 return _default_direction_angle;
153 void set_default_direction(
float ang) {
154 _default_direction_angle = ang;
157 void set_state(
int st);
161 _last_walk_state = p;
164 return _last_walk_state;
180 bool move(
const Vect3f &target,
bool lock_target =
false);
181 bool move(
const Vect3f &target,
float angle,
bool lock_target =
false);
183 bool move2position(
const Vect3f target);
185 bool skip_movement();
186 bool stop_movement();
188 bool is_moving()
const {
192 bool can_move()
const;
194 bool is_in_position(
const Vect3f pos)
const;
195 bool is_in_position(
const Vect3f pos,
float angle)
const;
197 bool is_moving2position(
const Vect3f pos)
const;
198 bool is_moving2position(
const Vect3f pos,
float angle)
const;
211 return ((_path_length) ? _path[_path_length] : _target_r);
216 void set_scale(
float sc) {
219 float scale()
const {
223 bool load_script(
const xml::tag *p);
231 bool load_resources();
239 Vect3f get_future_r(
float dt,
bool &end_movement,
bool real_moving =
false);
240 void quant(
float dt);
242 void redraw(
int offs_x = 0,
int offs_y = 0)
const;
243 void debug_redraw()
const;
244 void draw_contour(uint32 color)
const;
245 void draw_shadow(
int offs_x,
int offs_y, uint32 color,
int alpha)
const;
251 bool hit(
int x,
int y)
const;
253 bool update_screen_pos();
254 Vect2s screen_size()
const;
256 void disable_control() {
257 _disable_control =
true;
259 void enable_control() {
260 _disable_control =
false;
262 bool is_control_disabled()
const {
263 return _disable_control;
266 bool keyboard_move();
268 bool set_movement_impulse(
float dir_angle);
270 float collision_radius()
const {
271 if (_collision_radius > FLT_EPS)
272 return _collision_radius;
277 void set_collision_radius(
float r) {
278 _collision_radius = r;
281 float collision_delay()
const {
282 return _collision_delay;
284 void set_collision_delay(
float r) {
285 _collision_delay = r;
288 float collision_path()
const {
289 return _collision_path;
291 void set_collision_path(
float path) {
292 _collision_path = path;
295 float follow_min_radius()
const {
296 return _follow_min_radius;
298 void set_follow_min_radius(
float fmr) {
299 _follow_min_radius = fmr;
302 float follow_max_radius()
const {
303 return _follow_max_radius;
305 void set_follow_max_radius(
float fmr) {
306 _follow_max_radius = fmr;
309 int follow_condition()
const {
310 return _follow_condition;
312 void set_follow_condition(
int cond) {
313 _follow_condition = cond;
317 return _circuit_objs;
320 return _circuit_objs;
329 return _attacher_ref;
331 Vect2s attach_shift()
const {
332 return _attach_shift;
334 void set_attach_shift(
Vect2s shift) {
335 _attach_shift = shift;
338 Vect3f last_move_order()
const {
339 return _last_move_order;
341 void set_last_move_order(
const Vect3f &pnt) {
342 _last_move_order = pnt;
346 bool move_from_personage_path();
348 bool toggle_grid_zone(
bool make_walkable =
false);
349 void toggle_selection(
bool state) {
350 _is_selected = state;
353 void set_path_attributes(
int attr)
const;
354 void clear_path_attributes(
int attr)
const;
356 static Common::String control2str(
int control,
bool truncate =
false);
357 static Common::String movement2str(
int movement,
bool truncate =
false);
361 bool load_script_body(
const xml::tag *p);
370 float _collision_radius;
372 float _collision_delay;
374 float _collision_path;
377 float _follow_min_radius;
378 float _follow_max_radius;
381 int _follow_condition;
393 bool _disable_control;
395 bool _impulse_movement_mode;
396 float _impulse_timer;
397 float _impulse_start_timer;
398 float _impulse_direction;
400 movement_mode_t _movement_mode;
401 float _movement_mode_time;
402 float _movement_mode_time_current;
405 float _direction_angle;
406 float _rotation_angle;
407 float _rotation_angle_per_quant;
409 float _default_direction_angle;
419 Vect3f _path[QD_MOVING_OBJ_PATH_LENGTH];
424 bool _ignore_personages;
429 Vect2s get_nearest_walkable_point(
const Vect2s &target)
const;
431 Vect2s get_pre_last_walkable_point(
const Vect2s &target)
const;
432 bool is_path_walkable(
int x1,
int y1,
int x2,
int y2)
const;
433 bool is_path_walkable(
const Vect2i &src,
const Vect2i &trg)
const {
434 return is_path_walkable(src.x, src.y, trg.x, trg.y);
436 bool is_path_walkable(
const Vect3f &src,
const Vect3f &trg)
const;
437 bool enough_far_target(
const Vect3f &dest)
const;
439 void toggle_ignore_personages(
bool state) {
440 _ignore_personages = state;
443 bool find_path(
const Vect3f target,
bool lock_target =
false);
457 bool adjust_position(
Vect3f &pos)
const;
458 bool adjust_direction_angle(
float &angle);
460 void change_direction_angle(
float angle);
462 bool is_direction_allowed(
float angle)
const;
463 int allowed_directions_count()
const;
465 float calc_scale()
const {
466 return calc_scale(R());
468 float calc_scale(
const Vect3f &r)
const;
470 bool set_walk_animation();
471 bool movement_impulse();
474 bool get_speed_parameters(
float &speed,
float &speed_max,
float &acceleration);
478 bool adjust_position(
Vect3f &pos,
float dir_angle)
const;
482 Vect2s walk_grid_size()
const {
483 return walk_grid_size(R());
486 bool start_auto_move();
489 bool future_pos_correct(
float dt);
492 bool is_movement_finished()
const;
497 #endif // QDENGINE_QDCORE_QD_GAME_OBJECT_MOVING_H Definition: qd_game_object_moving.h:77
можно толкать другим персонажем
Definition: qd_game_object_moving.h:62
автоматически двигаться
Definition: qd_game_object_moving.h:66
float radius() const
Возвращает радиус объекта.
сгонять с пути других персонажей, если блокируют дорогу
Definition: qd_game_object_moving.h:68
Vect3f target_position() const
Точка, к которой движется персонаж.
Definition: qd_game_object_moving.h:209
Все ок
Definition: qd_game_object_moving.h:91
control_type_t
режимы управления персонажем
Definition: qd_game_object_moving.h:56
bool save_data(Common::WriteStream &fh) const
Запись данных в сэйв.
Vect3f local_target_position() const
Текущая точка, к которой движется персонаж.
Definition: qd_game_object_moving.h:201
можно указывать мышью точки куда идти
Definition: qd_game_object_moving.h:58
Dynamic object.
Definition: qd_game_object_animated.h:37
Режим с анимацией поворота
Definition: qd_game_object_moving.h:83
follow_condition_t
флаги следования
Definition: qd_game_object_moving.h:87
Состояние динамического объекта - базовый класс.
Definition: qd_game_object_state.h:91
автоматически избегать столкновений с другими персонажами
Definition: qd_game_object_moving.h:64
bool check_flag(int fl) const
Возвращает true, если установлен флаг fl.
Definition: qd_named_object.h:99
Definition: qd_named_object_reference.h:35
XML тег.
Definition: xml_tag.h:33
bool can_change_state(const qdGameObjectState *state=NULL) const
Возвращает true, если объект в данный момент может менять состояние.
Базовый класс для игровых ресурсов.
Definition: console.h:28
bool get_debug_info(Common::String &buf) const
Копирует в буфер отладочную информацию для вывода на экран в отладочном режиме.
bool calc_cur_and_future_walk_grid(float dt, Vect2s &cen_cur, Vect2s &size_cur, Vect2s &cen_next, Vect2s &size_next)
Возвращает текущее положение сетки движения, и положение сетки через dt.
int named_object_type() const
Возвращает тип объекта.
Definition: qd_game_object_moving.h:43
Режим реагирования на клик активному персонажу (персонаж бежит туда же)
Definition: qd_game_object_moving.h:81
Персонаж следует
Definition: qd_game_object_moving.h:97
Персонаж.
Definition: qd_game_object_moving.h:35
movement_type_t
режимы передвижения для персонажа
Definition: qd_game_object_state.h:725
Персонаж ждет остановки всех следующих персонажей, чтобы продолжить следование
Definition: qd_game_object_moving.h:95
Жесткая привязка персонажа к заданному персонажу
Definition: qd_game_object_moving.h:74
Состояние динамического объекта - походка.
Definition: qd_game_object_state.h:715
bool init()
Инициализация объекта, вызывается при старте и перезапуске игры.
Персонаж стремится не отходить от активного персонажа более чем на некоторый радиус ...
Definition: qd_game_object_moving.h:70
mouseEvent
События.
Definition: mouse_input.h:41
Прямоугольная область на экране.
Definition: gr_screen_region.h:31
Для персонажа нужно просчитать путь следования
Definition: qd_game_object_moving.h:89
const Vect3f & bound(bool perspective_correction=true) const
Возвращает баунд объекта.
bool load_data(Common::SeekableReadStream &fh, int save_version)
Загрузка данных из сэйва.
можно рулить с клавиатуры
Definition: qd_game_object_moving.h:60
Персонаж пытается двигаться в ту же сторону, что и активный
Definition: qd_game_object_moving.h:72
Персонаж ждет, когда можно будет возобновить попытку следования
Definition: qd_game_object_moving.h:93