22 #ifndef QDENGINE_MINIGAMES_3MICE2_PLATE_H 23 #define QDENGINE_MINIGAMES_3MICE2_PLATE_H 25 #include "common/debug.h" 27 #include "qdengine/qd_fwd.h" 28 #include "qdengine/qdcore/qd_minigame_interface.h" 38 debugC(1, kDebugMinigames,
"3mice2Plate::init()");
40 _engine = engine_interface;
41 _scene = engine_interface->current_scene_interface();
45 for (
int i = 1; i <= 5; i++) {
53 _objFading = _scene->
object_interface(
"\xE7\xE0\xF2\xE5\xEC\xED\xE5\xED\xE8\xE5");
54 _objHasStarted = _scene->
object_interface(
"$\xE7\xE0\xEF\xF3\xF1\xEA \xE1\xFB\xEB");
56 _initialCoords[1] = 54;
57 _initialCoords[2] = 99;
58 _initialCoords[3] = 693;
59 _initialCoords[4] = 673;
60 _initialCoords[5] = 706;
61 _initialCoords[7] = 452;
62 _initialCoords[8] = 98;
63 _initialCoords[9] = 436;
64 _initialCoords[10] = 93;
65 _initialCoords[11] = 254;
70 for (
int i = 0; i < 5; i++) {
71 pos.x = _initialCoords[i + 1];
72 pos.y = _initialCoords[i + 7];
82 for (
int i = 0; i < 5; i++) {
87 _zoneDepth = depth - 100;
94 debugC(3, kDebugMinigames,
"3mice2Plate::quant(%f)", dt);
102 if (clickObj && !mouseObj) {
103 name = clickObj->
name();
106 int num = getObjNum(name);
110 debugC(2, kDebugMinigames,
"to_inv: num is: %d for name: '%s'", num, name);
113 _objZoneFull->
set_state(
"\xD4\xEE\xED - \xEC\xE0\xF1\xEA\xE0");
118 }
else if (!strcmp(name,
"zone_target")) {
119 int minDepth = 32768.0;
122 for (
int i = 0; i < 5; i++) {
123 float depth = _scene->
screen_depth(_figures[i + 1]->R());
124 if (depth < minDepth && _figures[i + 1]->is_state_active(
"plate")) {
130 debugC(2, kDebugMinigames,
"zone_target: num is: %d", num);
135 _objZoneFull->
set_state(
"\xD4\xEE\xED - \xEC\xE0\xF1\xEA\xE0");
144 _scene->release_object_interface(clickObj);
148 name = mouseObj->
name();
150 int num = getObjNum(name);
152 debugC(2, kDebugMinigames,
"base: num is: %d for name: '%s'", num, name);
160 pos.x = _initialCoords[num];
161 pos.y = _initialCoords[num + 6];
165 _scene->release_object_interface(mouseObj);
173 name = mouseObj->
name();
175 int num = getObjNum(name);
177 debugC(2, kDebugMinigames,
"plate: num is: %d for name: '%s'", num, name);
179 if (!strcmp(hoverObj->
name(),
"zone_target")) {
187 }
else if (!strcmp(hoverObj->
name(),
"zone_full")) {
194 pos.x = _initialCoords[num];
195 pos.y = _initialCoords[num + 6];
202 _scene->release_object_interface(mouseObj);
216 debugC(1, kDebugMinigames,
"3mice2Plate::finit()");
219 _engine->release_scene_interface(_scene);
238 enum { INTERFACE_VERSION = 112 };
239 int version()
const {
240 return INTERFACE_VERSION;
244 bool checkSolution() {
245 for (
int i = 0; i < 5; i++) {
246 if (!_figures[i + 1]->is_state_active(
"plate"))
259 int getObjNum(
const char *name) {
260 const char *from = strstr(name,
"@");
261 const char *to = strstr(name,
"#");
280 int _initialCoords[12] = { 0 };
286 #endif // QDENGINE_MINIGAMES_3MICE2_PLATE_H virtual mgVect3f R() const =0
Возвращает координаты объекта в мировой системе координат.
virtual mgVect3f screen2world_coords(const mgVect2i &screen_pos, float screen_depth=0) const =0
Преобразование из экранных координат в мировые.
static String format(MSVC_PRINTF const char *fmt,...) GCC_PRINTF(1
virtual mgVect2i screen_R() const =0
Возвращает координаты объекта в экранной системе координат.
size_t strlcpy(char *dst, const char *src, size_t size)
virtual const char * name() const =0
Имя объекта.
Нажатие левой кнопки.
Definition: qd_minigame_interface.h:372
Definition: qd_minigame_interface.h:78
bool init(const qdEngineInterface *engine_interface)
Инициализация игры.
Definition: 3mice2_plate.h:37
Definition: qd_minigame_interface.h:365
bool new_game(const qdEngineInterface *engine_interface)
Инициализация миниигры, вызывается при старте и перезапуске игры.
Definition: 3mice2_plate.h:226
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:374
virtual qdMinigameObjectInterface * mouse_click_object_interface() const =0
Создаёт интерфейс к объекту, по которому кликнули мышью.
bool finit()
Деинициализация игры.
Definition: 3mice2_plate.h:215
virtual float screen_depth(const mgVect3f &pos) const =0
Возвращает "глубину" точки с координатами pos в мировой системе координат
Интерфейс к динамическому объекту.
Definition: qd_minigame_interface.h:230
Интерфейс к сцене.
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.
bool quant(float dt)
Обсчёт логики игры, параметр - время, которое должно пройти в игре (в секундах).
Definition: 3mice2_plate.h:93
int save_game(const qdEngineInterface *engine_interface, const qdMinigameSceneInterface *scene_interface, char *buffer, int buffer_size)
Сохранение данных, вызывается при сохранении сцены, на которую повешена миниигра. ...
Definition: 3mice2_plate.h:230
int load_game(const qdEngineInterface *engine_interface, const qdMinigameSceneInterface *scene_interface, const char *buffer, int buffer_size)
Загрузка данных, вызывается при загрузке сцены, на которую повешена миниигра.
Definition: 3mice2_plate.h:234
virtual bool is_mouse_event_active(qdMinigameMouseEvent event_id) const =0
Возвращает true, если в данный момент произошло событие event_id.
void void void void void debugC(int level, uint32 debugChannels, MSVC_PRINTF const char *s,...) GCC_PRINTF(3
Definition: 3mice2_plate.h:32
virtual qdMinigameObjectInterface * mouse_object_interface() const =0
Создаёт интерфейс к объекту, который взят мышью в данный момент.