From c6e2368e82348de42c8ed3dfe4e67fccdcc10304 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 31 Oct 2024 23:32:11 +0100 Subject: [PATCH] Noves animacions per a deixar de disparar --- data/gfx/player/player.ani | 43 +++++++++++++++++++++++++++++---- data/gfx/player/player1.gif | Bin 5874 -> 8216 bytes data/gfx/player/player2.gif | Bin 5657 -> 8006 bytes source/game.cpp | 40 +++++++++---------------------- source/player.cpp | 46 +++++++++++++++++++++++++++++------- source/player.h | 14 +++++++---- 6 files changed, 97 insertions(+), 46 deletions(-) diff --git a/data/gfx/player/player.ani b/data/gfx/player/player.ani index 7f4f078..3ed8cfa 100644 --- a/data/gfx/player/player.ani +++ b/data/gfx/player/player.ani @@ -23,29 +23,64 @@ frames=8,9,10,11 [/animation] [animation] -name=stand-sideshoot +name=walk-sideshoot-cooldown speed=5 loop=0 frames=12,13,14,15 [/animation] [animation] -name=walk-centershoot +name=stand-sideshoot speed=5 loop=0 frames=16,17,18,19 [/animation] [animation] -name=stand-centershoot +name=stand-sideshoot-cooldown +speed=5 +loop=0 +frames=15 +[/animation] + +[animation] +name=walk-centershoot speed=5 loop=0 frames=20,21,22,23 [/animation] +[animation] +name=walk-centershoot-cooldown +speed=5 +loop=0 +frames=24,25,26,27 +[/animation] + +[animation] +name=stand-centershoot +speed=5 +loop=0 +frames=28,29,30,31 +[/animation] + +[animation] +name=stand-centershoot-cooldown +speed=5 +loop=0 +frames=27 +[/animation] + [animation] name=death speed=10 loop=0 -frames=24,25,26,27 +frames=32,33,34,35 +[/animation] + +[animation] +name=celeb +speed=10 +loop=-1 +frames=36,36,36,36,36,36,37,38,39,40,40,40,40,40,40,39,39,39,40,40,40,39,39,39,38,37,36,36,36 [/animation] \ No newline at end of file diff --git a/data/gfx/player/player1.gif b/data/gfx/player/player1.gif index 33d5c8a40da5f041df2fddcfa26bcd7ceeae83de..4808eb42186b4fbb4f7a370d1d94c9b30690719d 100644 GIT binary patch delta 5790 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 delta 3429 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 Hg#Z9MTD5O_ diff --git a/data/gfx/player/player2.gif b/data/gfx/player/player2.gif index 670d3d145b40b1e272a1ff77f72fad9a5551467a..f83198f95cf6b7caf6b2dfe972513b96982d02c5 100644 GIT binary patch delta 5627 zcmVfBnKn|GUBkk7`t5By~E|F&a{u zfh_7pw^>S2I#Qjg3};q9DbHdG)10O(Xf}0U^YSqE0lvlUgTSlOoZ9vlBcZEvFX{~N zP6@rEAgy>kD-rmZn<57loqvA%^ZaL>{DW@t7f0r_p(Y1<3i0))64*=-DXKajQM zb|kkuzH)_c)Sg{Ly2WLF^8sD5kVkS zLXV+|6Xbv+fMOn`L#UBMs^l8;AsZ2N9JhfZpTQg#IDx;xW5U54 z)`5cgp=DMvXMNOWv0;J`f*smXAl-39Qp6rM)PgtCTv?`P?4e{p7#|eiAP#sR`N1H8 ze}+Q7(L;_AAZuiVbyjH{l46hsM-6g=Bce*#ffkm;7np`bhh#_f@gZnvXD8A~MRX#+ z0f3BAA*%Kws0L4FQfF{oP4m`D|KbKMx=t#{dI&D}my0@&<0M7$XZ8ETaUC{DzFlQj5%D zP!%@<7ne`e5>4h}D%%or48<%r_bE$qaw(TCxzcm)0w+M1j)@X53Wtv-Fi-T@e{B4e z12tCyJ10*GMKJzIP)7H3C6$n2fpk@;bWk@kRM#*HDRnE=bXj+H7@2e_vvm^LQ5lIa z9vOBoHFjp#kzMC?WT%oRIeiFJc5J7T`L|L>f1k;jBGz2o zMPczZM-yOu3$|i$5n$N|KFkGRq^Vv(Hk;vxeyK?cv?+e9QDb`1o9=g8VHBLc`5eUg zVGg!o5XNAGhk#$f97M}xo2C3pE97I|3So`hw)`nhK2B10#LR@TQ+5YaT+}q zW(i6H3tEK^nuBrX9eq}s8H#6c7GZL>p{?1WibiRFwtsOkp$kT6D4J(1YD6iDXBgpHil+YNrf9+@$6{;S zgp6X+C|Ihe*3zf6_NSe+CL8x9gi4Ns>Li7lsLiyA^|SzrnodYCEs?q@QbDQjMyDM& zj-8^Z^Vp8>f{+T=e=hYXs?;GG-vHkM*oKqc?|j ztuB+T%UXZks;nnqn#Y<_;@SYG1+E<9t%)TJ=~}MnI<4I*f3EHjAdFNrQK7H$`d0ti zt#P2O%8E#$QBPuOAz< zSsOPzTeK9)7noBzq5}ZsQMO+zIC|N8Qfsmz&=+qD50zsFbL+FT(>Qm#G<6mf3Thdc zgAGBUI>{hIiHjC}yI6l)uox@1ihHra(734ZxI6S#e;zxz>YzD~yBCS877@#Ra@!V> zO96|!xmp-TV~e zyysJ2#=Ey`(YmS2yt!Mu6;ub_S6_W_Lsm$=&|AFyb-b*ry~-N^-Ai8Idl$*8K;-*g z=8L+|e_OrW*Jzkg9_hQj<0S~lTfhIPd%pxa0>R6@(#yVp>%Iy)7$CNTk7h^(gu4nX zymryRPPiKS%dOdkzb9Zs5Ey~$X#z6Vz#J^X4Jd$d^uQ@>!9s`vh2cUGXu2+Z!e<0T z7n}kwjKWhS!zN6_g_gn!0z^X=9s#NtIvhtqe>_D)oS@(f!z;wY6F6j3^g%+r#Nlfi zQoKVA1in&C#D^ip{Q($RY#C<;##fBPS**o*@j`4Ie@-|WOqv%?2*FKi8gHB+XB-+b zB*YvDLQ2dZc^n#Zti^<37GUfLix?zkp%)FvfinU^i5$p+oWc?ajvt36-NZ_rl*n~_ ze=lbu0;5zZQh{b7(#g$+$(j5~|5d_`Com_sI0MbbO7CWj$M}oWq%WO1C#p<~OR_7k zJc+8@so0o}(s-uzb}E2kD^p6#U+QnNvW&cj%J9a_z-G(raw@%6Y}ZK5b*haK*UP~C zjc*c<;s~jT8jRXv0^GvOvYIICC@Ag7e{PR#ap4G%tQxAix~el*FX+aPpc-`af{z2K zkMM-60Ns%c1Fyx30@SL|3r(&yvoQ&cF*8$Lam9yR&s?)4hYXLpwW2dsRBEK0ZCOe?TqM zIZe}sL%5*Vl|KWtS1Yte9XS6?9kopZ)t-R0KRq;B2)9Z(0$__cV$0Q&*Kb+5H?6vhqq)BO)>r*N)YmkAZP&8hst@8NKUUnK4b-f9+%02aMVC!@P^F*#b1!{iD7I+`kC~V!{gAZ})$z zP1^eB#KY?!2!s|Lgc@#Ko;uOTKjg%a;UB)O7{D!nznwzFUC9`tzoa38fn*{)WTeQU z+&FZjneoRx6h(9>V_(E(q!5B4$|FU@AJ~0`DNIJCiA7W-Tqc@mt})){f6duPy7EYl&&W}in z>julvBFn0n&)r)mSe{5{$=F6pMip-cxyy)YeXw3y>Z^>LG%k1OUmW(P_&;nO0 z(oD|ZMoS#`sSE%nB+zi&+~jGhEJ%JQ^gPT@ZqAO{=9i3b=-AHcs4U|W&%-v)mdxe! zf~qm+a{C;RDc+9<4d}%((DKNug+8s#`p^<>1Q=bcg}|*bL$J&`f6>~Yu*e!ymaYSs z9$)UdG8}t)ln&Aa66*hDfUibX>C0NL0=us5ngl3K4FRjJ%BrxRtt>6x@RhI%A?yu{>%9fBK~1qF%d`M%u>4B23Q@I4E!5Gjw>P4}JEgM!db4L6 z)oDw#HjC{zt?jJPf3wZrvREy&<-WE8Ua!xtv|H=nUdyg&UAX2jwV>hU)B;o*A#Ds;=b=qJ-bu|XuWIL zz&qP}>$VX;x*lJ%51+Yp&AEpiyzNd$qWgKJTk!-e7}rbMf7#pfX>sy2j|&Ok^R~;_ z-L<+rudKqryMK((8`g5B6QFTPrT_0!ArS}*imFTqX!@%ww) z1<=0dTlM4n*eDV7EC0C$yuNOq_IC!qa-a1JjJyKe!brcprj7T055N)Zd?gI`VPE(M zocCuu!UJ>}e}d2W0gSy9T=f+^`3{W1!5jG0t@%crfFZoVoBy6a>>M5}+gFD8YQe&x zPr)B7LQrh_qtC~#QTe7n`!SsMqJR61*7_Z6-3bUGIecRol>XNJ zAKw4{ar7UCT>t;EpNBgH0u@Dx6Ey*;y0YnHiXwTQt-ZdpT-NuU$3{Gq&jxuRlP^fo zsC+V;tm88om8z)KC3XdofWeV(_}V3h$6<*Xix$7z(ziri?q=8ZI6g(UgUL1h@%0g| z2^K*_f2@r~JdX7NEH*AeCi+mOSw3RkXu?588jeAjE}oi7qNbLfuDY7WdK%5nN-8Wc zFf1%6DD3ts;Og@F0viwaX6QKA6?pag28 z0@J1qa<*i_jgc5zRO{5Vfm7#<5hr}AD2I?mgO31?24Izf*BvIjR3uFvb_zfL)m(2%d zn+_fU7Qmx&&=NaH`xLSR+HPUv_5294*THD1F9@iQ%DiuquT&PeIV%?e*=jRfM~0~?fJZCrJw+sj%Ta$Bh<11oL3+h zC=#Sc*jfKaL3PwW``oYtVS}x|W(ee9sr(u=qVd;;SToPrakBI;n zUQuNZb*7P15GN-EZaT(glsL>eYU{=Hs>4(p%$^g@Wg=0PX^$!VW?X8K}CNf3fRM!TJ(a z0m5H`S%kMeDuN`95`PTku`1|*amHwA_ACGsR=AdV=GDAmhfOH!B?*e0SS^U=Cgx(r zVrOqcJdyZV^mbZBwQJ#{y-GRS22vlH~{04R`e^Fbjt%1I}Jm{r*=lhhMgW zsud*G`U)R`^qzigm4_609x3*r?kn)l-7Z(bbV^^+1)~f%pG}#he+Zm4!EDCqN|9It zs8JnURx3>9iiwuYZy8`MoE-!DMVO={E4iCN!bi4i#3W4{F`!hk(S^7);Y9(Qh(#Lc zHG&w<2M4ha{Ww^`08WU46QTZGqN5!u6d?*FaV!cNj@VQqqy>Q;TB=FgF8ue{zm*;lz&q-8VMrA zn-qEVLCk|H!^Zkl038*rjrtH<(bJ~~Y0IqN`N+1sa?#s8KxlIjv20(%>JgTlW=5uA$wysxmj-OBs2}BzP8uND4Y5iq zr+sa&e;$}TIhn?wO}L9`w&hW?^47I|RYG9)BV5GdA-6gS8wHeGTF7oTu=Faz|7Q0? z+q&LPC)Vw&B$)SrDtH$Q ze_5wnHN!a`dxT0KrMJ~M;~5>7JY*)DbGdWhZAzBEkkb(HTW1F_o}+=*%iQ z(r2+I^xViQ>`GeEvEXeR35K;=LBDI!f7PhM|48alrI(cHMPDfwnr^d{ zLOtmzv${x02Gg8YeWW~#Y1qA*WO|e!5y!1FRBdU zPKlyURjhU;YgSo%3cU9ntW*_2TJd^T)|g=NWo`U%lRDUAOxErtfc)U~y4}wH!mpQK z@J}m0f40KXb+4V>oNC!|+R;Nc9g;Qd4Rd(G!i_)v=U;#Ovc$Rof8=2H*L?pqrWYC}6XrKZ{RdyHQGg#N zfC%`0BX)oa)>fgPO5KTQ+5YaT+}qW*T?`P^N@W zf2e417GZLBgzpz;Z`Ma`)*XBng~7#zct&Y|)@Y+9hNnenXeekG#)d`|7ivgZaA;|X zWNDvvhlZwyjy8u2R%v_KNSan5We94e=7$6}h{I8cPPAll=!UcOBu5e#9A^UlmT-|I zC6ic*L?R|f!im79DW3$2=_ZQ3vQ4Ile~AZ|iuAUM{}9)TqV$TbgiW$YCto5Z{zi&u z!Y0RJYunUs+tw(z2#jJPjK4^0*77B5vT@4jB+S@J%NR|~*i6fY1k>V->12)6@@~4= zaogA_-RN@*fQ_5t2krtVK-Y5Yf{yP(P%hUl>FACM2aoO8bKXcS1;bAXMKC2Ne~;pZ zkNs$m>y(ZRg)kFibVqlP2>B2VAOd*6F_x8hEuoMxPzVmGGA+efF@SW=(?=J1GG?HW zk9CnZqc?~3kuDRG5~%_hnFk`7Si<0tDW#GPNm(e#F(wI{(R7=wb0pdn5>6As;2O^mY zjHH!_z*JmQUD&W-BzaV9iC>A;mbha#319$sIW}bZm9s^cXn9p#X$L;}R(=@(c8Qmv zu$N$|lL|C74X~AJ$qHZTlo1(|u(NuJV+T_;dWCtId6_m|84XBTnGJcFf8#(nnn?841|DtK1xKN$4Ii73-fe8kmYq6dM#0dOp zpd(YvUz7$6oK zdB~(m+A}*Ur3Y#kRT>|UCZuoKT|g>@q~Ss@1cN3ZV^vzFYkH|&Z{S8H>?Uxz)F}=pZwqUS1!Zr5Vk`NkZ~hpH{w6CE#{j%WuYnS= zktnbfJCCQ*YsEH7BnwTzm@EnVj{;Y5N|Gx*mo3j&DyFh6Ay<&;dUKz$Bqx`0DmMZw zx3MK~jzZgxe@NSL0i$qF`?JcTFZxI?|4+Mf^0bcx>9g}gkqh|+43m>zJCc78GcP%j zVH*x4X|^l*P-&}OH@PxFc>)$$wlfo7aa#sVX;f@Ww@O)+gXxw@0F?CbwtVxwuK$xMugba!Iz68@O0`mW~OTe}U9~~Jxs3@spu3in zNmWW|x>0$YS!tM`aF?GMH?RqoW|_K$u)3_kxw~7JwTqZ~nY)yUxb4}yX&Jh$o0OI* zIL5b}b=I7+>$$F3ym2|2s#%)QyL#rZnT%__!+X1mdAze}o{L4Cz`3cUNjr@by-Opy zNp-%He{-IkQ=EsoyU7W^->aG$Dxm+HF`dPUpc8tX^_#xvX}t4m82}8P_t~FKin_vy z!1uep-m0Gvs-+%!!3^x311iANo1cQQpBfyW&f5S1>cIgVo&y}gJKCfxN}?!nqy@~L z8T_6vTtG;Qqfh!?E~>)?9HJcBT^kIdLpq}+e>%Win!`Md#526a7JS4{8l~*JzB(Mk zEc(RkNv8#*q<0FV<0+$4{KHe~qgv{wSlXC9oWvel#cjM6c6y~b%$^Zyqf_do19TZ* z48~3B#d5r*iczRncE@#^$AzYWewwL+jHQL#VtV|?DSASM3aoA%$$@-EKqRPmddZ_9 ze?#7C$(MY{i`=N48XmMN$(Fju|7IFT6m+R~k*SpY$;#@graS|nYN@hZ0C(aNi-x~p;YA1boTK_tw>T&ZWIt6=Jp{rc+u@ji({fq99>Huor&mFj^uQ) z*?4dx{Y@fWP9(jL@+5LDeNR=J0|O<~O`Ej(1k(+BP&yrOJk7N-`_nV+)9?~=e;f0* zW9xEJo3u5T)Mac7|zu9rA z%}RD+v@yFNCW3~C)-CudySr(7wZ%Aesjez($v4CZD>>C7uqBhYCH|t;W5EcVaA(R) zCHtnDv}spXRSMvHk5WR&TiiC%;GQ|Th(Kf&@frk36BMjqrG8;d>teu@f3U*$X`DWH zN{h%A?Wqbt6EY@w%S&nk|5dOEe?CfjToi?9fY5I1aa z&CHAf5c33(WdIF82mFzYYdXTL z4#*h<-sR;ntNrCwFysGB{-^~_%BU*LRnDesfa-`205-~@quvL{`sg9E;WR!5JZ2R* zZsw&dhSg%_YXRPwys94iG)jqo_v|e@n==%_~&NUlGe-DrC^iO|=o_qpRkJ=1SjPDkV zg`M@fOse_O+CKyCbD#{KEh2VZ*dx#^Z=Gv#O|pBfte$My8(EdgAoeC;*6C`o#sY8Z uxK52Eb&5N-A~Nz$L@NVTZ7-ESwj~)rQ7tb^eJ@S@`DkkdTfLAW002Aoog}aT diff --git a/source/game.cpp b/source/game.cpp index 7320a3f..4e08cd1 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -1710,32 +1710,24 @@ void Game::handleNormalPlayerInput(const std::shared_ptr &player) handleFireInputs(player, autofire, controllerIndex); // Verifica y maneja todas las posibles entradas de disparo. } -// Procesa las entradas de disparo del jugador, permitiendo disparos automáticos -// si está habilitado. -void Game::handleFireInputs(const std::shared_ptr &player, - bool autofire, int controllerIndex) +// Procesa las entradas de disparo del jugador, permitiendo disparos automáticos si está habilitado. +void Game::handleFireInputs(const std::shared_ptr &player, bool autofire, int controllerIndex) { - if (input_->checkInput(InputType::FIRE_CENTER, autofire, - options.controller[controllerIndex].device_type, - options.controller[controllerIndex].index)) + if (input_->checkInput(InputType::FIRE_CENTER, autofire, options.controller[controllerIndex].device_type, options.controller[controllerIndex].index)) { handleFireInput(player, BulletType::UP); #ifdef RECORDING demo_.keys.fire = 1; #endif } - else if (input_->checkInput(InputType::FIRE_LEFT, autofire, - options.controller[controllerIndex].device_type, - options.controller[controllerIndex].index)) + else if (input_->checkInput(InputType::FIRE_LEFT, autofire, options.controller[controllerIndex].device_type, options.controller[controllerIndex].index)) { handleFireInput(player, BulletType::LEFT); #ifdef RECORDING demo_.keys.fire_left = 1; #endif } - else if (input_->checkInput(InputType::FIRE_RIGHT, autofire, - options.controller[controllerIndex].device_type, - options.controller[controllerIndex].index)) + else if (input_->checkInput(InputType::FIRE_RIGHT, autofire, options.controller[controllerIndex].device_type, options.controller[controllerIndex].index)) { handleFireInput(player, BulletType::RIGHT); #ifdef RECORDING @@ -1744,29 +1736,19 @@ void Game::handleFireInputs(const std::shared_ptr &player, } } -// Maneja la continuación del jugador cuando no está jugando, permitiendo que -// continúe si se pulsa el botón de inicio. +// Maneja la continuación del jugador cuando no está jugando, permitiendo que continúe si se pulsa el botón de inicio. void Game::handlePlayerContinue(const std::shared_ptr &player) { const auto controllerIndex = player->getController(); - if (input_->checkInput(InputType::START, INPUT_DO_NOT_ALLOW_REPEAT, - options.controller[controllerIndex].device_type, - options.controller[controllerIndex].index)) + if (input_->checkInput(InputType::START, INPUT_DO_NOT_ALLOW_REPEAT, options.controller[controllerIndex].device_type, options.controller[controllerIndex].index)) { player->setStatusPlaying(PlayerStatus::PLAYING); } - // Disminuye el contador de continuación si se presiona cualquier botón de - // disparo. - if (input_->checkInput(InputType::FIRE_LEFT, INPUT_DO_NOT_ALLOW_REPEAT, - options.controller[controllerIndex].device_type, - options.controller[controllerIndex].index) || - input_->checkInput(InputType::FIRE_CENTER, INPUT_DO_NOT_ALLOW_REPEAT, - options.controller[controllerIndex].device_type, - options.controller[controllerIndex].index) || - input_->checkInput(InputType::FIRE_RIGHT, INPUT_DO_NOT_ALLOW_REPEAT, - options.controller[controllerIndex].device_type, - options.controller[controllerIndex].index)) + // Disminuye el contador de continuación si se presiona cualquier botón de disparo. + if (input_->checkInput(InputType::FIRE_LEFT, INPUT_DO_NOT_ALLOW_REPEAT, options.controller[controllerIndex].device_type, options.controller[controllerIndex].index) || + input_->checkInput(InputType::FIRE_CENTER, INPUT_DO_NOT_ALLOW_REPEAT, options.controller[controllerIndex].device_type, options.controller[controllerIndex].index) || + input_->checkInput(InputType::FIRE_RIGHT, INPUT_DO_NOT_ALLOW_REPEAT, options.controller[controllerIndex].device_type, options.controller[controllerIndex].index)) { player->decContinueCounter(); } diff --git a/source/player.cpp b/source/player.cpp index ce3e829..93b961e 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -239,9 +239,11 @@ void Player::setAnimation() // Crea cadenas de texto para componer el nombre de la animación const std::string a_walking = status_walking_ == PlayerStatus::WALKING_STOP ? "stand" : "walk"; const std::string a_firing = status_firing_ == PlayerStatus::FIRING_UP ? "centershoot" : "sideshoot"; + const std::string a_cooling = status_firing_ == PlayerStatus::COOLING_UP ? "centershoot" : "sideshoot"; const SDL_RendererFlip flip_walk = status_walking_ == PlayerStatus::WALKING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE; const SDL_RendererFlip flip_fire = status_firing_ == PlayerStatus::FIRING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE; + const SDL_RendererFlip flip_cooling = status_firing_ == PlayerStatus::COOLING_RIGHT ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE; // Establece la animación a partir de las cadenas if (isPlaying() || isEnteringNameGameCompleted() || isGameCompleted()) @@ -251,12 +253,17 @@ void Player::setAnimation() player_sprite_->setCurrentAnimation(a_walking); player_sprite_->setFlip(flip_walk); } + else if (isCooling()) + { // Acaba de disparar + player_sprite_->setCurrentAnimation(a_walking + "-" + a_cooling + "-cooldown"); + player_sprite_->setFlip(flip_cooling); + } else { // Está disparando player_sprite_->setCurrentAnimation(a_walking + "-" + a_firing); // Si dispara de lado, invierte el sprite segun hacia donde dispara // Si dispara recto, invierte el sprite segun hacia donde camina - a_firing == "centershoot" ? player_sprite_->setFlip(flip_walk) : player_sprite_->setFlip(flip_fire); + player_sprite_->setFlip(a_firing == "centershoot" ? flip_walk : flip_fire); } } else @@ -292,15 +299,36 @@ void Player::updateCooldown() { if (cooldown_ > 0) { - cooldown_--; - if (power_up_) - { - cooldown_--; - } + cooldown_ -= power_up_ ? 2 : 1; } else { - setFiringStatus(PlayerStatus::FIRING_NONE); + if (!isCooling()) + { + cooling_status_counter_ = 40; + switch (status_firing_) + { + case PlayerStatus::FIRING_LEFT: + status_firing_ = PlayerStatus::COOLING_LEFT; + break; + case PlayerStatus::FIRING_RIGHT: + status_firing_ = PlayerStatus::COOLING_RIGHT; + break; + case PlayerStatus::FIRING_UP: + status_firing_ = PlayerStatus::COOLING_UP; + break; + default: + break; + } + } + else if (cooling_status_counter_ > 0) + { + --cooling_status_counter_; + } + else + { + setFiringStatus(PlayerStatus::FIRING_NONE); + } } } @@ -695,4 +723,6 @@ void Player::shiftSprite() player_sprite_->setPosX(pos_x_); player_sprite_->setPosY(pos_y_); power_sprite_->setPosX(getPosX() - power_up_desp_x_); -} \ No newline at end of file +} + +bool Player::isCooling() { return status_firing_ == PlayerStatus::COOLING_LEFT || status_firing_ == PlayerStatus::COOLING_UP || status_firing_ == PlayerStatus::COOLING_RIGHT; } \ No newline at end of file diff --git a/source/player.h b/source/player.h index 5317c28..a0496f5 100644 --- a/source/player.h +++ b/source/player.h @@ -25,6 +25,10 @@ enum class PlayerStatus FIRING_RIGHT, FIRING_NONE, + COOLING_UP, + COOLING_LEFT, + COOLING_RIGHT, + PLAYING, CONTINUE, WAITING, @@ -36,8 +40,6 @@ enum class PlayerStatus GAME_COMPLETED, }; -// Variables del jugador - // Clase Player class Player { @@ -63,7 +65,8 @@ private: int default_pos_y_; // Posición inicial para el jugador float vel_x_ = 0.0f; // Cantidad de pixeles a desplazarse en el eje X int vel_y_ = 0.0f; // Cantidad de pixeles a desplazarse en el eje Y - int cooldown_ = 10; // Contador durante el cual no puede disparar + int cooldown_ = 0; // Contador durante el cual no puede disparar + int cooling_status_counter_ = 0; // Contador para la animación del estado cooling int score_ = 0; // Puntos del jugador float score_multiplier_ = 1.0f; // Multiplicador de puntos PlayerStatus status_walking_ = PlayerStatus::WALKING_STOP; // Estado del jugador al moverse @@ -78,8 +81,7 @@ private: int power_up_desp_x_ = 0; // Desplazamiento del sprite de PowerUp respecto al sprite del jugador Circle collider_ = Circle(0, 0, 9); // Circulo de colisión del jugador int continue_counter_ = 10; // Contador para poder continuar - Uint32 continue_ticks_ = 0; // Variable para poder cambiar el contador de - // continue en función del tiempo + Uint32 continue_ticks_ = 0; // Variable para poder cambiar el contador de continue en función del tiempo int scoreboard_panel_ = 0; // Panel del marcador asociado al jugador std::string name_; // Nombre del jugador std::string record_name_; // Nombre del jugador para la tabla de mejores puntuaciones @@ -115,6 +117,8 @@ private: // Cambia el modo del marcador void setScoreboardMode(ScoreboardMode mode); + bool isCooling(); + public: // Constructor Player(int id, float x, int y, bool demo, SDL_Rect &play_area, std::vector> texture, const std::vector> &animations);