From 8bc259b25a1e41a7dd967da686c74cdc22b1c8c8 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Wed, 17 Dec 2025 17:05:42 +0100 Subject: [PATCH] nous sons --- data/sounds/effects/continue.wav | Bin 0 -> 3816 bytes data/sounds/effects/explosion2.wav | Bin 0 -> 25972 bytes data/sounds/effects/init_hud.wav | Bin 0 -> 54549 bytes data/sounds/effects/start.wav | Bin 0 -> 19269 bytes source/core/defaults.hpp | 43 ++++++--- source/core/graphics/vector_text.cpp | 16 +++ source/core/graphics/vector_text.hpp | 8 ++ source/game/effects/debris_manager.cpp | 5 +- source/game/effects/debris_manager.hpp | 3 +- .../game/effects/gestor_puntuacio_flotant.cpp | 9 +- source/game/escenes/escena_joc.cpp | 91 +++++++----------- source/game/escenes/escena_titol.cpp | 26 ++--- 12 files changed, 105 insertions(+), 96 deletions(-) create mode 100644 data/sounds/effects/continue.wav create mode 100644 data/sounds/effects/explosion2.wav create mode 100644 data/sounds/effects/init_hud.wav create mode 100644 data/sounds/effects/start.wav diff --git a/data/sounds/effects/continue.wav b/data/sounds/effects/continue.wav new file mode 100644 index 0000000000000000000000000000000000000000..e0e6357ee45bf15d4a58172cfb61323117ae8b66 GIT binary patch literal 3816 zcmZ9J$8Vf@9f!R)E+DQ52_YdQBu*=FVA<@Z+KJb396RoP#?yQ6y}i?W_qdIFjqS9x zNp=%p5s1S|NO0f+7Y^Kz_y_oWfA2eEdtb{QkNo)2^Zm?7e_!9fe$dl1ad*5|rnUU^ zhdn(#AK~l4Q4jn6sONh<5|Ksp7EI6gfAsT@Z#^1aP}zd%>c-LQ4}baFKmYT;|Ni?Q z-+ps>y3;DgeHOK7a;WdKU;XlDKmN%tKK}H<;P`^V;0z{<&Gy0B#rr>f`}e>8`NPH8 zLAzN>N4<7~Qan30)PMi8U*EddKQuNgR_LwnP&`{%-q<^NdHLawzkB=o`Tl0Bnoop5 zt0eOi!vnpafAaZ*FP=`!Eh!B)PbiVAEVmi`&4D zlk*a_(e4c=^3@hk|KaP47sos6&2ly#a$EIEf&TRF!@*}$3sQ~A;fo}@^zYxjIXm25 zYm_ov@QS{D>)xX$qtha}*6j30Q-#{f=Kk|nm+z5%da$)xFQ#Jwmqn)#&yGL+qW3ms zkK;()P5S-iOB}gUE2N@+=M{aYcVL)~)LUGESi0D8Q}*r#CP_y8PP0}nxG5V)sxV-X zOBd^_e95~v=SMs1G)ctgFlpr?R&wV)WiLq87%<3XO7+z(>i(LtaU>=QdmSc?Tr@-7 zcaS|cvnbPGz)(C>Y7qVM@+->5k)=#L_L+qguAe=z9+bM<(Z%XcAvIku5jYwhrKai)=cwkctJ}HUrUPaNqBLGCDOc z!6Z(9B#|pOdHT1nPY<_oWIh!QxUB}Yl+k^?$ev!5ViK1>n#@&r`r?AJ*P7*AGU|6( z4Jv`|dptZoBa&efcOaU~cWBDqTy2!H3CwNLcj!lhBNKCCxyFbAV=1Dy(S7my>}a>W zQZHuWVINOVqx)h15VDsPT9aL%*NOh})#>5RMypoLa3Qb5tW!!B7(IaO1&LB;c6dWv zx=>vPee&YXiQ?!R08_t^8?DpB$yktf~Ox3BO6B=ZEk!x znPQF6=jVKOF@pi!HlsifV!xS19BHy+?nIX8t^Jepv!lJuwI+^?hy5;|o*5q*9C|i6 zE0U^oW(*ij3iR>$>EUjBwNc5ZxvQv13;CQxFA+U7GLCGy29tP0v1Cr5PmlMoHjYfjf?lW9!03sQA?&v(!I4&%FBD7h z^xpCF!(GZQVv?ZOVG-zOPe&)`L{c1SbNRwthdw$v*rDt~1_OGoXoMh}j&%F4(Z~BN zJD-k6uG7yZW{|Dccj-E=+&iQYWam;`*zdNR^=i3fadvWabds_)28+WJh{V(Ra(#Ji zbN7%!ko{eHe2TJhr1Ls`fRL3&rHDyFzAN__LMYpW0fW)5`(Sr#y;WyNhI}p?N)#xW z8b=6a(ofvT-EljwUjUZtv`EZy>vr!z4kk%Vr|C zXl`n92KyPf>_UXS6zQ&=gWH7qUq%9Po7L`RQp2 zQPYtge>j$;lIH5hHiaNNlZb`=9;cN`q@wv5gh-XhwmH3lD|%}aA(Wknh5Q}|PmAYg z5JK5zn+r6@yI0mX+iTblpG`a(^1D0q!tA_ALfIC(%NvXkU8*%fvyehIg-Lvj)+nUn zg}DW>lw~{IK7p<_R@U3=ErjGVNv=yPWlM|m6r$0aFv%6&TH9D%rVwO@J8q&ED1@>x zNhr!ns*Tp#`U(~)FgoCM*>R-?v}loqAe+%~>aI4HSJx(>@IBtt$><^5FKK4HjhzixDg>l`@PI< z)FT{fgiy9G(51^&UY$U8@H$Ougg9={r3$JMa)YLDLGA3)sSJge3Y`$%ZL^p_tC`wr zr)*Y|AiCI5(~+!%XuVcL)f7ULpqm4YGkGx-`N~2BXPBYGm_tES^A0Hk&3jLNE!ropu|^ zO@bOnGB-v^rqUU7keaf2no`VwnVOCiXi8xn91H2vkP~dD8@-GUM`H+w9BRM_VQvqd z37UspT{;AZ zVSa>t00)nUSb;_g;o#{f-T)S8 v!s!uMa#OkR59}8K=IzAMgLio7Pk0zcKlrz#?mQim-V1;I?n?)~@f!F)zdc|X literal 0 HcmV?d00001 diff --git a/data/sounds/effects/explosion2.wav b/data/sounds/effects/explosion2.wav new file mode 100644 index 0000000000000000000000000000000000000000..f24c6e96cb171cb8479a03e9aebbd6da6bcddad7 GIT binary patch literal 25972 zcmeI)e^3-v902gcnapakCQK)FrluKZ`eEfSY@EunF+*o6rXM00g)}5ZCZa#EFpX2QleoxYzqN(r&>W)a3Us)hKDz zs6uN;U*7UfRC`F<9<3VuWhtqW4TO(AQM90%-X+{esl$1Mi>KY8nt@7roK&Z64>es$ z(M>DZfVX~G+58(droX4vct9(Ej@BsRHI8Z^q>m%?&?-sB{v-7LrZ|Obo=HmCN%8V( ziU;nYm@uBA;`fMN#J)FaCKC;#21Y(dwYib1zJ{*jZ@NCR0Yj0KZ!v7hVY&JOnhO<0 z#C9GD?AXq<|2W%NYD?AOtR*hYWtsdR@JO?U~Tl9O&F-KOxhwe0x zCb5c~i)Ypgcx8!*hpylo9X93~zH1|r)LoZ|JF|tY zEo-`pPx*;1}m@?a}xv!xgUSiCq7kFP8 zv3y`fZRsiiNe0`CUHpbtb!4dvA9-?8ok0N2T1U^|9~kIV-@nHFV_fIL^A*EPqYX~= zW7Eq!seXX;y?|p!NzsWZccD!)=WT60ENnb?*fCN^a_L1XZT~^lADwq8~N05rx)KM?XC$ ze&+cJz>fk>oy8dM7L+xNcMR$pXLKCMO*1RqJ^sg>v)C2o_2|yV;PPko`P4=SK^$)H z?6ydmy;{bf{tD(&M_5LKFat7yk(fx4?_eAQ(gEaKDCAhyY=k@XHIx}Xy94w0YdBv) zIs&N;)R&-$IgiDF@Qg{Y;1|%qM*q|P;z)ktru|DUmq7!K=iM~;?wST-443l`Z#`24Tb1)Vx1w{e?k?6cFZ zaNYDc7Dm)fj;6(tdsQ0gVL1$awnPnXA?=s`12Bnm{ZwGtm zCHYvrF1?y_t0eOtN_jIjyQ3;{1LffT&$=^Irub^&>kGVq3oRhQ@m;S9MU-!Q@IubF zKA_p zhA)&!rd+aYu)>8AviFok3wR@T8Cqav!Qi$$HWW)RE-#6DYs%xoddaQTetl=0r(HTB zEy-s=@{JXudc2be0TW-aMqTA8iE&Qw%8`{<5F6u&fm*H@tSE!kn0jMOR93>bvQUE2 rs!UaIY2Zvusl9*;Ef6sA?iYKI763U%R}}DgE#S34s09RegMt46>-JV- literal 0 HcmV?d00001 diff --git a/data/sounds/effects/init_hud.wav b/data/sounds/effects/init_hud.wav new file mode 100644 index 0000000000000000000000000000000000000000..70c2a85390819774fa2426feef10b89b911fcdfa GIT binary patch literal 54549 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 Zd-wnE&basTSN?L_Cc6j+HeMpU{{bz@$&>&9 literal 0 HcmV?d00001 diff --git a/data/sounds/effects/start.wav b/data/sounds/effects/start.wav new file mode 100644 index 0000000000000000000000000000000000000000..078dd5bfe97e3c21ac057088b12f92d2b36b3e24 GIT binary patch literal 19269 zcmd5@$x<9g5Jfj1ef7;h;)5e>ML2x(!9G~FRs&+uf>^{1%#4O%h8@I?5FjC2mMlKf z-Bp!UnORxY)jdM+6zZ;e`SN9Eb%R3E@XJp(Z+`dlz`$?c|N7(L_~f@=4-5?4$bS8B zF`$0m82D=7!QIKb-(;GtJ+5A~a^_B{ZbAIIa=r426*??mqUQ40e_vcW(JV#wI4f9$&oyLmt&^0Ni!_5p^Smf>D2%t`C3Xu9 z;)1AqU*^%qAIH0jL}w!%S9OiFIv8n14E>p7HQ1z>laVSda0$8%1royalR#s;;S@O% zGLqFnRvzsnsFwmm|K{L>txD1mx2i1Ir5#fH{18i3+gV>1U}lB%1P)E7gj8)%Wy zLw;u3xO-mW6J{-Ly|g`1MoGU(8W(q7B~eAl1vb+uiAo!uu^@>s#}kSk@EUEY=(O0- zPjP8~eM-zveSu+a=b&Ods0xz{ZKFnFY(ozuCLJc-E-)XwC7!1^!q((;BaXx{+#~5Q zY*)jBu#VgotHLvUP|$`hm#&^_k-7%EO3*AgO{gIx*`rO^oiq6`Y)P_kiZjC74XX0g zl6Zjxn09MdLOu`|7YjK5HRtJ8HJiTfNVnRzVd(&zw^VxF<~l#S8n!{{9gPLuD`L&u z;tVo{hHT6q#d->d0FL{v3alXHXVoF(*MdkLT;M(okqKbn4sK^a*gK?nWnfs(3o@*Q zS#(T*w>4pSJ|plQYIFyD9vc3RfwAe_214J>3${<$JBD6oH1tSmQ<8Z+G~$O;EV7`b zQsdj9tTs5Kr0JK|G9*>%2Sd}%S=NbCXH%i+i0I7AK}u^K&DDP7L`_|idiF6NkhHS? zF$c-i6gioFr6P%n`G~u%D~ee8BJG5`(&Z+QlV*%YTg0yBsTbaG2~_P`Ehl1wmX48U zab4zIEIo#pa9zd`n=3(H>07x`qERN@xPk{zv0eP#rr)mb7J!{n!uCx{O9fR6!*dCZ zV9B#W$9@DOxKz=4qn}E#+-Lt~D5|dFZ(=r8V{h{E0(eJN{R4R;LP?)G2xM2G=X`sQ zS*&6#5-)$02s&Yd&WBKGt#7!-#lR zvkV(n`HnizPY?Fp^kV~M=#4EsXTWG43KiY&DU8A>^d5B4S?nsGw)0?eX-mtS-KeCL zIq?xq%36Wl6zb0lI+2pb7li^T)D=_$B|NyahW$~K^87TRDUW*lDF+%d;gQU%9Jpk; z#r=(f8t%nqKnZuRbxwfL+&6ig@0q@!qfsh9=WcY*)bU=JINk_tBl-n+M6@yKBvHm5 z=N48T(V@wX6puI(!|>>%xNetJ!W;5x;s9BbaY+Pk@C3oe&Rt*UI2o_;h?vJ~XY;9t zd9+5Q0_WLqE`djb6oE3X$~mfymQEnoKqbUi&c)>d?${fss$IIn6vM7Nn}HTCS!&Hz zK1V6AoU&&-1(dsw#e#O=bC+OOHgU{Sc41?du?y?zKSkTimQ};ThFI49`}ccL47B$$ zQo$yv^9DA*+sG7V^EI@0&I9+MjF$or&I>>Ww}Kiy7J#mf0{j-^!G{+%4RIUu3h~Jd z&DF+)^$710>%@o~ls0cAV~v(JZG2f1#$b%tn&(Yj4M|PSWHenr6nc~@IuxDt3_J*k!kc{Kvvwgd*=y`lT(WLe&HOB|qIjRgr#mX@??~6UobH;iXu~ zC-I-LpQDeoulfEfJphdRGkHwehYa4{y?DAN8_lywA(p%easvG+Jf7kb)!4sdAy>3q z`l~NILjREEFW;8+9z>Yo|J{W5JtQo-RG&1FKaz2nZZ$+8+kMDBb+}1%$s7CuNU}ai zw$Q@i9B2F^!o{2k0P9{&1w& shape, float brightness, const Punt& velocitat_objecte, float velocitat_angular, - float factor_herencia_visual) { + float factor_herencia_visual, + const std::string& sound) { if (!shape || !shape->es_valida()) { return; } // Reproducir sonido de explosión - Audio::get()->playSound(Defaults::Sound::EXPLOSION, Audio::Group::GAME); + Audio::get()->playSound(sound, Audio::Group::GAME); // Obtenir centre de la forma per a transformacions const Punt& shape_centre = shape->get_centre(); diff --git a/source/game/effects/debris_manager.hpp b/source/game/effects/debris_manager.hpp index 20b1370..6c16377 100644 --- a/source/game/effects/debris_manager.hpp +++ b/source/game/effects/debris_manager.hpp @@ -37,7 +37,8 @@ class DebrisManager { float brightness = 1.0f, const Punt& velocitat_objecte = {0.0f, 0.0f}, float velocitat_angular = 0.0f, - float factor_herencia_visual = 0.0f); + float factor_herencia_visual = 0.0f, + const std::string& sound = Defaults::Sound::EXPLOSION); // Actualitzar tots els fragments actius void actualitzar(float delta_time); diff --git a/source/game/effects/gestor_puntuacio_flotant.cpp b/source/game/effects/gestor_puntuacio_flotant.cpp index 90d7b0b..2c488f1 100644 --- a/source/game/effects/gestor_puntuacio_flotant.cpp +++ b/source/game/effects/gestor_puntuacio_flotant.cpp @@ -61,16 +61,11 @@ void GestorPuntuacioFlotant::dibuixar() { if (!pf.actiu) continue; - // 1. Calcular dimensions del text per centrar-lo + // Renderitzar centrat amb brightness (fade) constexpr float escala = Defaults::FloatingScore::SCALE; constexpr float spacing = Defaults::FloatingScore::SPACING; - float text_width = text_.get_text_width(pf.text, escala, spacing); - // 2. Centrar text sobre la posició - Punt render_pos = {pf.posicio.x - text_width / 2.0f, pf.posicio.y}; - - // 3. Renderitzar amb brightness (fade) - text_.render(pf.text, render_pos, escala, spacing, pf.brightness); + text_.render_centered(pf.text, pf.posicio, escala, spacing, pf.brightness); } } diff --git a/source/game/escenes/escena_joc.cpp b/source/game/escenes/escena_joc.cpp index 6b91d32..701088b 100644 --- a/source/game/escenes/escena_joc.cpp +++ b/source/game/escenes/escena_joc.cpp @@ -526,17 +526,15 @@ void EscenaJoc::dibuixar() { // Draw centered "GAME OVER" text const std::string game_over_text = "GAME OVER"; - constexpr float escala = 2.0f; - constexpr float spacing = 4.0f; - - float text_width = text_.get_text_width(game_over_text, escala, spacing); - float text_height = text_.get_text_height(escala); + constexpr float escala = Defaults::Game::GameOverScreen::TEXT_SCALE; + constexpr float spacing = Defaults::Game::GameOverScreen::TEXT_SPACING; + // Calcular centre de l'àrea de joc usant constants const SDL_FRect& play_area = Defaults::Zones::PLAYAREA; - float x = play_area.x + (play_area.w - text_width) / 2.0f; - float y = play_area.y + (play_area.h - text_height) / 2.0f; + float centre_x = play_area.x + play_area.w / 2.0f; + float centre_y = play_area.y + play_area.h / 2.0f; - text_.render(game_over_text, {x, y}, escala, spacing); + text_.render_centered(game_over_text, {centre_x, centre_y}, escala, spacing); dibuixar_marcador(); return; @@ -577,7 +575,7 @@ void EscenaJoc::dibuixar() { if (rect_progress > 0.0f) { // [NOU] Reproduir so quan comença l'animació del rectangle if (!init_hud_rect_sound_played_) { - Audio::get()->playSound(Defaults::Sound::LOGO, Audio::Group::GAME); + Audio::get()->playSound(Defaults::Sound::INIT_HUD, Audio::Group::GAME); init_hud_rect_sound_played_ = true; } @@ -702,11 +700,10 @@ void EscenaJoc::tocado(uint8_t player_id) { naus_[player_id].get_brightness(), // Heredar brightness vel_nau_80, // Heredar 80% velocitat 0.0f, // Nave: trayectorias rectas (sin drotacio) - 0.0f // Sin herencia visual (rotación aleatoria) + 0.0f, // Sin herencia visual (rotación aleatoria) + Defaults::Sound::EXPLOSION2 // Sonido alternativo para la explosión ); - Audio::get()->playSound(Defaults::Sound::EXPLOSION, Audio::Group::GAME); - // Start death timer (non-zero to avoid re-triggering) itocado_per_jugador_[player_id] = 0.001f; } @@ -739,19 +736,13 @@ void EscenaJoc::dibuixar_marcador() { const float escala = 0.85f; const float spacing = 0.0f; - // Calcular dimensions del text - float text_width = text_.get_text_width(text, escala, spacing); - float text_height = text_.get_text_height(escala); + // Calcular centre de la zona del marcador + const SDL_FRect& scoreboard = Defaults::Zones::SCOREBOARD; + float centre_x = scoreboard.w / 2.0f; + float centre_y = scoreboard.y + scoreboard.h / 2.0f; - // Centrat horitzontal dins de la zona del marcador - float x = (Defaults::Zones::SCOREBOARD.w - text_width) / 2.0f; - - // Centrat vertical dins de la zona del marcador - float y = Defaults::Zones::SCOREBOARD.y + - (Defaults::Zones::SCOREBOARD.h - text_height) / 2.0f; - - // Renderitzar - text_.render(text, {x, y}, escala, spacing); + // Renderitzar centrat + text_.render_centered(text, {centre_x, centre_y}, escala, spacing); } void EscenaJoc::dibuixar_marges_animat(float progress) const { @@ -826,25 +817,19 @@ void EscenaJoc::dibuixar_marcador_animat(float progress) { const float escala = 0.85f; const float spacing = 0.0f; - // Calcular dimensions - float text_width = text_.get_text_width(text, escala, spacing); - float text_height = text_.get_text_height(escala); - - // Posició X final (centrada horitzontalment) - float x_final = (Defaults::Zones::SCOREBOARD.w - text_width) / 2.0f; - - // Posició Y final (centrada verticalment en la zona de scoreboard) - float y_final = Defaults::Zones::SCOREBOARD.y + - (Defaults::Zones::SCOREBOARD.h - text_height) / 2.0f; + // Calcular centre de la zona del marcador + const SDL_FRect& scoreboard = Defaults::Zones::SCOREBOARD; + float centre_x = scoreboard.w / 2.0f; + float centre_y_final = scoreboard.y + scoreboard.h / 2.0f; // Posició Y inicial (offscreen, sota de la pantalla) - float y_inicial = static_cast(Defaults::Game::HEIGHT) + text_height; + float centre_y_inicial = static_cast(Defaults::Game::HEIGHT); // Interpolació amb easing - float y_animada = y_inicial + (y_final - y_inicial) * eased_progress; + float centre_y_animada = centre_y_inicial + (centre_y_final - centre_y_inicial) * eased_progress; - // Renderitzar en posició animada - text_.render(text, {x_final, y_animada}, escala, spacing); + // Renderitzar centrat en posició animada + text_.render_centered(text, {centre_x, centre_y_animada}, escala, spacing); } Punt EscenaJoc::calcular_posicio_nau_init_hud(float progress, uint8_t player_id) const { @@ -1067,10 +1052,9 @@ void EscenaJoc::detectar_col·lisio_naus_enemics() { void EscenaJoc::dibuixar_missatge_stage(const std::string& missatge) { constexpr float escala_base = 1.0f; constexpr float spacing = 2.0f; - constexpr float max_width_ratio = 0.9f; // 90% del ancho disponible const SDL_FRect& play_area = Defaults::Zones::PLAYAREA; - const float max_width = play_area.w * max_width_ratio; // 558px + const float max_width = play_area.w * Defaults::Game::STAGE_MESSAGE_MAX_WIDTH_RATIO; // ========== TYPEWRITER EFFECT (PARAMETRIZED) ========== // Get state-specific timing configuration @@ -1123,7 +1107,7 @@ void EscenaJoc::dibuixar_missatge_stage(const std::string& missatge) { // Calculate position as if FULL text was there (for fixed position typewriter) float x = play_area.x + (play_area.w - full_text_width) / 2.0f; - float y = play_area.y + (play_area.h * 0.25f) - (text_height / 2.0f); + float y = play_area.y + (play_area.h * Defaults::Game::STAGE_MESSAGE_Y_RATIO) - (text_height / 2.0f); // Render only the partial message (typewriter effect) Punt pos = {x, y}; @@ -1190,7 +1174,7 @@ void EscenaJoc::actualitzar_continue(float delta_time) { continue_tick_timer_ = Defaults::Game::CONTINUE_TICK_DURATION; // Play tick sound - Audio::get()->playSound("continue_tick"); + Audio::get()->playSound(Defaults::Sound::CONTINUE, Audio::Group::GAME); if (continue_counter_ <= 0) { // Timeout → final game over @@ -1257,7 +1241,7 @@ void EscenaJoc::processar_input_continue() { continue_tick_timer_ = 0.0f; // Play continue confirmation sound - Audio::get()->playSound("continue_confirm"); + Audio::get()->playSound(Defaults::Sound::START, Audio::Group::GAME); return; } @@ -1272,7 +1256,7 @@ void EscenaJoc::processar_input_continue() { continue_counter_--; // Play tick sound on manual decrement - Audio::get()->playSound("continue_tick"); + Audio::get()->playSound(Defaults::Sound::CONTINUE, Audio::Group::GAME); if (continue_counter_ <= 0) { estat_game_over_ = EstatGameOver::GAME_OVER; @@ -1293,22 +1277,19 @@ void EscenaJoc::dibuixar_continue() { float escala_continue = Defaults::Game::ContinueScreen::CONTINUE_TEXT_SCALE; float y_ratio_continue = Defaults::Game::ContinueScreen::CONTINUE_TEXT_Y_RATIO; - float text_width_continue = text_.get_text_width(continue_text, escala_continue, spacing); - float x_continue = play_area.x + (play_area.w - text_width_continue) / 2.0f; - float y_continue = play_area.y + play_area.h * y_ratio_continue; + float centre_x = play_area.x + play_area.w / 2.0f; + float centre_y_continue = play_area.y + play_area.h * y_ratio_continue; - text_.render(continue_text, {x_continue, y_continue}, escala_continue, spacing); + text_.render_centered(continue_text, {centre_x, centre_y_continue}, escala_continue, spacing); // Countdown number (using constants) const std::string counter_str = std::to_string(continue_counter_); float escala_counter = Defaults::Game::ContinueScreen::COUNTER_TEXT_SCALE; float y_ratio_counter = Defaults::Game::ContinueScreen::COUNTER_TEXT_Y_RATIO; - float text_width_counter = text_.get_text_width(counter_str, escala_counter, spacing); - float x_counter = play_area.x + (play_area.w - text_width_counter) / 2.0f; - float y_counter = play_area.y + play_area.h * y_ratio_counter; + float centre_y_counter = play_area.y + play_area.h * y_ratio_counter; - text_.render(counter_str, {x_counter, y_counter}, escala_counter, spacing); + text_.render_centered(counter_str, {centre_x, centre_y_counter}, escala_counter, spacing); // "CONTINUES LEFT" (conditional + using constants) if (!Defaults::Game::INFINITE_CONTINUES) { @@ -1316,11 +1297,9 @@ void EscenaJoc::dibuixar_continue() { float escala_info = Defaults::Game::ContinueScreen::INFO_TEXT_SCALE; float y_ratio_info = Defaults::Game::ContinueScreen::INFO_TEXT_Y_RATIO; - float text_width_info = text_.get_text_width(continues_text, escala_info, spacing); - float x_info = play_area.x + (play_area.w - text_width_info) / 2.0f; - float y_info = play_area.y + play_area.h * y_ratio_info; + float centre_y_info = play_area.y + play_area.h * y_ratio_info; - text_.render(continues_text, {x_info, y_info}, escala_info, spacing); + text_.render_centered(continues_text, {centre_x, centre_y_info}, escala_info, spacing); } } diff --git a/source/game/escenes/escena_titol.cpp b/source/game/escenes/escena_titol.cpp index b7f42ef..dc7cb55 100644 --- a/source/game/escenes/escena_titol.cpp +++ b/source/game/escenes/escena_titol.cpp @@ -420,8 +420,8 @@ void EscenaTitol::actualitzar(float delta_time) { } } - // Reproducir so de LASER quan el segon jugador s'uneix - Audio::get()->playSound(Defaults::Sound::LASER, Audio::Group::GAME); + // Reproducir so de START quan el segon jugador s'uneix + Audio::get()->playSound(Defaults::Sound::START, Audio::Group::GAME); // Reiniciar el timer per allargar el temps de transició temps_acumulat_ = 0.0f; @@ -496,7 +496,7 @@ void EscenaTitol::actualitzar(float delta_time) { } Audio::get()->fadeOutMusic(MUSIC_FADE); - Audio::get()->playSound(Defaults::Sound::LASER, Audio::Group::GAME); + Audio::get()->playSound(Defaults::Sound::START, Audio::Group::GAME); } } } @@ -652,12 +652,10 @@ void EscenaTitol::dibuixar() { const std::string main_text = "PRESS START TO PLAY"; const float escala_main = Defaults::Title::Layout::PRESS_START_SCALE; - float text_width = text_.get_text_width(main_text, escala_main, spacing); + float centre_x = Defaults::Game::WIDTH / 2.0f; + float centre_y = Defaults::Game::HEIGHT * Defaults::Title::Layout::PRESS_START_POS; - float x_center = (Defaults::Game::WIDTH - text_width) / 2.0f; - float y_center = Defaults::Game::HEIGHT * Defaults::Title::Layout::PRESS_START_POS; - - text_.render(main_text, Punt{x_center, y_center}, escala_main, spacing); + text_.render_centered(main_text, {centre_x, centre_y}, escala_main, spacing); } // === Copyright a la part inferior (centrat horitzontalment, dues línies) === @@ -681,15 +679,11 @@ void EscenaTitol::dibuixar() { float y_line1 = Defaults::Game::HEIGHT * Defaults::Title::Layout::COPYRIGHT1_POS; float y_line2 = y_line1 + copy_height + line_spacing; // Línea 2 debajo de línea 1 - // Renderitzar línea 1 (original) - float width_line1 = text_.get_text_width(copyright_original, escala_copy, spacing); - float x_line1 = (Defaults::Game::WIDTH - width_line1) / 2.0f; - text_.render(copyright_original, Punt{x_line1, y_line1}, escala_copy, spacing); + // Renderitzar línees centrades + float centre_x = Defaults::Game::WIDTH / 2.0f; - // Renderitzar línea 2 (port) - float width_line2 = text_.get_text_width(copyright_port, escala_copy, spacing); - float x_line2 = (Defaults::Game::WIDTH - width_line2) / 2.0f; - text_.render(copyright_port, Punt{x_line2, y_line2}, escala_copy, spacing); + text_.render_centered(copyright_original, {centre_x, y_line1}, escala_copy, spacing); + text_.render_centered(copyright_port, {centre_x, y_line2}, escala_copy, spacing); } }