22 #ifndef QDENGINE_MINIGAMES_KARTINY_H 23 #define QDENGINE_MINIGAMES_KARTINY_H 25 #include "common/debug.h" 27 #include "qdengine/qd_fwd.h" 28 #include "qdengine/qdcore/qd_minigame_interface.h" 38 debugC(1, kDebugMinigames,
"Kartiny::init()");
40 _engine = engine_interface;
41 _scene = engine_interface->current_scene_interface();
45 _bg_clickObj = _scene->
object_interface(_scene->minigame_parameter(
"zad_click_flag_name"));
46 _bg1_l2Obj = _scene->
object_interface(_scene->minigame_parameter(
"zad1_l2_object_name"));
47 _bg2_l2Obj = _scene->
object_interface(_scene->minigame_parameter(
"zad2_l2_object_name"));
48 _bg3_l2Obj = _scene->
object_interface(_scene->minigame_parameter(
"zad3_l2_object_name"));
49 _bg4_l2Obj = _scene->
object_interface(_scene->minigame_parameter(
"zad4_l2_object_name"));
52 _activateObj = _scene->
object_interface(_scene->minigame_parameter(
"activate"));
62 debugC(3, kDebugMinigames,
"Kartiny::quant(%f)", dt);
72 if (depth4 >= depth3 || depth3 >= depth2 || depth2 >= depth1)
78 if (_startObj->
is_state_active(
"\xe7\xe0\xe4\xed\xe8\xea\xe8 \xee\xef\xf3\xf9\xe5\xed\xfb"))
91 _activateObj->
set_state(
"\xe7\xe0\xe4\xed\xe8\xea\x34");
95 if (_bg1_l2Obj->
screen_R().y < 100) {
97 piecePos.y = _bg1_l2Obj->
screen_R().y + 3;
101 if (_bg2_l2Obj->
screen_R().y < 50) {
103 piecePos.y = _bg2_l2Obj->
screen_R().y + 2;
107 if (_bg3_l2Obj->
screen_R().y < 85) {
109 piecePos.y = _bg3_l2Obj->
screen_R().y + 2;
115 piecePos.y = _bg4_l2Obj->
screen_R().y + 2;
124 _startObj->
set_state(
"\xe7\xe0\xe4\xed\xe8\xea\xe8 \xee\xef\xf3\xf9\xe5\xed\xfb");
128 if (_startObj->
is_state_active(
"\xe7\xe0\xe4\xed\xe8\xea\xe8 \xee\xef\xf3\xf9\xe5\xed\xfb")
129 && _artDepth == -1.0) {
131 _artState[0].num = 1;
133 _artState[1].num = 2;
135 _artState[2].num = 3;
137 _artState[3].num = 4;
140 for (
int i = 0; i < 3; i++) {
141 while (_artState[i + 1].depth < _artState[i].depth) {
142 int num = _artState[i].num;
143 float depth = _artState[i].depth;
145 _artState[i].depth = _artState[i + 1].depth;
146 _artState[i].num = _artState[i + 1].num;
147 _artState[i + 1].depth = depth;
148 _artState[i + 1].num = num;
156 _stage = _artState[0].num;
157 _artDepth = _artState[0].depth;
163 if (!checkSolution() && _wasInited) {
178 moveLeft(_bg1_l2Obj);
181 moveLeft(_bg2_l2Obj);
184 moveLeft(_bg3_l2Obj);
187 moveLeft(_bg4_l2Obj);
197 moveRight(_bg1_l2Obj);
200 moveRight(_bg2_l2Obj);
203 moveRight(_bg3_l2Obj);
206 moveRight(_bg4_l2Obj);
235 moveDown(_bg1_l2Obj);
238 moveDown(_bg2_l2Obj);
241 moveDown(_bg3_l2Obj);
244 moveDown(_bg4_l2Obj);
252 || _activateObj->
is_state_active(
"\xe7\xe0\xe4\xed\xe8\xea\x31")) && _stage != 1) {
254 _activateObj->
set_state(
"\xe7\xe0\xe4\xed\xe8\xea\x31");
262 || _activateObj->
is_state_active(
"\xe7\xe0\xe4\xed\xe8\xea\x32")) && _stage != 2) {
264 _activateObj->
set_state(
"\xe7\xe0\xe4\xed\xe8\xea\x32");
272 || _activateObj->
is_state_active(
"\xe7\xe0\xe4\xed\xe8\xea\x33")) && _stage != 3) {
274 _activateObj->
set_state(
"\xe7\xe0\xe4\xed\xe8\xea\x33");
282 || _activateObj->
is_state_active(
"\xe7\xe0\xe4\xed\xe8\xea\x34")) && _stage != 4) {
284 _activateObj->
set_state(
"\xe7\xe0\xe4\xed\xe8\xea\x34");
296 debugC(1, kDebugMinigames,
"Kartiny::finit()");
299 _engine->release_scene_interface(_scene);
318 enum { INTERFACE_VERSION = 99 };
319 int version()
const {
320 return INTERFACE_VERSION;
332 if (
ABS(399 -
ABS(piecePos.x)) <= 10 &&
ABS(278 -
ABS(piecePos.y)) <= 10) {
337 _bg1_l2Obj->
set_R(newPiecePos);
343 if (piecePos.x >= 387 && piecePos.x <= 440 &&
ABS(267 -
ABS(piecePos.y)) <= 20) {
348 _bg2_l2Obj->
set_R(newPiecePos);
354 if (
ABS(
ABS(piecePos.x) - 413) < 25 &&
ABS(
ABS(piecePos.y) - 43) < 40) {
359 _bg3_l2Obj->
set_R(newPiecePos);
364 int speed =
MAX(10, _keyDownCounter / 10 + 1);
367 if (obj == _bg1_l2Obj)
369 else if (obj == _bg2_l2Obj)
379 if (objPos.y + speed < maxCoords)
386 int speed =
MAX(10, _keyDownCounter / 10 + 1);
396 int speed =
MAX(10, _keyDownCounter / 10 + 1);
406 int speed =
MAX(10, _keyDownCounter / 10 + 1);
415 bool checkSolution() {
476 bool _wasInited =
false;
477 float _artDepth = -1.0;
478 int _keyDownCounter = 0;
490 #endif // QDENGINE_MINIGAMES_KARTINY_H virtual mgVect3f R() const =0
Возвращает координаты объекта в мировой системе координат.
virtual mgVect3f screen2world_coords(const mgVect2i &screen_pos, float screen_depth=0) const =0
Преобразование из экранных координат в мировые.
bool quant(float dt)
Обсчёт логики игры, параметр - время, которое должно пройти в игре (в секундах).
Definition: kartiny.h:61
virtual mgVect2i screen_R() const =0
Возвращает координаты объекта в экранной системе координат.
virtual bool is_key_pressed(int vkey) const =0
Возвращает true, если на клавиатуре нажата кнопка vkey.
Definition: qd_minigame_interface.h:78
int load_game(const qdEngineInterface *engine_interface, const qdMinigameSceneInterface *scene_interface, const char *buffer, int buffer_size)
Загрузка данных, вызывается при загрузке сцены, на которую повешена миниигра.
Definition: kartiny.h:314
Definition: qd_minigame_interface.h:365
int save_game(const qdEngineInterface *engine_interface, const qdMinigameSceneInterface *scene_interface, char *buffer, int buffer_size)
Сохранение данных, вызывается при сохранении сцены, на которую повешена миниигра. ...
Definition: kartiny.h:310
virtual bool is_state_active(const char *state_name) const =0
Возвращает true, если состояние с именем state_name включено в данный момент.
Базовый класс для игровых ресурсов.
Definition: console.h:28
virtual float screen_depth(const mgVect3f &pos) const =0
Возвращает "глубину" точки с координатами pos в мировой системе координат
Интерфейс к динамическому объекту.
Definition: qd_minigame_interface.h:230
bool init(const qdEngineInterface *engine_interface)
Инициализация игры.
Definition: kartiny.h:37
Интерфейс к сцене.
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 new_game(const qdEngineInterface *engine_interface)
Инициализация миниигры, вызывается при старте и перезапуске игры.
Definition: kartiny.h:306
T MAX(T a, T b)
Definition: util.h:62
void void void void void debugC(int level, uint32 debugChannels, MSVC_PRINTF const char *s,...) GCC_PRINTF(3
T ABS(T x)
Definition: util.h:56
bool finit()
Деинициализация игры.
Definition: kartiny.h:295