From 4f6c92c8d182a209e99cdcdb04cb7b95dfbb7b48 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 30 Aug 2024 13:12:04 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1adido=20cambio=20de=20color=20en=20las?= =?UTF-8?q?=20nubes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/gfx/game_clouds1.png | Bin 2431 -> 9403 bytes data/gfx/game_clouds2.png | Bin 5226 -> 25675 bytes source/background.cpp | 160 +++++++++++++++++++++++++------------- source/background.h | 142 +++++++++++++++++---------------- source/director.cpp | 2 +- source/game.cpp | 8 +- source/hiscore_table.cpp | 2 +- 7 files changed, 189 insertions(+), 125 deletions(-) diff --git a/data/gfx/game_clouds1.png b/data/gfx/game_clouds1.png index 77011137fa2cb8711f991bdfd362ea6424d9f675..3b239cdf92ecdce67f43dfe95f6e33a35dbbaa0f 100644 GIT binary patch literal 9403 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 =IIH6==S?tTmtQ9&M86Uk z6|64b=_7dHan%jM#)AV`=GBW61|onSU*|KDG`LJ#lXX;Egtc1BBH}YU7Ks0kR9aL# zNsaSgyHGMFC`w*Tx)k06;3Jxp)O-o?a38B)8t|qRMXp0IWp8+#RfI7kclgY zQj20;U&WEdL7ZRbFR>)>p1=fFIhhhwRrzU2@_ww@KohAAzwtCjpuN&?Ww4v8`tXvj zuZF|*_@&LquA%09eC)$=nij(%=BQAIU+B4dlh%a@3b?~EfklvKu7hDTu5Z8dmPN3x zO#fXhfsM+HI(+Vscu&@y63Mk$sqm7n-7B!?GZrf&_!o7nV&>1+uF3W1A}W?ktm&tu zP8KAKST;m$yccX9tm2H+ryAKQD@4WNTOLw{A=eNuoTh=-yZk59j>cgnt6vobz7Q15 zK|Ad6u!j-;GkIYW`%>vz?v=vNA13g;0@ovhky%`7FCV=LJxq=jFol@|h3$zI&7(e7 zx@1yUW1wBL(YDD2kSFFU z?Du>puMxTYf{kkwK2lFNJ@Rj;zjY;m=+DlS70OHb;3`fXai~nSO>r29RqH>c&2#j? z6lTxz#EH)_PM#Wsw4u;$2Nsv%7YjT`XddmtW+`z*4fy)oGI@J>MfH8_f?YO~;t@kG z6uR9z!Qr8_OayGLa;&@8>QAJ!BB9t|ZP`MyVy_g|I5h2&Z`P$e)yk}`DS&ulOlB(Y z)wZ|)4!nef0*KwZu>sdi{-Ni76(yj+>jy_v2rtYLAdVuk;lLwnrcUrt!JDg(py~r&g5ngj-UuQoG4>D1!aw{mkslV5_4$h=z*l8RzM^^WRJo&PlX^R z+$J-ox#hV#1t~-mOa}NxSSeVw^lcgO_aNcz#&Y!}U7Z?8DOMq;blGP2kAG?y!p8;x zkZpcH3!tB+6*vSeUvBqH5@yWG(FtWF0Tw0an*|*Ik`^c*WAikd9(wmjL$T^1Ni8*u z={w6+*tXX|>XccZ+SX@f3S{A937a;)9@wDW7UpyJI;Jr!t#?BndKsy04RKu@?S9-l zUb~k2A$01VW5nap?ATF5(5$s}=3a7;EaNp5{|?e*4-T0z{-dGh#(bMc#4++jk9#RT zmYbCn1?r<0hia&5a=i@#nkA*sr9_#Djj&+fe2^1RXV>KY9hIFV;G*tm%#jUo)*4MS zS_&#JVG$yJ$@r%B2D6!{myy4-6pK4Acj~m&+eVA#ba!!J%#tGKq*iS(V-2aSIHgS8 zINv&?XpBEq63Ns zm7zngKILR1f80q`W)A4E)?5+Ejle0{X#2_dih@@}QX0+y6&ItvO(f-K^aS0G?E_uOSHY7S?9(Go$gq+< z72fq;-K|iMMEpyfcJ%_-_q|A~4N#Uc`M>39s7n}#J=uh1e2T%YyO`29-a2Fjnqx05 zT3r3Uj3$|RLFU%ad4&$~l4eqNKEvMR`O>@sQQgEkMA|3|(>onHb z@=djBfnJ2q)Ai1RisOIC2zSMHB;H$enJ;~{GBxPq(%tlrltIevO;az>)Kf^p>d!ib zHYwXHcMYYPta0e!oOHgIv~4dz)cTa1j16@Z`0UYe)LG;9=h5$nk^pj2%97RMra}J& D8~7S4 delta 2418 zcmV-&361uPx;IY~r8RCt{2oy~3( zM-azrBG!o_!_7e}K(P@xoGck}jZ6;Cg@+(F=OL0)c!+Qd58+EVWUU+`MV2jbA_mzT z*$5GC*g~?`Qs=PLZcT0V*G%_(?DS7U*z?iT-P8S_s_yD`27ie}A}C5Jg+FImmerY; z(9Bg~5{bH@VnLY~;h2j;BobA?#ej-{PAGKOx0TixAkkh-9k6MbEC&~{knSs=tLkZG zrW5U_O{V+a=`^n&-d_L!z{bi#khGgvUK5|yoq@#s!^J@$g|?LOO5GVq%qO;~MVl$Ub952(OYVzO zO6{Lbe}D0I1ONcbSL*H8bx+yOyl%jQSdJo)PLDAr8=#GWVKZ0U` zVE#f2nyoyxdaZ)F77W_>@OJ=vgSB0gn8hXvx_ae;j(_L*yVG48`hA&PgSCEd=Ge~B z1zcO23dj0loabj*meKk!3297f?G&*)=iu->SNWzdf;2s*%NM_nzQ~8SKktOlgl?!s zrdUHv%i6{c_Rppkh9nr$xzIByl2A}OAsDgd;Ay&&A6(QowuuKdQ*|b5*R7T!BE#=7 zb?_o-n}5z@ThWOIcU6$(E2^|u=w^=q>J^Pz8nE=DLKIj^S5jwe2vW!9jgy+l(lc%6 zrF7?+81WUc0;6>4O6_9j=mLh9vq`S?doyD4;eELQTT`1gQAHc8v=N(LJpV%LI&qoj z_%HwDLa3U((ktS;q(4%d7*I8=YeIWj=I+G!TMtP z0Z$XYBIHvSK2#zYCb0k*SNOH1g-NB@1}9C=@u?`25b!k1G|t2rlep@HSt+Fkhv#Z= zcz>>TjxMymy-l!O-W|W6KI`f8gBd}fV;K8qL}{8 zs;N^+m5PKOn55@1Ptvv0FFP(V~ke^@pT(q ztdK-GO!X>R9vdrTYc$puS0@(SN&v_U1r?7MZ%5XTB2U*v7=57qFqEYnOfYE1OxNw7 z0c`J{06>0Uhbh9H}3!dCVn92@!h}T%Ac<5(l0i7eouq=}r&0NN|gSoHNGhB*921r4$tdgts@^QFU&~PY-YA?&V_<_`75c__k-A zwc?Ui*>+#*W}R3d)MPt;^DZYAe86a}-C!2B7ct_jN2)X^rRu>=xW`uAPT$mtF~>K=8pF zo2p``rGZ)qriD{bR5WaY5o41TpUOqCpyibYeT$@>s1_<5R2+2tc5pGdp1RgJo`LO} zMls`Y+Fqy-NY=CtpDEZ%1jBcFQ5S4NL8aw!_tL6BmGgtMGatL|Wc%`hxOlS8B@XMw&TwbuL;i>YD=OH%&2Zrqh&t z4Sb+hC_uIOlSHLVG;Yzs?HIU1#M|@2M6J7q$Fd@*`r4GZ ztWu+uFq3b4!9E9W#lAWR2KJ(|_E4%=I5KipgX*nAkIi8k ztV35Y(x1E17^QL+DZ8!nOKzSN)1$i&r^o4Wmzbokyhlza3mpQfA@R_6bW==o@(KB` zoN>4a;QAyw6;Fl5WmmVN#2R~R19N3zR5^gv)h|pDY~wT3E%1$id@?wJrO`+09uOhn zAp!TVW;@y5sZw1Kl2#Uw`p0Ros@aqYI^sgZ-3PjD0`l$GUpcuX9CRB^+w9SCsV<0v zL?;WKs1DmKh>y@?T9cs&6n}~Mm}WsZHu0e1BXxe=ek?BFLPr|Gi_k3?l3*kf5z$!~ zMgL&6ZJiSS?7B@Pz;wyE%a}>mMWeF?PgH}>!Z2AJWyhmjcY*_ur)AT4n4Y+;onU)Q7d&mt9o7=N$Q!X k1XC=AODAp8J{Dc(f0R!m3O=N8fB*mh07*qoM6N<$f>-;jc>n+a diff --git a/data/gfx/game_clouds2.png b/data/gfx/game_clouds2.png index 3a6e255c849cd1488dc9fdbdb97604b64d412052..efb1401bb17d293acc4863fcc77e4ab1d646ddbf 100644 GIT binary patch literal 25675 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 literal 5226 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 diff --git a/source/background.cpp b/source/background.cpp index 525121c..9da64ca 100644 --- a/source/background.cpp +++ b/source/background.cpp @@ -1,11 +1,10 @@ #include "background.h" // Constructor -Background::Background(SDL_Renderer *renderer, Screen *screen, Asset *asset, param_t *param) +Background::Background(SDL_Renderer *renderer, Asset *asset, param_t *param) { // Copia los punteros this->renderer = renderer; - this->screen = screen; this->asset = asset; this->param = param; @@ -22,38 +21,46 @@ Background::Background(SDL_Renderer *renderer, Screen *screen, Asset *asset, par color = {param->backgroundAttenuateColor.r, param->backgroundAttenuateColor.g, param->backgroundAttenuateColor.b}; alphaColorText = alphaColorTextTemp = param->backgroundAttenuateAlpha; + // Carga las texturas + buildingsTexture = new Texture(renderer, asset->get("game_buildings.png")); + topCloudsTexture = new Texture(renderer, asset->get("game_clouds1.png")); + bottomCloudsTexture = new Texture(renderer, asset->get("game_clouds2.png")); + grassTexture = new Texture(renderer, asset->get("game_grass.png")); + gradientsTexture = new Texture(renderer, asset->get("game_sky_colors.png")); + gradientRect[0] = {0, 0, rect.w, rect.h}; gradientRect[1] = {rect.w, 0, rect.w, rect.h}; gradientRect[2] = {0, rect.h, rect.w, rect.h}; gradientRect[3] = {rect.w, rect.h, rect.w, rect.h}; - // Carga las texturas - buildingsTexture = new Texture(renderer, asset->get("game_buildings.png")); - clouds1Texture = new Texture(renderer, asset->get("game_clouds1.png")); - clouds2Texture = new Texture(renderer, asset->get("game_clouds2.png")); - grassTexture = new Texture(renderer, asset->get("game_grass.png")); - gradientsTexture = new Texture(renderer, asset->get("game_sky_colors.png")); + const int topCloudsTextureHeight = topCloudsTexture->getHeight() / 4; + const int bottomCloudsTextureHeight = bottomCloudsTexture->getHeight() / 4; + for (int i = 0; i < 4; ++i) + { + topCloudsRect[i] = {0, i * topCloudsTextureHeight, topCloudsTexture->getWidth(), topCloudsTextureHeight}; + bottomCloudsRect[i] = {0, i * bottomCloudsTextureHeight, bottomCloudsTexture->getWidth(), bottomCloudsTextureHeight}; + } // Crea los sprites const int clouds1y = base - 165; const int clouds2y = base - 101; const float clouds1speed = 0.1f; const float clouds2speed = 0.05f; - clouds1A = new MovingSprite(0, clouds1y, rect.w, clouds1Texture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, clouds1Texture); - clouds1B = new MovingSprite(rect.w, clouds1y, rect.w, clouds1Texture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, clouds1Texture); + topCloudsSprite_A = new MovingSprite(0, clouds1y, rect.w, topCloudsTexture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, topCloudsTexture); + topCloudsSprite_B = new MovingSprite(rect.w, clouds1y, rect.w, topCloudsTexture->getHeight(), -clouds1speed, 0.0f, 0.0f, 0.0f, topCloudsTexture); - clouds2A = new MovingSprite(0, clouds2y, rect.w, clouds2Texture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, clouds2Texture); - clouds2B = new MovingSprite(rect.w, clouds2y, rect.w, clouds2Texture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, clouds2Texture); + bottomCloudsSprite_A = new MovingSprite(0, clouds2y, rect.w, bottomCloudsTexture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, bottomCloudsTexture); + bottomCloudsSprite_B = new MovingSprite(rect.w, clouds2y, rect.w, bottomCloudsTexture->getHeight(), -clouds2speed, 0.0f, 0.0f, 0.0f, bottomCloudsTexture); buildingsSprite = new Sprite(0, 0, buildingsTexture->getWidth(), buildingsTexture->getHeight(), buildingsTexture); gradientSprite = new Sprite(0, 0, rect.w, rect.h, gradientsTexture); grassSprite = new Sprite(0, 0, grassTexture->getWidth(), grassTexture->getHeight() / 2, grassTexture); // Inicializa objetos - clouds1A->setSpriteClip(0, 0, clouds1Texture->getWidth(), clouds1Texture->getHeight()); - clouds1B->setSpriteClip(0, 0, clouds1Texture->getWidth(), clouds1Texture->getHeight()); - clouds2A->setSpriteClip(0, 0, clouds2Texture->getWidth(), clouds2Texture->getHeight()); - clouds2B->setSpriteClip(0, 0, clouds2Texture->getWidth(), clouds2Texture->getHeight()); + topCloudsSprite_A->setSpriteClip(0, 0, topCloudsTexture->getWidth(), topCloudsTexture->getHeight()); + topCloudsSprite_B->setSpriteClip(0, 0, topCloudsTexture->getWidth(), topCloudsTexture->getHeight()); + bottomCloudsSprite_A->setSpriteClip(0, 0, bottomCloudsTexture->getWidth(), bottomCloudsTexture->getHeight()); + bottomCloudsSprite_B->setSpriteClip(0, 0, bottomCloudsTexture->getWidth(), bottomCloudsTexture->getHeight()); buildingsSprite->setPosY(base - buildingsSprite->getHeight()); grassSprite->setPosY(base - grassSprite->getHeight()); @@ -72,15 +79,15 @@ Background::Background(SDL_Renderer *renderer, Screen *screen, Asset *asset, par Background::~Background() { delete buildingsTexture; - delete clouds1Texture; - delete clouds2Texture; + delete topCloudsTexture; + delete bottomCloudsTexture; delete grassTexture; delete gradientsTexture; - delete clouds1A; - delete clouds1B; - delete clouds2A; - delete clouds2B; + delete topCloudsSprite_A; + delete topCloudsSprite_B; + delete bottomCloudsSprite_A; + delete bottomCloudsSprite_B; delete buildingsSprite; delete gradientSprite; delete grassSprite; @@ -95,7 +102,7 @@ void Background::update() updateAlphaColorText(); // Actualiza las nubes - updateCLouds(); + updateClouds(); // Calcula el frame de la hierba grassSprite->setSpriteClip(0, (10 * (counter / 20 % 2)), 320, 10); @@ -109,6 +116,56 @@ void Background::update() fillCanvas(); } +// Dibuja el gradiente de fondo +void Background::renderGradient() +{ + // Dibuja el gradiente 2 + gradientsTexture->setAlpha(255); + gradientSprite->setSpriteClip(gradientRect[(gradientNumber + 1) % 4]); + gradientSprite->render(); + + // Dibuja el gradiente 1 con una opacidad cada vez menor + gradientsTexture->setAlpha(alpha); + gradientSprite->setSpriteClip(gradientRect[gradientNumber]); + gradientSprite->render(); +} + +// Dibuja las nubes de arriba +void Background::renderTopClouds() +{ + // Dibuja el primer conjunto de nubes + topCloudsTexture->setAlpha(255); + topCloudsSprite_A->setSpriteClip(topCloudsRect[(gradientNumber + 1) % 4]); + topCloudsSprite_A->render(); + topCloudsSprite_B->setSpriteClip(topCloudsRect[(gradientNumber + 1) % 4]); + topCloudsSprite_B->render(); + + // Dibuja el segundo conjunto de nubes + topCloudsTexture->setAlpha(alpha); + topCloudsSprite_A->setSpriteClip(topCloudsRect[gradientNumber]); + topCloudsSprite_A->render(); + topCloudsSprite_B->setSpriteClip(topCloudsRect[gradientNumber]); + topCloudsSprite_B->render(); +} + +// Dibuja las nubes de abajo +void Background::renderBottomClouds() +{ + // Dibuja el primer conjunto de nubes + bottomCloudsTexture->setAlpha(255); + bottomCloudsSprite_A->setSpriteClip(bottomCloudsRect[(gradientNumber + 1) % 4]); + bottomCloudsSprite_A->render(); + bottomCloudsSprite_B->setSpriteClip(bottomCloudsRect[(gradientNumber + 1) % 4]); + bottomCloudsSprite_B->render(); + + // Dibuja el segundo conjunto de nubes + bottomCloudsTexture->setAlpha(alpha); + bottomCloudsSprite_A->setSpriteClip(bottomCloudsRect[gradientNumber]); + bottomCloudsSprite_A->render(); + bottomCloudsSprite_B->setSpriteClip(bottomCloudsRect[gradientNumber]); + bottomCloudsSprite_B->render(); +} + // Compone todos los elementos del fondo en la textura void Background::fillCanvas() { @@ -116,21 +173,14 @@ void Background::fillCanvas() SDL_Texture *temp = SDL_GetRenderTarget(renderer); SDL_SetRenderTarget(renderer, canvas); - // Dibuja el gradiente 2 - gradientSprite->setSpriteClip(gradientRect[(gradientNumber + 1) % 4]); - gradientsTexture->setAlpha(255); - gradientSprite->render(); + // Dibuja el gradiente de fondo + renderGradient(); - // Dibuja el gradiente 1 con una opacidad cada vez menor - gradientSprite->setSpriteClip(gradientRect[gradientNumber]); - gradientsTexture->setAlpha(alpha); - gradientSprite->render(); + // Dibuja las nubes de arriba + renderTopClouds(); - // Dibuja las nubes - clouds1A->render(); - clouds1B->render(); - clouds2A->render(); - clouds2B->render(); + // Dibuja las nubes de abajo + renderBottomClouds(); // Dibuja los edificios buildingsSprite->render(); @@ -156,8 +206,8 @@ void Background::render() void Background::reloadTextures() { buildingsTexture->reLoad(); - clouds1Texture->reLoad(); - clouds2Texture->reLoad(); + topCloudsTexture->reLoad(); + bottomCloudsTexture->reLoad(); grassTexture->reLoad(); gradientsTexture->reLoad(); } @@ -248,38 +298,38 @@ void Background::updateAlphaColorText() } // Actualiza las nubes -void Background::updateCLouds() +void Background::updateClouds() { // Aplica la velocidad calculada a las nubes - clouds1A->setVelX(cloudsSpeed); - clouds1B->setVelX(cloudsSpeed); - clouds2A->setVelX(cloudsSpeed / 2); - clouds2B->setVelX(cloudsSpeed / 2); + topCloudsSprite_A->setVelX(cloudsSpeed); + topCloudsSprite_B->setVelX(cloudsSpeed); + bottomCloudsSprite_A->setVelX(cloudsSpeed / 2); + bottomCloudsSprite_B->setVelX(cloudsSpeed / 2); // Mueve las nubes - clouds1A->move(); - clouds1B->move(); - clouds2A->move(); - clouds2B->move(); + topCloudsSprite_A->move(); + topCloudsSprite_B->move(); + bottomCloudsSprite_A->move(); + bottomCloudsSprite_B->move(); // Calcula el offset de las nubes - if (clouds1A->getPosX() < -clouds1A->getWidth()) + if (topCloudsSprite_A->getPosX() < -topCloudsSprite_A->getWidth()) { - clouds1A->setPosX(clouds1A->getWidth()); + topCloudsSprite_A->setPosX(topCloudsSprite_A->getWidth()); } - if (clouds1B->getPosX() < -clouds1B->getWidth()) + if (topCloudsSprite_B->getPosX() < -topCloudsSprite_B->getWidth()) { - clouds1B->setPosX(clouds1B->getWidth()); + topCloudsSprite_B->setPosX(topCloudsSprite_B->getWidth()); } - if (clouds2A->getPosX() < -clouds2A->getWidth()) + if (bottomCloudsSprite_A->getPosX() < -bottomCloudsSprite_A->getWidth()) { - clouds2A->setPosX(clouds2A->getWidth()); + bottomCloudsSprite_A->setPosX(bottomCloudsSprite_A->getWidth()); } - if (clouds2B->getPosX() < -clouds2B->getWidth()) + if (bottomCloudsSprite_B->getPosX() < -bottomCloudsSprite_B->getWidth()) { - clouds2B->setPosX(clouds2B->getWidth()); + bottomCloudsSprite_B->setPosX(bottomCloudsSprite_B->getWidth()); } } \ No newline at end of file diff --git a/source/background.h b/source/background.h index 5931b8d..928d1fe 100644 --- a/source/background.h +++ b/source/background.h @@ -14,7 +14,7 @@ El objeto tiene un tamaño total definido en la variable "rect". En principio este tamaño coincide con el tamaño de la ventana o resolución del juego, pero se pinta - solo el rectangulo definido en srcRect en la posición de la pantalla definida en + solo el rectangulo definido en srcRect en la posición de la pantalla definida en dstRect. Utiliza varios métodos para definir su comportamiento: @@ -44,92 +44,102 @@ class Background { private: - // Objetos y punteros - SDL_Renderer *renderer; // El renderizador de la ventana - Screen *screen; // Objeto encargado de dibujar en pantalla - Asset *asset; // Objeto que gestiona todos los ficheros de recursos + // Objetos y punteros + SDL_Renderer *renderer; // El renderizador de la ventana + Asset *asset; // Objeto que gestiona todos los ficheros de recursos - Texture *buildingsTexture; // Textura con los edificios de fondo - Texture *clouds1Texture; // Textura con las nubes de fondo - Texture *clouds2Texture; // Textura con las nubes de fondo - Texture *grassTexture; // Textura con la hierba del suelo - Texture *gradientsTexture; // Textura con los diferentes colores de fondo del juego + Texture *buildingsTexture; // Textura con los edificios de fondo + Texture *topCloudsTexture; // Textura con las nubes de fondo + Texture *bottomCloudsTexture; // Textura con las nubes de fondo + Texture *grassTexture; // Textura con la hierba del suelo + Texture *gradientsTexture; // Textura con los diferentes colores de fondo del juego - MovingSprite *clouds1A; // Sprite para las nubes superiores - MovingSprite *clouds1B; // Sprite para las nubes superiores - MovingSprite *clouds2A; // Sprite para las nubes inferiores - MovingSprite *clouds2B; // Sprite para las nubes inferiores + MovingSprite *topCloudsSprite_A; // Sprite para las nubes superiores + MovingSprite *topCloudsSprite_B; // Sprite para las nubes superiores + MovingSprite *bottomCloudsSprite_A; // Sprite para las nubes inferiores + MovingSprite *bottomCloudsSprite_B; // Sprite para las nubes inferiores - Sprite *buildingsSprite; // Sprite con los edificios de fondo - Sprite *gradientSprite; // Sprite con los graficos del degradado de color de fondo - Sprite *grassSprite; // Sprite para la hierba + Sprite *buildingsSprite; // Sprite con los edificios de fondo + Sprite *gradientSprite; // Sprite con los graficos del degradado de color de fondo + Sprite *grassSprite; // Sprite para la hierba - SDL_Texture *canvas; // Textura para componer el fondo - SDL_Texture *colorTexture; // Textura para atenuar el fondo + SDL_Texture *canvas; // Textura para componer el fondo + SDL_Texture *colorTexture; // Textura para atenuar el fondo - param_t *param; // Puntero con todos los parametros del programa + param_t *param; // Puntero con todos los parametros del programa - // Variables - SDL_Rect gradientRect[4]; // Vector con las coordenadas de los 4 degradados para el cielo - int gradientNumber; // Indica el número de degradado de fondo que se va a dibujar - int alpha; // Transparencia entre los dos degradados - float cloudsSpeed; // Velocidad a la que se desplazan las nubes - float transition; // Nivel de transición del fondo 0..1 - int counter; // Contador interno - SDL_Rect rect; // Tamaño del objeto fondo - SDL_Rect srcRect; // Parte del objeto fondo que se va a dibujará en pantalla - SDL_Rect dstRect; // Posición donde dibujar la parte del objeto fondo que se dibujará en pantalla - int base; // Linea de fondo coincidente con el area inferior de la zona de juego - color_t color; // Color para atenuar el fondo - int alphaColorText; // Alpha para atenuar el fondo - int alphaColorTextTemp; // Valor temporal para hacer la transición de alpha + // Variables + SDL_Rect gradientRect[4]; // Vector con las coordenadas de los 4 degradados para el cielo + SDL_Rect topCloudsRect[4]; // Vector con las coordenadas de los 4 nubes de arriba + SDL_Rect bottomCloudsRect[4]; // Vector con las coordenadas de los 4 nubes de abajo + int gradientNumber; // Indica el número de degradado de fondo que se va a dibujar + int alpha; // Transparencia entre los dos degradados + float cloudsSpeed; // Velocidad a la que se desplazan las nubes + float transition; // Nivel de transición del fondo 0..1 + int counter; // Contador interno + SDL_Rect rect; // Tamaño del objeto fondo + SDL_Rect srcRect; // Parte del objeto fondo que se va a dibujará en pantalla + SDL_Rect dstRect; // Posición donde dibujar la parte del objeto fondo que se dibujará en pantalla + int base; // Linea de fondo coincidente con el area inferior de la zona de juego + color_t color; // Color para atenuar el fondo + int alphaColorText; // Alpha para atenuar el fondo + int alphaColorTextTemp; // Valor temporal para hacer la transición de alpha - // Compone todos los elementos del fondo en la textura - void fillCanvas(); + // Dibuja el gradiente de fondo + void renderGradient(); - // Actualiza el valor de alpha - void updateAlphaColorText(); + // Dibuja las nubes de arriba + void renderTopClouds(); - // Actualiza las nubes - void updateCLouds(); + // Dibuja las nubes de abajo + void renderBottomClouds(); + + // Compone todos los elementos del fondo en la textura + void fillCanvas(); + + // Actualiza el valor de alpha + void updateAlphaColorText(); + + // Actualiza las nubes + void updateClouds(); public: - // Constructor - Background(SDL_Renderer *renderer, Screen *screen, Asset *asset, param_t *param); + // Constructor + Background(SDL_Renderer *renderer, Asset *asset, param_t *param); - // Destructor - ~Background(); + // Destructor + ~Background(); - // Actualiza la lógica del objeto - void update(); + // Actualiza la lógica del objeto + void update(); - // Dibuja el objeto - void render(); + // Dibuja el objeto + void render(); - // Establece la posición del objeto - void setPos(SDL_Rect); + // Establece la posición del objeto + void setPos(SDL_Rect); - // Vuelve a cargar las texturas - void reloadTextures(); + // Vuelve a cargar las texturas + void reloadTextures(); - // Ajusta el valor de la variable - void setCloudsSpeed(float value); + // Ajusta el valor de la variable + void setCloudsSpeed(float value); - // Ajusta el valor de la variable - void setGradientNumber(int value); + // Ajusta el valor de la variable + void setGradientNumber(int value); - // Ajusta el valor de la variable - void setTransition(float value); + // Ajusta el valor de la variable + void setTransition(float value); - // Ajusta el valor de la variable - void setSrcRect(SDL_Rect value); + // Ajusta el valor de la variable + void setSrcRect(SDL_Rect value); - // Ajusta el valor de la variable - void setDstRect(SDL_Rect value); + // Ajusta el valor de la variable + void setDstRect(SDL_Rect value); - // Establece el color de atenuación - void setColor(color_t color); + // Establece el color de atenuación + void setColor(color_t color); - // Establece la transparencia de la atenuación - void setAlpha(int alpha); + // Establece la transparencia de la atenuación + void setAlpha(int alpha); }; \ No newline at end of file diff --git a/source/director.cpp b/source/director.cpp index aaf2062..dfcdc82 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -156,7 +156,7 @@ void Director::initInput() input->bindGameControllerButton(i, input_exit, SDL_CONTROLLER_BUTTON_BACK); } - // Comprueba si ha de modificar las asignaciones por las que hay en las opciones en caso de coincidir el nombre del mando + // Mapea las asignaciones a los botones desde el archivo de configuración, si se da el caso for (int i = 0; i < numGamePads; ++i) for (int index = 0; index < (int)options->controller.size(); ++index) if (input->getControllerName(i) == options->controller[index].name) diff --git a/source/game.cpp b/source/game.cpp index 283976c..cd36f82 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -25,8 +25,8 @@ Game::Game(int playerID, int currentStage, Screen *screen, Asset *asset, Lang *l // Crea los objetos fade = new Fade(renderer, param); eventHandler = new SDL_Event(); - scoreboard = new Scoreboard(renderer, screen, asset, lang, options); - background = new Background(renderer, screen, asset, param); + scoreboard = new Scoreboard(renderer, asset, lang, options); + background = new Background(renderer, asset, param); explosions = new Explosions(); enemyFormations = new EnemyFormations(); @@ -2592,14 +2592,17 @@ void Game::checkEvents() { switch (eventHandler->key.keysym.sym) { + // CREA UN SPRITE DE 1000 PUNTOS case SDLK_h: createItemScoreSprite(param->gameWidth / 2, param->gameWidth / 2, n1000Sprite); break; + // CREA UNA POWERBALL case SDLK_1: createPowerBall(); break; + // CREA DOS BALLON4 case SDLK_2: { const int set = 0; @@ -2617,6 +2620,7 @@ void Game::checkEvents() } break; + // ACTIVA EL MODO PARA PASAR EL JUEGO AUTOMATICAMENTE case SDLK_3: autoPopBalloons = !autoPopBalloons; screen->showNotification("autoPopBalloons " + boolToString(autoPopBalloons)); diff --git a/source/hiscore_table.cpp b/source/hiscore_table.cpp index 074234a..1c0a356 100644 --- a/source/hiscore_table.cpp +++ b/source/hiscore_table.cpp @@ -18,7 +18,7 @@ HiScoreTable::HiScoreTable(Screen *screen, Asset *asset, Input *input, Lang *lan // Objetos eventHandler = new SDL_Event(); fade = new Fade(renderer, param); - background = new Background(renderer, screen, asset, param); + background = new Background(renderer, asset, param); text = new Text(asset->get("smb2.gif"), asset->get("smb2.txt"), renderer); // Crea un backbuffer para el renderizador