1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef QDENGINE_QDCORE_QD_GAME_OBJECT_MOUSE_H
#define QDENGINE_QDCORE_QD_GAME_OBJECT_MOUSE_H
#include "qdengine/qdcore/qd_game_object_animated.h"
namespace Common {
class WriteStream;
}
namespace QDEngine {
//! Mouse
class qdGameObjectMouse : public qdGameObjectAnimated {
public:
qdGameObjectMouse();
qdGameObjectMouse(const qdGameObjectMouse &obj);
~qdGameObjectMouse();
qdGameObjectMouse &operator = (const qdGameObjectMouse &obj);
int named_object_type() const {
return QD_NAMED_OBJECT_MOUSE_OBJ;
}
bool load_script(const xml::tag *p);
bool save_script(Common::WriteStream &fh, int indent = 0) const;
bool load_data(Common::SeekableReadStream &fh, int save_version);
bool save_data(Common::WriteStream &fh) const;
void take_object(qdGameObjectAnimated *p);
qdGameObjectAnimated *object() {
return _object;
}
//! Идентификаторы для курсоров по-умолчанию.
enum cursor_ID_t {
//! общий курсор по-умолчанию
DEFAULT_CURSOR,
//! курсор для анимированных объектов
OBJECT_CURSOR,
//! курсор для зон на сетке
ZONE_CURSOR,
//! курсор для main menu
MAIN_MENU_CURSOR,
//! курсор для внутриигрового интерфейса
INGAME_INTERFACE_CURSOR,
//! курсор для объектов в инвентори
INVENTORY_OBJECT_CURSOR,
MAX_CURSOR_ID
};
//! Установка курсора по-умолчанию.
/**
Номер состояния отсчитывается с нуля.
*/
void set_default_cursor(cursor_ID_t id, int state_index) {
_default_cursors[id] = state_index;
}
//! Возвращает курсор по-умолчанию.
int default_cursor(cursor_ID_t id) const {
return _default_cursors[id];
}
void set_cursor(cursor_ID_t id);
void set_cursor_state(int state_idx) {
if (cur_state() != state_idx) set_state(state_idx);
}
void pre_redraw();
void redraw(int offs_x = 0, int offs_y = 0) const;
void post_redraw();
void quant(float dt);
bool update_screen_pos();
const Vect2f &screen_pos_offset() const {
return _screen_pos_offset;
}
protected:
bool load_script_body(const xml::tag *p);
bool save_script_body(Common::WriteStream &fh, int indent = 0) const;
private:
//! Объект, который прицеплен к курсору.
qdGameObjectAnimated *_object;
//! Номера состояний, соответствующие курсорам по-умолчанию.
int _default_cursors[MAX_CURSOR_ID];
grScreenRegion _object_screen_region;
Vect2f _screen_pos_offset;
Vect2f _screen_pos_offset_delta;
void update_object_position() const;
};
} // namespace QDEngine
#endif // QDENGINE_QDCORE_QD_GAME_OBJECT_MOUSE_H
|