22 #ifndef QDENGINE_MINIGAMES_INV_POPUP_H 23 #define QDENGINE_MINIGAMES_INV_POPUP_H 25 #include "common/debug.h" 27 #include "qdengine/qd_fwd.h" 28 #include "qdengine/qdcore/qd_minigame_interface.h" 38 debugC(1, kDebugMinigames,
"InvPopup::init()");
40 _engine = engine_interface;
41 _scene = engine_interface->current_scene_interface();
49 _blockPersObj = _scene->
object_interface(
"\x24\xe1\xeb\xee\xea\xe8\xf0\xee\xe2\xea\xe0\x5f\xef\xe5\xf0\xf1\xee\xed\xe0\xe6\xe0");
50 _blockPersFlagObj = _scene->
object_interface(
"\x24\xe1\xeb\xee\xea\xe8\xf0\xee\xe2\xea\xe0\x5f\xef\xe5\xf0\xf1\xee\xed\xe0\xe6\xe0\x5f\xf4\xeb\xe0\xe3");
54 _shveikLookObj = _scene->
object_interface(
"\x24\xf8\xe2\xe5\xe9\xea\x20\xf1\xec\xee\xf2\xf0\xe8\xf2");
55 _shveikMoveObj = _scene->
object_interface(
"\x25\xF3\xEF\xF0\xE0\xE2\xEB\xE5\xED\xE8\xE5\x20\xEE\xE6\xE8\xE2\xEB\xFF\xE6\xE5\xEC\x20\xD8\xE2\xE5\xE9\xEA\xE0");
56 _shveikMoveEnabledObj = _scene->
object_interface(
"\x25\xEE\xE6\xE8\xE2\xEB\xFF\xE6\x20\xD8\xE2\xE5\xE9\xEA\xE0\x20\xF0\xE0\xE7\xF0\xE5\xF8\xE5\xED");
70 debugC(3, kDebugMinigames,
"InvPopup::quant(%f)", dt);
72 if (_blockPersObj->
is_state_active(
"\xe2\xea\xeb\xfe\xf7\xe8\xf2\xfc")) {
74 }
else if (_blockPersObj->
is_state_active(
"\xe2\xfb\xea\xeb\xfe\xf7\xe8\xf2\xfc")) {
76 _blockPersObj->
set_state(
"\xe2\xfb\xea\xeb\xfe\xf7\xe5\xed\xe0");
81 const char *state =
nullptr;
88 obj = _invDescCloseupObj;
90 }
else if (!strstr(state,
"#inv#")) {
94 const char *pos = strstr(state,
"#inv#");
99 if (buf2[0] != buf[0] || buf2[1] != buf[1]) {
102 if (_hoverObjectPos.x + _invDescObj->
screen_size().x / 2 >= 800
103 || (_hoverObjectPos.x - _invDescObj->
screen_size().x / 2 <= 0)) {
104 if (_hoverObjectPos.x + _invDescObj->
screen_size().x / 2 < 800) {
105 if (_hoverObjectPos.x - _invDescObj->
screen_size().x / 2 <= 0)
106 _invDescPos.x = _invDescObj->
screen_size().x / 2 + 10;
108 _invDescPos.x = 790 - _invDescObj->
screen_size().x / 2;
111 _invDescPos.x = _hoverObjectPos.x;
113 _invDescPos.y = _invDescObj->
screen_size().y / 2 + 73;
123 if (strstr(state,
"#closeup#")) {
124 const char *pos = strstr(state,
"#inv#");
138 if (!_blockPersObj->
is_state_active(
"\xe2\xea\xeb\xfe\xf7\xe8\xf2\xfc"))
139 _blockPersObj->
set_state(
"\xe2\xea\xeb\xfe\xf7\xe8\xf2\xfc");
140 }
else if (_blockPersObj->
is_state_active(
"\xe2\xea\xeb\xfe\xf7\xe8\xf2\xfc")) {
141 _blockPersObj->
set_state(
"\xe2\xfb\xea\xeb\xfe\xf7\xe8\xf2\xfc");
145 int angle = (int)(_shveikObj->
direction_angle() * 180.0 * 0.3183098865475127);
147 if (angle > 220 && angle < 230)
149 else if (angle > 265 && angle < 275)
151 else if (angle > 310 && angle < 320)
153 else if (angle > 175 && angle < 185)
155 else if (angle >= 0 && angle < 5)
157 else if (angle > 40 && angle < 50)
159 else if (angle > 85 && angle < 95)
161 else if (angle > 130 && angle < 140)
165 if (curState ==
"#1#") {
167 }
else if (curState ==
"#2#") {
169 }
else if (curState ==
"#3#") {
171 }
else if (curState ==
"#4#") {
173 }
else if (curState ==
"#6#") {
175 }
else if (curState ==
"#7#") {
177 }
else if (curState ==
"#8#") {
179 }
else if (curState ==
"#9#") {
183 switch (_direction) {
215 if (curState ==
"?1?") {
217 }
else if (curState ==
"?2?") {
219 }
else if (curState ==
"?3?") {
221 }
else if (curState ==
"?4?") {
223 }
else if (curState ==
"?6?") {
225 }
else if (curState ==
"?7?") {
227 }
else if (curState ==
"?8?") {
229 }
else if (curState ==
"?9?") {
233 switch (_direction) {
263 if (!_shveikIsMoving) {
266 _timeout =
qd_rnd(10) + 5;
269 if (_timeout >= _time || _time == -1.0) {
274 _shveikMoveObj->
set_state(
"\xe2\xfb\xef\xee\xeb\xed\xe8\xf2\xfc");
279 || _shveikMoveObj->
is_state_active(
"\xee\xf2\xf0\xe0\xe1\xee\xf2\xe0\xed"))
280 && _shveikIsMoving > 0) {
284 _shveikMoveObj->
set_state(
"\xee\xe6\xe8\xe4\xe0\xed\xe8\xe5");
287 if ((_shveikObj->
R().x != _oldShveikPos.x
288 || _shveikObj->
R().y != _oldShveikPos.y)
289 && _shveikIsMoving > 0) {
293 _shveikMoveObj->
set_state(
"\xee\xe6\xe8\xe4\xe0\xed\xe8\xe5");
296 _oldShveikPos = _shveikObj->
R();
302 debugC(1, kDebugMinigames,
"InvPopup::finit()");
305 _engine->release_scene_interface(_scene);
324 enum { INTERFACE_VERSION = 112 };
325 int version()
const {
326 return INTERFACE_VERSION;
346 bool _someFlag =
false;
348 int _shveikIsMoving = 0;
356 #endif // QDENGINE_MINIGAMES_INV_POPUP_H virtual bool set_direction_angle(float direction)=0
Устанавливает направление персонажа.
virtual mgVect3f R() const =0
Возвращает координаты объекта в мировой системе координат.
virtual mgVect3f screen2world_coords(const mgVect2i &screen_pos, float screen_depth=0) const =0
Преобразование из экранных координат в мировые.
virtual mgVect2i screen_R() const =0
Возвращает координаты объекта в экранной системе координат.
size_t strlcpy(char *dst, const char *src, size_t size)
virtual float direction_angle() const =0
Definition: qd_minigame_interface.h:78
Definition: qd_minigame_interface.h:365
virtual bool is_state_active(const char *state_name) const =0
Возвращает true, если состояние с именем state_name включено в данный момент.
Базовый класс для игровых ресурсов.
Definition: console.h:28
virtual qdMinigameObjectInterface * mouse_hover_object_interface() const =0
Создаёт интерфейс к объекту, над которым находится мышиный курсор.
Интерфейс к динамическому объекту.
Definition: qd_minigame_interface.h:230
virtual const char * current_state_name() const =0
Интерфейс к сцене.
Definition: qd_minigame_interface.h:315
virtual bool set_state(const char *state_name)=0
Включает состояние с именем state_name.
virtual void set_R(const mgVect3f &r)=0
Устанавливает координаты объекта в мировой системе координат.
virtual qdMinigameObjectInterface * object_interface(const char *object_name)=0
Создаёт интерфейс к объекту с именем object_name.
virtual qdMinigameObjectInterface * personage_interface(const char *personage_name)=0
Создаёт интерфейс к персонажу с именем personage_name.
virtual mgVect2i screen_size() const =0
Возвращает текущие экранные размеры объекта в пикселах.
void void void void void debugC(int level, uint32 debugChannels, MSVC_PRINTF const char *s,...) GCC_PRINTF(3
uint32 qd_rnd(uint32 m)
Возвращает случайное значение в интервале [0, m-1].
Definition: qd_rnd.h:30
virtual qdMinigameObjectInterface * mouse_right_click_object_interface() const =0
Создаёт интерфейс к объекту, по которому кликнули правой кнопкой мыши.
virtual bool activate_personage(const char *personage_name)=0
Активация персонажа с именем personage_name.
virtual qdMinigameObjectInterface * mouse_object_interface() const =0
Создаёт интерфейс к объекту, который взят мышью в данный момент.