From 9c35fadd55b40ccce3b23391700e7f7bc318c186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Mon, 3 Oct 2022 04:15:04 +0200 Subject: [PATCH] Trabajando en los globos --- data/gfx/balloon.png | Bin 58721 -> 0 bytes data/gfx/balloon1.ani | 37 ++++++++++ data/gfx/balloon1.png | Bin 0 -> 1955 bytes data/gfx/balloon2.ani | 37 ++++++++++ data/gfx/balloon2.png | Bin 0 -> 4858 bytes data/gfx/balloon3.ani | 37 ++++++++++ data/gfx/balloon3.png | Bin 0 -> 6683 bytes data/gfx/balloon4.ani | 37 ++++++++++ data/gfx/balloon4.png | Bin 0 -> 13322 bytes source/balloon.cpp | 164 +++++++----------------------------------- source/balloon.h | 2 +- source/director.cpp | 9 ++- source/game.cpp | 135 +++++++++++++++++++++++++++------- source/game.h | 24 +++++-- 14 files changed, 309 insertions(+), 173 deletions(-) delete mode 100644 data/gfx/balloon.png create mode 100644 data/gfx/balloon1.ani create mode 100644 data/gfx/balloon1.png create mode 100644 data/gfx/balloon2.ani create mode 100644 data/gfx/balloon2.png create mode 100644 data/gfx/balloon3.ani create mode 100644 data/gfx/balloon3.png create mode 100644 data/gfx/balloon4.ani create mode 100644 data/gfx/balloon4.png diff --git a/data/gfx/balloon.png b/data/gfx/balloon.png deleted file mode 100644 index c05e0be97d6feb3999577a02ae57d717403091e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58721 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 diff --git a/data/gfx/balloon1.ani b/data/gfx/balloon1.ani new file mode 100644 index 0000000..3fbe8c1 --- /dev/null +++ b/data/gfx/balloon1.ani @@ -0,0 +1,37 @@ +frameWidth=8 +frameHeight=8 + +[animation] +name=orange +speed=10 +loop=0 +frames=0,1,2,3,4,5,6,7,8,9 +[/animation] + +[animation] +name=blue +speed=20 +loop=0 +frames=12,13,14,15,16,17,18,19,20,21 +[/animation] + +[animation] +name=green +speed=10 +loop=0 +frames=24,25,26,27,28,29,30,31,32,33 +[/animation] + +[animation] +name=red +speed=20 +loop=0 +frames=36,37,38,39,40,41,42,43,44,45 +[/animation] + +[animation] +name=pop +speed=5 +loop=-1 +frames=48,49,50,51,52,53,54,55,56,57,58,59 +[/animation] \ No newline at end of file diff --git a/data/gfx/balloon1.png b/data/gfx/balloon1.png new file mode 100644 index 0000000000000000000000000000000000000000..d9d769ed935015b9dc4378ae5d0b13c41e2a413a GIT binary patch literal 1955 zcmV;U2VD4xP)Px+T}ebiRCt{2nOjU8RT#(rv+QKCyJ6E-BWl}#R3NS~cGQlV+QwdE8h!Ag57d(Q z$fGyXG$zJqY+`Da1h+&RFl^h0rc|PZO#v?pSlr^$)}R5~D#5ivxh%8gvdaz}AJ{X@ zb&;JR)MWn2ggx^+-~W7bX3m~(76xg}^*v1>Q%-3&BX8S0GtX8|YVNqWC9E6}gbrf! z%-oC^$$Vq34*>92;#Ugi_g&!uz~;u>>`ib0K&Us)#ivBK+*~eyQ-YhA6g|PlVNa+x z&gu0Tj?KIMH50C2MBvqZq;}fh-<05j5rNl?Q#0Z6HzhRw{-y*s9Gf@HFVq{C^3#h4 zfcTW?4h3(!f)RmN_mSFZ|4?sSk>67DV@6K;;m6i727ol^v%A+LFa5bNKgo8rB>@1_ zNx}vr0x#$OrUX}*FEEAqU}>L;wN9S$=_Fx;jl(SUFU()?2mSy61S10fXHz0Y$5#6T zKu>7IFu&;}VY}MKq+ElMq#{1l8|S8zgaH=vE6h)_6Kg%Z{QBhiQGc4>QuAX*4tfFd zlh5v64|+j*QuD(6q^Wr7K@Y3_&0gPf*(1Vx7~^AqpoOKC$H{9+cdf8{#q_t)~TuU6V*pu z(fzd=|LFc&ZuZ7)xBTMN{xm@u34Y_;$n;4Nn7J6jh95oXwEStswg>CnXDjKq zAjbnQs8F|}W%JBDTR8!M2$kf`sHmuOiBL%x??;Tym*!@~Q1kw=J|6&-tS^;Hv5z-6 zc>u7vF*kb?902fTV=Xrt8+FUgQ(3rdTRJZG7poUlX zp>68lP!-@#25L0#3B9MfT@6(MjekQ`fQt={8Rl1iu1?BNFCGBK#z)=Z@4H+l12w$5 z4{cNb`g3)P{OZruabx4g^J7K~5h}_0>d#ZNQwc>W_UKcOA-roR0Kj{+S`%2h)rat| zh400Jx9d`|byKVnUn<^vv>I#2-BO($TQ|j8>3`p+U!-Pdk}DE#$qLY${NH}=H4G}< z>OIg(4Zo_~sXj^q*|R1!JQJG_SE z9bQAWo`0I;9bRK|88;(o`KS%mOUve&dA73uAF#@j-UEc!H)O1XZEnoXh@s{=k38T5 zfVu1cNV|*olPC`WHaF(hya#;K!A*_d@m&7&E6;CjJ^FQY?2bF|S)(i59OkdJDt{BF zZJOMfmM|A?4r}WCz-NuFGc93_|CyFBHx|3&mS3FOe{%ee=TcRpM=u@#rel-t9{&Yb zxH-(L`_MM^zt$R2)-y^a4L}!S2RACbxQdsQlgZ#sL?R>vn&B1?~@{FftXlcB4CPX5l{H$c7# z(Wi(GzPJA&n_IC7(+{g%NB`e>wzA&?R$0<}K+cJSsyY{nI@spM+>97%Uhv2!9{>zo zACyY5xr);~0NC7^TUrGTTpx4+FsyTJo|$JO`afZQ;QC-ncAnp~d853a%`@|?C0_w7 zJvMFLh`}3wsr%YIGtWv+#`_UN1dyB)2LS-oe6HfOtPZw$CT>Rddw@keTP@xIGNK%S zxzCaTY-N@MSe*Qhj$7#HxCQw+E7bDZ0n+l?0g|bmssG)e?IlG-@3T>#|0+g4`Eot~ z{DTV}(knr3-rj#xvpNO_1|(ikP@v)J3Ef+FR?%mBNfCKD|2g~;pGW{S)2_ z1(;J;S-cerXeOb2%R%yZo&)7u4raCd&GHpn6@-isLPkh?`!&Tu&s#Bu-uL<4_8q@k pTBvhX`+)lU-`2{>E<;yY{{jf=wteG+k&plY002ovPDHLkV1mLy*U$g} literal 0 HcmV?d00001 diff --git a/data/gfx/balloon2.ani b/data/gfx/balloon2.ani new file mode 100644 index 0000000..bbc4d86 --- /dev/null +++ b/data/gfx/balloon2.ani @@ -0,0 +1,37 @@ +frameWidth=13 +frameHeight=13 + +[animation] +name=orange +speed=10 +loop=0 +frames=0,1,2,3,4,5,6,7,8,9 +[/animation] + +[animation] +name=blue +speed=20 +loop=0 +frames=12,13,14,15,16,17,18,19,20,21 +[/animation] + +[animation] +name=green +speed=10 +loop=0 +frames=24,25,26,27,28,29,30,31,32,33 +[/animation] + +[animation] +name=red +speed=20 +loop=0 +frames=36,37,38,39,40,41,42,43,44,45 +[/animation] + +[animation] +name=pop +speed=5 +loop=-1 +frames=48,49,50,51,52,53,54,55,56,57,58,59 +[/animation] \ No newline at end of file diff --git a/data/gfx/balloon2.png b/data/gfx/balloon2.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d3e3bd5de52adf75d2ec5595464132c6177a02 GIT binary patch literal 4858 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 literal 0 HcmV?d00001 diff --git a/data/gfx/balloon3.ani b/data/gfx/balloon3.ani new file mode 100644 index 0000000..e1fd440 --- /dev/null +++ b/data/gfx/balloon3.ani @@ -0,0 +1,37 @@ +frameWidth=21 +frameHeight=21 + +[animation] +name=orange +speed=10 +loop=0 +frames=0,1,2,3,4,5,6,7,8,9 +[/animation] + +[animation] +name=blue +speed=20 +loop=0 +frames=12,13,14,15,16,17,18,19,20,21 +[/animation] + +[animation] +name=green +speed=10 +loop=0 +frames=24,25,26,27,28,29,30,31,32,33 +[/animation] + +[animation] +name=red +speed=20 +loop=0 +frames=36,37,38,39,40,41,42,43,44,45 +[/animation] + +[animation] +name=pop +speed=5 +loop=-1 +frames=48,49,50,51,52,53,54,55,56,57,58,59 +[/animation] \ No newline at end of file diff --git a/data/gfx/balloon3.png b/data/gfx/balloon3.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd9067f5e78447fbd62f9a7ec1ab88eaf4c5a47 GIT binary patch literal 6683 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 u9-C=eQO9Ji7YRM_ol*8L9Lt^uGYzdO!#O literal 0 HcmV?d00001 diff --git a/data/gfx/balloon4.ani b/data/gfx/balloon4.ani new file mode 100644 index 0000000..0e3f214 --- /dev/null +++ b/data/gfx/balloon4.ani @@ -0,0 +1,37 @@ +frameWidth=37 +frameHeight=37 + +[animation] +name=orange +speed=10 +loop=0 +frames=0,1,2,3,4,5,6,7,8,9 +[/animation] + +[animation] +name=blue +speed=20 +loop=0 +frames=12,13,14,15,16,17,18,19,20,21 +[/animation] + +[animation] +name=green +speed=10 +loop=0 +frames=24,25,26,27,28,29,30,31,32,33 +[/animation] + +[animation] +name=red +speed=20 +loop=0 +frames=36,37,38,39,40,41,42,43,44,45 +[/animation] + +[animation] +name=pop +speed=5 +loop=-1 +frames=48,49,50,51,52,53,54,55,56,57,58,59 +[/animation] \ No newline at end of file diff --git a/data/gfx/balloon4.png b/data/gfx/balloon4.png new file mode 100644 index 0000000000000000000000000000000000000000..ec50a17eb5c6e1d390d3ae79661a9a8c5e83cdea GIT binary patch literal 13322 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 H<5&L!QQR#a literal 0 HcmV?d00001 diff --git a/source/balloon.cpp b/source/balloon.cpp index 697926c..40060e1 100644 --- a/source/balloon.cpp +++ b/source/balloon.cpp @@ -2,22 +2,11 @@ #include "balloon.h" // Constructor -Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, SDL_Renderer *renderer) +Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, std::string file, SDL_Renderer *renderer) { - mSprite = new AnimatedSprite(); + mSprite = new AnimatedSprite(texture, renderer, file); disable(); - const Uint8 NUM_FRAMES_BALLON = 10; - const Uint8 NUM_FRAMES_BALLON_POP = 12; - const Uint8 NUM_FRAMES_BALLON_BORN = 10; - - const Uint8 OFFSET_ORANGE_BALLOONS = 58 * 0; - const Uint8 OFFSET_BLUE_BALLOONS = 58 * 1; - const Uint8 OFFSET_GREEN_BALLOONS = 58 * 2; - const Uint8 OFFSET_PURPLE_BALLOONS = 58 * 3; - const Uint8 OFFSET_POWER_BALL = 58 * 4; - const int OFFSET_EXPLOSIONS = 58 * 5; - switch (kind) { case BALLOON_1: @@ -42,22 +31,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c // Amenaza que genera el globo mMenace = 1; - // Establece los frames de cada animación - for (int i = 0; i < NUM_FRAMES_BALLON; i++) - { - mSprite->setAnimationFrames(BALLOON_MOVING_ANIMATION, i, 50 + OFFSET_ORANGE_BALLOONS, 21 + (37 * i), getWidth(), getHeight()); - } - - for (int i = 0; i < NUM_FRAMES_BALLON_BORN; i++) - { - mSprite->setAnimationFrames(BALLOON_BORN_ANIMATION, i, 50 + OFFSET_BLUE_BALLOONS, 21 + (37 * i), getWidth(), getHeight()); - } - - for (int i = 0; i < NUM_FRAMES_BALLON_POP; i++) - { - mSprite->setAnimationFrames(BALLOON_POP_ANIMATION, i, 50 + OFFSET_EXPLOSIONS, 21 + (37 * i), getWidth(), getHeight()); - } - break; case BALLOON_2: @@ -82,16 +55,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c // Amenaza que genera el globo mMenace = 2; - // Establece los frames de cada animación - for (int i = 0; i < NUM_FRAMES_BALLON; i++) - mSprite->setAnimationFrames(BALLOON_MOVING_ANIMATION, i, 37 + OFFSET_ORANGE_BALLOONS, 21 + (37 * i), getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_BORN; i++) - mSprite->setAnimationFrames(BALLOON_BORN_ANIMATION, i, 37 + OFFSET_BLUE_BALLOONS, 21 + (37 * i), getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_POP; i++) - mSprite->setAnimationFrames(BALLOON_POP_ANIMATION, i, 37 + OFFSET_EXPLOSIONS, 21 + (37 * i), getWidth(), getHeight()); - break; case BALLOON_3: @@ -116,16 +79,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c // Amenaza que genera el globo mMenace = 4; - // Establece los frames de cada animación - for (int i = 0; i < NUM_FRAMES_BALLON; i++) - mSprite->setAnimationFrames(BALLOON_MOVING_ANIMATION, i, 37 + OFFSET_ORANGE_BALLOONS, 37 * i, getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_BORN; i++) - mSprite->setAnimationFrames(BALLOON_BORN_ANIMATION, i, 37 + OFFSET_BLUE_BALLOONS, 37 * i, getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_POP; i++) - mSprite->setAnimationFrames(BALLOON_POP_ANIMATION, i, 37 + OFFSET_EXPLOSIONS, 37 * i, getWidth(), getHeight()); - break; case BALLOON_4: @@ -150,16 +103,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c // Amenaza que genera el globo mMenace = 8; - // Establece los frames de cada animación - for (int i = 0; i < NUM_FRAMES_BALLON; i++) - mSprite->setAnimationFrames(BALLOON_MOVING_ANIMATION, i, OFFSET_ORANGE_BALLOONS, 37 * i, getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_BORN; i++) - mSprite->setAnimationFrames(BALLOON_BORN_ANIMATION, i, OFFSET_BLUE_BALLOONS, 37 * i, getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_POP; i++) - mSprite->setAnimationFrames(BALLOON_POP_ANIMATION, i, OFFSET_EXPLOSIONS, 37 * i, getWidth(), getHeight()); - break; case HEXAGON_1: @@ -184,16 +127,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c // Amenaza que genera el globo mMenace = 1; - // Establece los frames de cada animación - for (int i = 0; i < NUM_FRAMES_BALLON; i++) - mSprite->setAnimationFrames(BALLOON_MOVING_ANIMATION, i, 50 + OFFSET_GREEN_BALLOONS, 21 + (37 * i), getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_BORN; i++) - mSprite->setAnimationFrames(BALLOON_BORN_ANIMATION, i, 50 + OFFSET_PURPLE_BALLOONS, 21 + (37 * i), getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_POP; i++) - mSprite->setAnimationFrames(BALLOON_POP_ANIMATION, i, 50 + OFFSET_EXPLOSIONS, 21 + (37 * i), getWidth(), getHeight()); - break; case HEXAGON_2: @@ -218,16 +151,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c // Amenaza que genera el globo mMenace = 2; - // Establece los frames de cada animación - for (int i = 0; i < NUM_FRAMES_BALLON; i++) - mSprite->setAnimationFrames(BALLOON_MOVING_ANIMATION, i, 37 + OFFSET_GREEN_BALLOONS, 21 + (37 * i), getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_BORN; i++) - mSprite->setAnimationFrames(BALLOON_BORN_ANIMATION, i, 37 + OFFSET_PURPLE_BALLOONS, 21 + (37 * i), getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_POP; i++) - mSprite->setAnimationFrames(BALLOON_POP_ANIMATION, i, 37 + OFFSET_EXPLOSIONS, 21 + (37 * i), getWidth(), getHeight()); - break; case HEXAGON_3: @@ -252,16 +175,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c // Amenaza que genera el globo mMenace = 4; - // Establece los frames de cada animación - for (int i = 0; i < NUM_FRAMES_BALLON; i++) - mSprite->setAnimationFrames(BALLOON_MOVING_ANIMATION, i, 37 + OFFSET_GREEN_BALLOONS, 37 * i, getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_BORN; i++) - mSprite->setAnimationFrames(BALLOON_BORN_ANIMATION, i, 37 + OFFSET_PURPLE_BALLOONS, 37 * i, getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_POP; i++) - mSprite->setAnimationFrames(BALLOON_POP_ANIMATION, i, 37 + OFFSET_EXPLOSIONS, 37 * i, getWidth(), getHeight()); - break; case HEXAGON_4: @@ -286,16 +199,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c // Amenaza que genera el globo mMenace = 8; - // Establece los frames de cada animación - for (int i = 0; i < NUM_FRAMES_BALLON; i++) - mSprite->setAnimationFrames(BALLOON_MOVING_ANIMATION, i, OFFSET_GREEN_BALLOONS, 37 * i, getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_BORN; i++) - mSprite->setAnimationFrames(BALLOON_BORN_ANIMATION, i, OFFSET_PURPLE_BALLOONS, 37 * i, getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_POP; i++) - mSprite->setAnimationFrames(BALLOON_POP_ANIMATION, i, OFFSET_EXPLOSIONS, 37 * i, getWidth(), getHeight()); - break; case POWER_BALL: @@ -320,20 +223,11 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c // Amenaza que genera el globo mMenace = 0; - // Establece los frames de cada animación - for (int i = 0; i < NUM_FRAMES_BALLON; i++) - mSprite->setAnimationFrames(BALLOON_MOVING_ANIMATION, i, OFFSET_POWER_BALL, 37 * i, getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_BORN; i++) - mSprite->setAnimationFrames(BALLOON_BORN_ANIMATION, i, OFFSET_POWER_BALL, 37 * i, getWidth(), getHeight()); - - for (int i = 0; i < NUM_FRAMES_BALLON_POP; i++) - mSprite->setAnimationFrames(BALLOON_POP_ANIMATION, i, OFFSET_EXPLOSIONS, 37 * i, getWidth(), getHeight()); - // Añade rotación al sprite mSprite->setRotate(false); mSprite->setRotateSpeed(1); mSprite->setRotateAmount(2.0); + break; default: @@ -357,12 +251,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c mBouncing.w = {1.10f, 1.05f, 1.00f, 0.95f, 0.90f, 0.95f, 1.00f, 1.02f, 1.05f, 1.02f}; mBouncing.h = {0.90f, 0.95f, 1.00f, 1.05f, 1.10f, 1.05f, 1.00f, 0.98f, 0.95f, 0.98f}; - // Textura con los gráficos del sprite - mSprite->setTexture(texture); - - // Renderizador - mSprite->setRenderer(renderer); - // Alto y ancho del sprite mSprite->setWidth(mWidth); mSprite->setHeight(mHeight); @@ -401,25 +289,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c // Tipo mKind = kind; - // Inicializa las variables para la animación - // mSprite->setCurrentFrame(0); - // mSprite->setAnimationCounter(0); - - // Establece el numero de frames de cada animacion - // mSprite->setAnimationNumFrames(BALLOON_MOVING_ANIMATION, NUM_FRAMES_BALLON); - // mSprite->setAnimationNumFrames(BALLOON_POP_ANIMATION, NUM_FRAMES_BALLON_POP); - // mSprite->setAnimationNumFrames(BALLOON_BORN_ANIMATION, NUM_FRAMES_BALLON_BORN); - - // Establece la velocidad de cada animación - mSprite->setAnimationSpeed(BALLOON_MOVING_ANIMATION, 10); - mSprite->setAnimationSpeed(BALLOON_POP_ANIMATION, 5); - mSprite->setAnimationSpeed(BALLOON_BORN_ANIMATION, 20); - - // Establece si la animación se reproduce en bucle - mSprite->setAnimationLoop(BALLOON_MOVING_ANIMATION, true); - mSprite->setAnimationLoop(BALLOON_POP_ANIMATION, false); - mSprite->setAnimationLoop(BALLOON_BORN_ANIMATION, true); - // Selecciona un frame para pintar mSprite->setSpriteClip(mSprite->getAnimationClip(0, 0)); } @@ -428,7 +297,6 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c Balloon::~Balloon() { delete mSprite; - mSprite = nullptr; } // Centra el globo en la posición X @@ -640,9 +508,13 @@ void Balloon::updateState() disable(); } else if (mTimeToLive > 0) + { mTimeToLive--; + } else + { disable(); + } } // Si se está creando @@ -690,9 +562,13 @@ void Balloon::updateState() { mSprite->setRotate(true); if (mVelX > 0.0f) + { mSprite->setRotateAmount(2.0); + } else + { mSprite->setRotateAmount(-2.0); + } } } } @@ -718,15 +594,15 @@ void Balloon::updateAnimation() // Establece el frame de animación if (isPopping()) { - mSprite->setCurrentAnimation(BALLOON_POP_ANIMATION); + mSprite->setCurrentAnimation("pop"); } else if (isBeingCreated()) { - mSprite->setCurrentAnimation(BALLOON_BORN_ANIMATION); + mSprite->setCurrentAnimation("blue"); } else { - mSprite->setCurrentAnimation(BALLOON_MOVING_ANIMATION); + mSprite->setCurrentAnimation("orange"); } mSprite->animate(); @@ -796,11 +672,17 @@ Uint8 Balloon::getSize() Uint8 Balloon::getClass() { if ((mKind >= BALLOON_1) && (mKind <= BALLOON_4)) + { return BALLOON_CLASS; + } else if ((mKind >= HEXAGON_1) && (mKind <= HEXAGON_4)) + { return HEXAGON_CLASS; + } else + { return 0; + } } // Establece el valor de la variable @@ -922,9 +804,13 @@ void Balloon::updateColliders() Uint8 Balloon::getMenace() { if (isEnabled()) + { return mMenace; + } else + { return 0; + } } // Obtiene le valor de la variable @@ -968,6 +854,8 @@ void Balloon::updateBounce() mBouncing.despY = (mSprite->getSpriteClip().h - (mSprite->getSpriteClip().h * mBouncing.zoomH)); mBouncing.counter++; if ((mBouncing.counter / mBouncing.speed) > (MAX_BOUNCE - 1)) + { bounceStop(); + } } } \ No newline at end of file diff --git a/source/balloon.h b/source/balloon.h index 30246cb..b5b9864 100644 --- a/source/balloon.h +++ b/source/balloon.h @@ -146,7 +146,7 @@ private: public: // Constructor - Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, SDL_Renderer *renderer); + Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, std::string file, SDL_Renderer *renderer); // Destructor ~Balloon(); diff --git a/source/director.cpp b/source/director.cpp index 2a5a1e5..0fda954 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -189,7 +189,14 @@ bool Director::setFileList() asset->add("data/sound/powerball.wav", t_sound); // Texturas - asset->add("data/gfx/balloon.png", t_bitmap); + asset->add("data/gfx/balloon1.png", t_bitmap); + asset->add("data/gfx/balloon1.ani", t_data); + asset->add("data/gfx/balloon2.png", t_bitmap); + asset->add("data/gfx/balloon2.ani", t_data); + asset->add("data/gfx/balloon3.png", t_bitmap); + asset->add("data/gfx/balloon3.ani", t_data); + asset->add("data/gfx/balloon4.png", t_bitmap); + asset->add("data/gfx/balloon4.ani", t_data); asset->add("data/gfx/bullet.png", t_bitmap); asset->add("data/gfx/game_bg.png", t_bitmap); asset->add("data/gfx/game_text.png", t_bitmap); diff --git a/source/game.cpp b/source/game.cpp index b090d7a..8a4bf10 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -39,7 +39,10 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr players.push_back(player2); } - mTextureBalloon = new LTexture(mRenderer, mAsset->get("balloon.png")); + balloon1Texture = new LTexture(mRenderer, mAsset->get("balloon1.png")); + balloon2Texture = new LTexture(mRenderer, mAsset->get("balloon2.png")); + balloon3Texture = new LTexture(mRenderer, mAsset->get("balloon3.png")); + balloon4Texture = new LTexture(mRenderer, mAsset->get("balloon4.png")); mTextureBullet = new LTexture(mRenderer, mAsset->get("bullet.png")); mTextureGameBG = new LTexture(mRenderer, mAsset->get("game_bg.png")); mTextureGameText = new LTexture(mRenderer, mAsset->get("game_text.png")); @@ -112,9 +115,17 @@ Game::~Game() delete smartSprite; }; - mTextureBalloon->unload(); - delete mTextureBalloon; - mTextureBalloon = nullptr; + balloon1Texture->unload(); + delete balloon1Texture; + + balloon2Texture->unload(); + delete balloon2Texture; + + balloon3Texture->unload(); + delete balloon3Texture; + + balloon4Texture->unload(); + delete balloon4Texture; mTextureBullet->unload(); delete mTextureBullet; @@ -1386,15 +1397,16 @@ void Game::deployEnemyFormation() if (mDebug.enabled) set = mDebug.enemySet; - Uint8 numEnemies = mStage[mCurrentStage].enemyPool->set[set]->numberOfEnemies; - for (int i = 0; i < numEnemies; i++) + const Uint8 numEnemies = mStage[mCurrentStage].enemyPool->set[set]->numberOfEnemies; + for (int i = 0; i < numEnemies; ++i) + { createNewBalloon(mStage[mCurrentStage].enemyPool->set[set]->init[i].x, mStage[mCurrentStage].enemyPool->set[set]->init[i].y, mStage[mCurrentStage].enemyPool->set[set]->init[i].kind, mStage[mCurrentStage].enemyPool->set[set]->init[i].velX, mEnemySpeed, - mStage[mCurrentStage].enemyPool->set[set]->init[i].creationCounter, - mTextureBalloon); + mStage[mCurrentStage].enemyPool->set[set]->init[i].creationCounter); + } mEnemyDeployCounter = 300; } @@ -1754,11 +1766,12 @@ void Game::renderBalloons() } // Crea un globo nuevo en el vector de globos -Uint8 Game::createNewBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture) +Uint8 Game::createNewBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 creationtimer) { - // Balloon *b = new Balloon(x, y, kind, velx, speed, creationtimer, texture, mRenderer); - // balloons.push_back(b); - // return (Uint8)(balloons.size() - 1); + const std::string file = balloonAnimation(kind); + Balloon *b = new Balloon(x, y, kind, velx, speed, creationtimer, balloonTexture(kind), file, mRenderer); + balloons.push_back(b); + return (Uint8)(balloons.size() - 1); } // Crea una PowerBall @@ -1773,7 +1786,7 @@ void Game::createPowerBall() const int x[3] = {left, center, right}; const int posX = x[rand() % 3]; - Balloon *b = new Balloon(posX, posY, POWER_BALL, BALLOON_VELX_POSITIVE * (((rand() % 2) * 2) - 1), mEnemySpeed, 100, mTextureBalloon, mRenderer); + Balloon *b = new Balloon(posX, posY, POWER_BALL, BALLOON_VELX_POSITIVE * (((rand() % 2) * 2) - 1), mEnemySpeed, 100, balloon4Texture, mAsset->get("balloon4.ani"), mRenderer); balloons.push_back(b); mPowerBallEnabled = true; @@ -1897,28 +1910,27 @@ void Game::popBalloon(Balloon *balloon) // En cualquier otro caso, crea dos globos de un tipo inferior default: - Balloon *b1 = new Balloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_NEGATIVE, mEnemySpeed, 0, mTextureBalloon, mRenderer); - balloons.push_back(b1); - b1->allignTo(balloon->getPosX() + (balloon->getWidth() / 2)); - if (b1->getClass() == BALLOON_CLASS) + // Balloon *b1 = new Balloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_NEGATIVE, mEnemySpeed, 0, mRenderer); + const int index = createNewBalloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_NEGATIVE, mEnemySpeed, 0); + balloons.at(index)->allignTo(balloon->getPosX() + (balloon->getWidth() / 2)); + if (balloons.at(index)->getClass() == BALLOON_CLASS) { - b1->setVelY(-2.50f); + balloons.at(index)->setVelY(-2.50f); } - else if (b1->getClass() == HEXAGON_CLASS) + else if (balloons.at(index)->getClass() == HEXAGON_CLASS) { - b1->setVelY(BALLOON_VELX_NEGATIVE); + balloons.at(index)->setVelY(BALLOON_VELX_NEGATIVE); } - Balloon *b2 = new Balloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_POSITIVE, mEnemySpeed, 0, mTextureBalloon, mRenderer); - balloons.push_back(b2); - b2->allignTo(balloon->getPosX() + (balloon->getWidth() / 2)); - if (b2->getClass() == BALLOON_CLASS) + const int index2 = createNewBalloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_POSITIVE, mEnemySpeed, 0); + balloons.at(index2)->allignTo(balloon->getPosX() + (balloon->getWidth() / 2)); + if (balloons.at(index2)->getClass() == BALLOON_CLASS) { - b2->setVelY(-2.50f); + balloons.at(index2)->setVelY(-2.50f); } - else if (b2->getClass() == HEXAGON_CLASS) + else if (balloons.at(index2)->getClass() == HEXAGON_CLASS) { - b2->setVelY(BALLOON_VELX_NEGATIVE); + balloons.at(index2)->setVelY(BALLOON_VELX_NEGATIVE); } // Elimina el globo @@ -2059,6 +2071,74 @@ Uint8 Game::countBalloons() return num; } +// Obtiene la textura correspondiente en funcion del tipo +LTexture *Game::balloonTexture(int kind) +{ + if (kind == 1 || kind == 5) + { + return balloon1Texture; + } + + else if (kind == 2 || kind == 6) + { + return balloon2Texture; + } + + else if (kind == 3 || kind == 7) + { + return balloon4Texture; + } + + else if (kind == 4 || kind == 8 || kind == 9) + { + return balloon4Texture; + } + + return balloon1Texture; +} + +// Obtiene la animacion correspondiente en funcion del tipo +std::string Game::balloonAnimation(int kind) +{ + if (kind == 1 || kind == 5) + { + return mAsset->get("balloon1.ani"); + } + + else if (kind == 2 || kind == 6) + { + return mAsset->get("balloon2.ani"); + } + + else if (kind == 3 || kind == 7) + { + return mAsset->get("balloon3.ani"); + } + + else if (kind == 4 || kind == 8 || kind == 9) + { + return mAsset->get("balloon4.ani"); + } + + return mAsset->get("balloon1.ani"); +} + +// Vacia el vector de globos +void Game::freeBalloons() +{ + if (balloons.empty() == false) + { + for (int i = balloons.size() - 1; i >= 0; --i) + { + if (balloons.at(i)->isEnabled() == false) + { + delete balloons.at(i); + balloons.erase(balloons.begin() + i); + } + } + } +} + // Comprueba la colisión entre el jugador y los globos activos bool Game::checkPlayerBalloonCollision(Player *player) { @@ -2610,6 +2690,7 @@ void Game::updatePlayField() // Vacia los vectores freeBullets(); + freeBalloons(); } // Actualiza el fondo diff --git a/source/game.h b/source/game.h index c80f1ae..17e853e 100644 --- a/source/game.h +++ b/source/game.h @@ -141,11 +141,14 @@ private: std::vector items; // Vector con los items std::vector smartSprites; // Vector con los smartsprites - LTexture *mTextureBalloon; // Textura para los enemigos - LTexture *mTextureBullet; // Textura para las balas - LTexture *mTextureGameBG; // Textura para el fondo del juego - LTexture *mTextureGameText; // Textura para los sprites con textos - LTexture *mTextureItems; // Textura para los items + LTexture *balloon1Texture; // Textura para los enemigos + LTexture *balloon2Texture; // Textura para los enemigos + LTexture *balloon3Texture; // Textura para los enemigos + LTexture *balloon4Texture; // Textura para los enemigos + LTexture *mTextureBullet; // Textura para las balas + LTexture *mTextureGameBG; // Textura para el fondo del juego + LTexture *mTextureGameText; // Textura para los sprites con textos + LTexture *mTextureItems; // Textura para los items Text *mText; // Fuente para los textos del juego Text *mTextBig; // Fuente de texto grande @@ -303,7 +306,7 @@ private: void renderBalloons(); // Crea un globo nuevo en el vector de globos - Uint8 createNewBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 stoppedcounter, LTexture *texture); + Uint8 createNewBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 stoppedcounter); // Crea una PowerBall void createPowerBall(); @@ -341,6 +344,15 @@ private: // Obtiene el numero de globos activos Uint8 countBalloons(); + // Obtiene la textura correspondiente en funcion del tipo + LTexture *balloonTexture(int kind); + + // Obtiene la animacion correspondiente en funcion del tipo + std::string balloonAnimation(int kind); + + // Vacia el vector de globos + void freeBalloons(); + // Comprueba la colisión entre el jugador y los globos activos bool checkPlayerBalloonCollision(Player *player);