From eed8f5f04a4e04264b238754b0423d14fbf84d36 Mon Sep 17 00:00:00 2001 From: mduval76 <9343789@etu.cegepsth.qc.ca> Date: Sun, 29 Oct 2023 15:39:29 -0400 Subject: [PATCH] Push menu solo ou multi. --- SQCSim2021/engine.cpp | 78 +++++++++++++++++++- SQCSim2021/engine.h | 4 +- SQCSim2021/media/textures/multi_player.png | Bin 0 -> 3731 bytes SQCSim2021/media/textures/single_player.png | Bin 0 -> 4081 bytes 4 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 SQCSim2021/media/textures/multi_player.png create mode 100644 SQCSim2021/media/textures/single_player.png diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index 0a91a89..26cf983 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -72,6 +72,8 @@ void Engine::DrawSplachScreen() glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); + + m_gamestate = GameState::OPTIONS; } @@ -347,6 +349,9 @@ void Engine::LoadResource() { LoadTexture(m_textureGun, TEXTURE_PATH "gun01.png", false); LoadTexture(m_texturePovGun, TEXTURE_PATH "GUN.png", false); LoadTexture(m_textureSoloMultiMenu, TEXTURE_PATH "single_multi.png", false); + LoadTexture(m_textureSoloText, TEXTURE_PATH "single_player.png", false); + LoadTexture(m_textureMultiText, TEXTURE_PATH "multi_player.png", false); + LoadTexture(m_textureSoloMultiMenu, TEXTURE_PATH "single_multi.png", false); LoadTexture(m_textureTitle, TEXTURE_PATH "title.png", false); LoadTexture(MenuTitleTexture, MENU_ITEM_PATH "test.png"); @@ -725,7 +730,8 @@ void Engine::DisplaySingleOrMultiplayerMenu() { float titleWidth = (centerX * 1.85f) * scaleX; float titleHeight = (centerY * 1.85f) * scaleY; - // Solo game indicator + // Title + glColor4f(1.0f, 0.33f, 0.66f, 1.0f); m_textureTitle.Bind(); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(centerX, centerY); @@ -750,10 +756,29 @@ void Engine::DisplaySingleOrMultiplayerMenu() { glTexCoord2f(0.0f, 1.0f); glVertex2f(fPosX, soloHeight); glEnd(); + glBindTexture(GL_TEXTURE_2D, 0); + + float fPosXSoloText = (centerX * 0.75f) * scaleX; + float fPosXWidthSoloText = (centerX * 2.0f) * scaleX; + float soloPosYSoloText = (centerY * 0.35f) * scaleY; + float soloHeightSoloText = (centerY * 1.3) * scaleY; + + m_textureSoloText.Bind(); + glColor4f(0.5f, 0.0f, 0.5f, 1.0f); + glBegin(GL_QUADS); + glTexCoord2f(0.0f, 0.0f); glVertex2f(fPosXSoloText, soloPosYSoloText); + glTexCoord2f(1.0f, 0.0f); glVertex2f(fPosXWidthSoloText, soloPosYSoloText); + glTexCoord2f(1.0f, 1.0f); glVertex2f(fPosXWidthSoloText, soloHeightSoloText); + glTexCoord2f(0.0f, 1.0f); glVertex2f(fPosXSoloText, soloHeightSoloText); + glEnd(); + + glBindTexture(GL_TEXTURE_2D, 0); + // Multiplayer game indicator float multiPosY = (centerY * 0.5f) * scaleY; float multiHeight = (centerY * 0.65f) * scaleY; + glColor4f(1.0f, 1.0f, 1.0f, 0.5f); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(fPosX, multiPosY); glTexCoord2f(1.0f, 0.0f); glVertex2f(fPosXWidth, multiPosY); @@ -761,6 +786,20 @@ void Engine::DisplaySingleOrMultiplayerMenu() { glTexCoord2f(0.0f, 1.0f); glVertex2f(fPosX, multiHeight); glEnd(); + + float fPosXMultiText = (centerX * 0.7f) * scaleX; + float fPosXWidthMultiText = (centerX * 2.0f) * scaleX; + float multiPosYMultiText = (centerY * 0.01f) * scaleY; + float multiHeightMultiText = (centerY * 1.0105) * scaleY; + + m_textureMultiText.Bind(); + glColor4f(0.5f, 0.0f, 0.5f, 1.0f); + glBegin(GL_QUADS); + glTexCoord2f(0.0f, 0.0f); glVertex2f(fPosXMultiText, multiPosYMultiText); + glTexCoord2f(1.0f, 0.0f); glVertex2f(fPosXWidthMultiText, multiPosYMultiText); + glTexCoord2f(1.0f, 1.0f); glVertex2f(fPosXWidthMultiText, multiHeightMultiText); + glTexCoord2f(0.0f, 1.0f); glVertex2f(fPosXMultiText, multiHeightMultiText); + glEnd(); // TODO: Add SOLO / MULTIPLAYER text with font glColor4f(1.0f, 1.0f, 1.0f, 1.0f); @@ -772,6 +811,9 @@ void Engine::DisplaySingleOrMultiplayerMenu() { glMatrixMode(GL_MODELVIEW); glPopMatrix(); + + + ShowCursor(); } void Engine::DrawHud(float elapsedTime, BlockType bloc) { @@ -879,8 +921,9 @@ void Engine::Render(float elapsedTime) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); m_time_SplashScreen += elapsedTime; - if(m_time_SplashScreen < 2) - DrawSplachScreen(); + if (m_time_SplashScreen < 2) { + DrawSplachScreen(); + } else if (m_gamestate == GameState::PLAY) { HideCursor(); @@ -999,7 +1042,12 @@ void Engine::Render(float elapsedTime) { } else if (m_gamestate == GameState::MAIN_MENU || m_gamestate == GameState::OPTIONS) { - DrawMenu(); + if (!m_soloMultiChoiceMade) { + DisplaySingleOrMultiplayerMenu(); + } + else { + DrawMenu(); + } } else if (m_gamestate == GameState::QUIT) Stop(); @@ -1193,6 +1241,28 @@ void Engine::MousePressEvent(const MOUSE_BUTTON& button, int x, int y) { if ((m_mousemx >= 305 && m_mousemx <= 450) && (m_mousemy >= 300 && m_mousemy <= 400)) m_gamestate = GameState::QUIT; } + else if (m_gamestate == GameState::OPTIONS) + { + auto [scaleX, scaleY] = GetScale(); + float soloLx = ((Width() / 2.0f) + 30) * scaleX; + float soloLy = ((Height() / 2.0f) + 20) * scaleY; + float soloRx = ((Width() / 2.0f) + 240) * scaleX; + float soloRy = ((Height() / 2.0f) + 60) * scaleY; + + float multiLx = ((Width() / 2.0f) + 30) * scaleX; + float multiLy = ((Height() / 2.0f) + 85) * scaleY; + float multiRx = ((Width() / 2.0f) + 240) * scaleX; + float multiRy = ((Height() / 2.0f) + 120) * scaleY; + + if (m_mousemx >= soloLx && m_mousemx <= soloRx && m_mousemy >= soloLy && m_mousemy <= soloRy) { + m_soloMultiChoiceMade = true; + m_gamestate = GameState::PLAY; + } + else if (m_mousemx >= multiLx && m_mousemx <= multiRx && m_mousemy >= multiLy && m_mousemy <= multiRy) { + m_soloMultiChoiceMade = true; + m_gamestate = GameState::PLAY; + } + } } void Engine::MouseReleaseEvent(const MOUSE_BUTTON& button, int x, int y) { diff --git a/SQCSim2021/engine.h b/SQCSim2021/engine.h index 0ed8b39..a12ec8a 100644 --- a/SQCSim2021/engine.h +++ b/SQCSim2021/engine.h @@ -72,6 +72,8 @@ private: Texture m_texturePovGun; Texture m_textureSkybox; Texture m_textureSoloMultiMenu; + Texture m_textureSoloText; + Texture m_textureMultiText; Texture m_textureTitle; Skybox m_skybox; @@ -112,7 +114,7 @@ private: bool m_displayHud = true; bool m_displayInfo = false; bool m_resetcountdown = false; - bool m_soloMultiChoiceMade = true; + bool m_soloMultiChoiceMade = false; bool m_stopcountdown = false; bool m_keyK = false; diff --git a/SQCSim2021/media/textures/multi_player.png b/SQCSim2021/media/textures/multi_player.png new file mode 100644 index 0000000000000000000000000000000000000000..b013b441f8be1d3acff72721308c61306a67e8cb GIT binary patch literal 3731 zcmeHIjXRU;AAdqAM2M!dNJ($w%wZ%izi2gYBQISU^M1@}n$#%drJtOb(JEqXsN-c8 z$Ap^Vpo}i?2>_I=Hf{iC+%E+7gP(OoACxn|>V-%sA+SQiWt z05myk@4BwD%wNHueXd9+zl7j9QCnZ&a|6}+M}d}8#idB&qrV_;C~3GvZmh~bE}Ew9 zxaVO73p)Hjhq+sKF72`(=|;@S+iu!9d(?F>0Z3Jo(A_!jZCm=5COT46`szOXyp-yA z^AmLS5j#X!8`tL8)z<$L|KTSb1!66`%EubGflSbyET)FT&;u6T}-n=yH; zX5nc0(4BBTLeiwlLuVI@PHmTeG_0jfMyW%_yh@e&Tk;<4Uc8Va{A-I|ldM5mXxye3 zzs;tUg@NfCRY;k(rzUSP>C1=lq`i{5G~G85#NY0iQT3d(?uN+AN)EQaawTdeopZ69 zEG&IrI=9Ni=}SG6cqQbI4fs~7t!$^s>{H~XBw%HP-H=d)&~R3jYAP}JG5O$(g{~|#UB%&YYLG|exHTtUTj_(<+q)O#gHi8C z$4hd}92#@m9BQ? zKlXFqc}Eu#42il01kFei9O~et6$**6BUkQP#<2hPPc?{lV;vKrTwnIm7_e%tO>_aF zHxXA&mTM2?-BpF>pxZuS)YIU^K>EF{__-0xaDHUG0>`W8*;<9IGxg|Kh8!QmB(q&R z81t$P4|Eu^Ta=LD7ZU60(>>Cp<<$anVUe${erPFJ)9WI$rR?Ho)jZps5-EIlTXqu~ z?OU*1;Q^vOMu2E8AX@KCeJ!o{cyHal>oGDM@m=`YXNU>3+&;eLBCk{)CohPgyh&(9dO?vf3sV{{gQt9ga_Ej!-O#=ks)VkslP|Ku$c zSVis+VoT+9)9N1#fH94=*f##(bqk@L=N~6SIK4Zu>RUoJ4VWL}t&clv5 zW?-iV_Ox#Sq3KM!(tR5zEdU}EGYMbmo)uxW4004$`@&jQHkg$unUWeP>Zhu%5Y6x; zsLX9Nd!(w20ZXy^R#=>NfPCdlih&;F#dr&A!#oHp{eJO=8fBM2A*4?6N^0WAUL}!MD|{D(j{xOe}+BP1WcdWllj-n!E1^o z-ta&WC18fm+!KQ|yBVApM5|vM$Po8qYp|y38b|t-FDs}4-CP!uaH~Y#d@os4bnv{+ z!)F)0$>nd$H@T}NNfy1rv>3<0g^ASgZf;e(zj)z)0uCCwD@@Du_}cVmk-#}vZM{~6 z|3o$O3!xjsO+lL10yPtT z39D(gc+&H`r^*=Bdqtm5`-LLY4FM>lYyXp5RH?-n>zLWOD1*UAQ;ioJOASj06vPs z*_(i+<*oh>N4{J~`{0`{d6HJOLZd*eRW@%3bT(G39IX|Z1;XU*nqIf~XQYA=N&lx; zD!JX_RNe)x;_m&=1w&Ruo2hyC;gl0Eib0Pgv(a=@se_W2+i29SuftD z54E1U9z6fRTiEz)@-Qx`sL)qpH!Hp_4@mk`PH#9-!?1NLQH<>il0SOvdc(LmSt-Z! zo1-;?&vLE#D>4IFhJ91)9y}=xC7R@d2hdRW)hn>KaxleD-#rxKyu!S?BhC(N6^9d9 z-BI2)3VS>$j|nvFoL;A4f}590c~EN72lnu}AzkTo582y&#bL%2;ckPH$Tq?C*Q}Xn zdiH({eaG((#uRfAIlv_4y<_%kTAZla0`|$r?{e8*5b0pwB!T|N^k@mVTUj&$?d^t} vZOsmtIPdqJ-`zjT|DnM5sKB9wZRX2b%@tzD>+Z_SYYMm?^F*?oL(~5Sd$_S{ literal 0 HcmV?d00001 diff --git a/SQCSim2021/media/textures/single_player.png b/SQCSim2021/media/textures/single_player.png new file mode 100644 index 0000000000000000000000000000000000000000..40461fa924e1c8f5c075a34edb28f453b48440f9 GIT binary patch literal 4081 zcmeH}`#aPB8^BQHpb}8!Gd2FjLH;S)SnM8~QspFrJ+`tt9FN-Giyv)I6^ROFUYQv+ zGMGl>_1`un<4e3n9+S+xv`#TG`XvF>vHffl*e39=5YTUCu~^~Q`T4@T)WiIrqL%K? z_de;iM(%vr9UE45SZLG=Cc>Qz6MGI-U=<5W-;T`$j zs0Cc$Wy^MR(igvV_XomP`H@mi6aI3xq8oD>*aa>H#S5pAZR)LiRpz}A%c6&b@sUKM%211L|J|Ow);Pdz6GRWo^mtv^9zD^E#UO1$_`(L3C0E z;}SQ&)}pXH za6nIK(IU6TC;vZLoG0dEtp`@E*7H=aq99|bQ`cAuv|6GCasW?j$?Npxxn{asQjV-{ zp5FSh;CZt(49xq)so4(7!H3jNO)ip+k>Ssso<($>Szw7Q2 z-Q;*(mFo@IVDf@t#->ec#_^Q|TRy(D3fz7~Us5FFpNdW)o$Y zm&9<>qX%@F=OVGk6fwDiPP%omJ|j+&@->9`K=_mX8uZxpZF z%xD9eg{zkvzMUju>`YZ@9PPM`!+sNH z$@GQ(^2!{CFE>V2NLgqXFngdwQ_$utML!2bTX5Y@$OlF@`=0JM$*;&>R8re6hCf&To3XKjqnf!JXfU zDH+n;3V^#ymEuhqJQ^n+xz8QdQ_~hS97{D8G;CVJf==Qyg?U2NZ0}UG^Yk=dD5Cix zc6nR}Y)~NcZY;kZY{zl@VAnqJ%+Vn|V`2f~lnnky0lbc#6y&I^+r_FY@kg$7SU$5G(2$yaT z6lL1y`68s#CmzW?1cD`($Gn#%{B^2+KQ4Ohgy;DCQLa`?O? zUb*wF;fLwpt=-C}jK}cPE#!z3?@5)$y(@Rkq7n@gnu5uG3}%<2wecp=3=X~6I>_>1Ps zOSN>S>drKg;m6)M08JR1ycR)!)0b*Kk4*c8J)ZE2JVGdPd=>IQ-fOUx(Dq9?WpT}1 z(5nxdZe9egCu_}z(`+0P3CYE0s1>7QHO{%Al4R{pu6zm03RRNiY6E#;M9cfna!CXx zHTkocj~!r{q)fO=aper%q;WWOuO!zWxO(dF6>=XeZRtTpb%fcR!q@`@-Bh|*Al~18 zrpz?Ag?aSNqy(~9_xaEq;n*-%&18XRTf5?_$MC5uempjjQkkm08vKEoi<{3Ps8n$z zSZ1Xg3pPQ~l>#eCuFICRLVC`GaRZDey`xhRNkUvZm~5`WS{&;27vVT1lazW+BStLj z5uhml_jSXh52Mk7xK=?X`|phQGPo5i^u!znA3K&;0Wtv^psL)PG2)FJqRK}|M;-{( z7f)pMVwIM;oYNS)NV-q-`X!Fyog$)=2kid>t7qnQ77_xr?#M=b&Jb@fJ$0Ge<)jv^ zJ$W*QYP^U_Clypx+LA)lBy&}Oc$~z`i|ny4=D0JnBB9)f{=!s7I1FjsIwG4-I)+b{ zf2uK4N+`6BfFJu;{zSHuZWGuh01)VF(fNDLOtX|y`wOpJu!Y3d(!rv}+#~jX9K3IV literal 0 HcmV?d00001