diff --git a/data/room/32.room b/data/room/32.room index 1e3bb4c..24410db 100644 --- a/data/room/32.room +++ b/data/room/32.room @@ -38,4 +38,5 @@ y1=2 x2=10 y2=2 color=white +frame=0 [/enemy] \ No newline at end of file diff --git a/source/enemy.cpp b/source/enemy.cpp index 6d3cfad..4075fed 100644 --- a/source/enemy.cpp +++ b/source/enemy.cpp @@ -33,8 +33,15 @@ Enemy::Enemy(enemy_t enemy) collider = getRect(); - // Coloca un frame al azar - sprite->setCurrentFrame(rand() % sprite->getNumFrames()); + // Coloca un frame al azar o el designado + if (enemy.frame == -1) + { + sprite->setCurrentFrame(rand() % sprite->getNumFrames()); + } + else + { + sprite->setCurrentFrame(std::min(enemy.frame, sprite->getNumFrames() - 1)); + } } // Destructor @@ -95,10 +102,10 @@ void Enemy::checkPath() { sprite->setPosY(y1); } - + // Cambia el sentido sprite->setVelY(sprite->getVelY() * (-1)); - + // Invierte el sprite if (doFlip) { diff --git a/source/enemy.h b/source/enemy.h index 2580788..96b0a11 100644 --- a/source/enemy.h +++ b/source/enemy.h @@ -27,6 +27,7 @@ struct enemy_t int y2; // Limite inferior de la ruta en el eje Y bool flip; // Indica si el enemigo hace flip al terminar su ruta bool mirror; // Indica si el enemigo está volteado verticalmente + int frame; // Frame inicial para la animación del enemigo std::string color; // Color del enemigo palette_e palette; // Paleta de colores }; diff --git a/source/room.cpp b/source/room.cpp index 252ec0d..2b67ff0 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -79,6 +79,7 @@ room_t loadRoomFile(std::string file_path, bool verbose) enemy_t enemy; enemy.flip = false; enemy.mirror = false; + enemy.frame = -1; enemy.palette = p_zxspectrum; do @@ -327,6 +328,11 @@ bool setEnemy(enemy_t *enemy, std::string var, std::string value) enemy->color = value; } + else if (var == "frame") + { + enemy->frame = std::stoi(value); + } + else if (var == "[/enemy]" || var == "tileSetFile" || var.substr(0, 1) == "#") { }