From b688dc6d023e0e4307c3c1f7fe580ebb3c051d51 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sun, 13 Nov 2022 18:28:02 +0100 Subject: [PATCH] =?UTF-8?q?A=C3=B1adida=20la=20opcion=20de=20que=20los=20e?= =?UTF-8?q?nemigos=20puedan=20decidir=20el=20frame=20de=20inicio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/room/32.room | 1 + source/enemy.cpp | 15 +++++++++++---- source/enemy.h | 1 + source/room.cpp | 6 ++++++ 4 files changed, 19 insertions(+), 4 deletions(-) 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) == "#") { }