From 30e976772fad58624499a9ccb6b19895c37f5e7a Mon Sep 17 00:00:00 2001 From: Kingsmedia Date: Sat, 28 May 2022 14:46:58 +0200 Subject: [PATCH] 204 - Return to Main Menu --- .../HUD/WBP_ReturnToMainMenu.uasset | Bin 0 -> 26496 bytes Source/Blaster/Blaster.Build.cs | 2 +- Source/Blaster/HUD/ReturnToMainMenu.cpp | 99 ++++++++++++++++++ Source/Blaster/HUD/ReturnToMainMenu.h | 38 +++++++ 4 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 Content/Blueprints/HUD/WBP_ReturnToMainMenu.uasset create mode 100644 Source/Blaster/HUD/ReturnToMainMenu.cpp create mode 100644 Source/Blaster/HUD/ReturnToMainMenu.h diff --git a/Content/Blueprints/HUD/WBP_ReturnToMainMenu.uasset b/Content/Blueprints/HUD/WBP_ReturnToMainMenu.uasset new file mode 100644 index 0000000000000000000000000000000000000000..ba38ea886ebf730d9e50577663dd87577be45ddf GIT binary patch literal 26496 zcmeHQ349bq)~`vz6$lap1O(|I$Q^QV1Vl(?k`N#VBmor>Ix{`V$Q)s&Ct(l~@MhIr z@V*6gy-;!G@K_IaRm5GdRlLykLR~<20dGa~y?=GpOedKM6F`6axmJEN)&1)AdsXkM z*Ihl8t>+ED`P;_E#s!ItB_}ZU8PzBq>2vbdGspcfbyxd+=d(@A77afsiC`D@?!Vyt zGROLVzS`@a*SGCSnMkk|JI-<4n^*S9XEUeWGj#KoCjc9`qw>Zl%1*kgutVCFFR$FF zjwINwtT#8LlwC4l%d(f&ubcMc*kpoD)(^h4+_u5`UXRsR1eE^A4JKIrnK!&ySn~Lw zyViF8h7t#0g7RJ)3 z9-E(=J1#eCY))a}INSJ)%#6$etJRi2##WG#KX!aUCZQOm2UVL=8S6{+9Vv_rrURnE zQjTY=Cw;sF8QZ@8onATn))rmR?Ucl&bFW&lYUy+5t-a~_!i}$Qd!+xagq6St9drOa zN?_O3kFj*8qY)#j3dW3>rMWdVpp6=np26E0`}ewGG1}=OUaUL1L1=6j@n2eFz~nb6 ztP!Jk5CF$0lj(SLk?PS#=evVio!{lv1EZ%_*+$RFFP}e4(}R9*rLRPFc}p~JFg+TO zt^NG=@1c}Dx2wkM(Y!kAHg@-UojJrk$K|Ne^Z@(o;GWlTkk?-8^V?KiW#83iEQZ14 zaZrHmbGWO!;@t07L*;&7o#xj=ta!smu44#Vo#%G@8f+vI-R1ML#{FIQ_5s-HRs(@q z+M=M#uLVj~-Bqtuy6g+t^Zi_ldU6Dx2c60fR#&^Va+lYuIoP7~!83ZbXq@c|xCn>M z9CY%@&`Wi};yTsq&>Y2Hn--wKX?}Lqw)thGURFI-4OH0ut~$NgQ|H#eL35OooOD)_ z^P?MP5fz2^ZTeF+GdPhMT8(NCm1>%!(pMhz*Ju?BHTNvd8DPJ^?~I8MMp!FFL6?KQ z)S++Hab{>mD4=Ve*_uB9p{&q5jc9UFWvEVLT~gP)2lJ}-`P?kMvttjLE6b;ou#CGU zZCKTT19jc!VU1gs+zufOHn!(4uKNY}zwe^NT?sZNA$Rdub# z=MS-OmRiQTyaC-GwCk+Fck_(~28okI zxwd5Nhva0;ra9H1TQBmfb+x5FhsHL3_(?r@I>;Vsh%fu*hwFcjp4nW1I=32{p;l{d zcI&tG>yIU1fx|`GvH9#l=&9K2^s&e0cl!a9ji$2dvoyP2uIjby#k^aVgHVB2C0lS* z=%BuJaOt}cP=U9`MNwmm#r6pVRDixTLA-Fv&M*2!Ynd>Cdd4ZT2k-sqHG@OY6Bgpk zH*T83ftA`~eOfS}yPP4m`1`!4VZ#L`;DiZQ*qWb>dcS^E7c|z>xxz)mKKX9I18^1& zBRkUkn%AzeJJ)@1FQQw4;f*B!I+vT=#KT>s+^;!YhJJ59FsuKFI1ndHnB#K0xh)5u zee7Xam$q25v!#0u_H9omPPb3hS&z_7e}_31;w(JUAMX6;kLY8OM*c*?b#M=67j`_g z62`y>!i|01%D>fvGC#4Fe_xBy!WG@RioP@3%FIdw7NLH}t7E4@j>Q4PWjW$|9~?Ig z9WmtUvQv~GZ}~{|oCh14u7w(Wen)^=N0n}b-_KA3dQ+1Lur4Pgyo~rYLk;AAd|UbnMXyI{;EK1a~4(cHje9kZKThacY=O?|1LuQHcyW5=uJ1I;b4| z^lPe{&E9@@I)*UIRa2|8&R-96LtL|bKHcyL)ov!0m)2l(oh^OtGg}yb zy3gmy^Z0_KwE4X*+m2pU*lRV9${HX0T?3d^xP3aCnRfLRV1|D*JCT{f)0#OkRuS~o8RDLCojbW?|cH=?tLQG&=bEmkVW}JjEo}Qp@ z0ft_y(VXz$KbCWJOp2HH3zmW;JlEv*qnGaRAkH)e&!Xgm+~l8=o?i-OR?>`7>8fL! z_H=jxG^)s|YY>pjNp}I(_r!JCFq_#FNPYe+8>`B2cj`?5${7?Rkx+D>f>c5&pw zckf(kgQv@8tIw}h8QNjr7LPgwEJs~(HdHBFs!EF3 z*m(yOGd95xQG9;3{>3@}A!_NWnPe_Os*q0m-0eRlW6Upj`FROx7`J zQeTYI1mn0HtUdd{)(l6`8y2rd<{_rb`7IJSwtxQTS&A7WT1GeD%C>zsOU z!r2I$(f@b3u!;hQA<-n?#(Bnk%FhkIm_I#>J-qeW6bz70Ne1q`J1p~HD&b(&e@_0{ zu;S@ih%xgyDhph2`tiUj(R7u^+g-~yUIEDoJ!#WFx1a|idayvz#XTV+aUQ*Ky@nAqPkPzH$(QW~0mH<|VUej!?|J^kn6BV>`EDQi z)@=>fy$_OA0nIO>O3L1I>fu+>gv{oxI`%D?XtYMsz^dTaYcQPVf-gIB`*kO@gg2W_ z>;HahpBlnKsWU3JkJ9~f#c_eCQ8mZ=58(yl#9JH(-oJ@nC{Da3ao~MU^z=CJ_7a{u zPCQSXc-}bid~xEfh!byRoOl<;iD!=kZx6}uf>!X(7Hz1sIPsiu;z^r~W~XMpwQhx2>lgDQHeMfL{ zIYT0OjyOROy;>aO@jzP(kqy(8*P3}@qK(FDl2u~IUq|DG2T_s&9;v{WQDa<%^g(&` zXW*4UbffX=W8*B_^c8Jf-(o$el+nyl7x9! z%J9S_gZSmeZD1l$QG%kFwL=b306)!Ka0Iwj7g-Y^Fqi)N0G+qZyG6b!q zf*{7mb8@QAoh^V=LB7H~Bfuy}(Rh7j;ssw`Ca%M{4vOP*RdLXU>QKDk%h7n9UEKyI z0yP>h+~b&wUz}u8Jw+Th*u_B`s%X6Sn`8)5=Lvd9x>s?fF}B6T>rncVx{Su_3jnDI z7VLa+0AIUE9OuboMk2LRx5n#$i4Wq296~2rn>bz2e69_=WH-$HmoPIg=uYy29ZFsU zWr89vildIk3o1#ZPY3$o7-0!~a143ii5!mcIfg!f0T;EzgUjO_IEdez$7IdO?9e&6Q*ug|&MB$=x~CpWHyrRi%ZMQ;Mb*fQY3_N=oW6 zscGH2rxm0RNiS$~X?%*Mc0`{NEdyCXswFYi()ctRK>ciI;YAL~l8~6xu6>7&osv5f z!lrI4!IGGmkd)Z2T@p#uat^h#q||oZ(=zkgA3Ia+FmO?itQD)*c04iv!L2=Ky|Qmm zcC~+Hr{rG8_3qPm@JU044jY~`X6(4}xf86mg2JMy#nUP(t7gwR^|aIN4$WCp>pCl- z2kRRahnAdo{sk9abnzvt)?9JrRaakg?RD3$yY2Qn{&?qIci;1;hc<57yyf9X9{tN- zpMK`qZO?6g{vWTtw&V3T-hAur4?g^8*T4 zlH6-h&Ig0{V`zM2@eOR{VT~+2u*kUHW?d33q`bsbHko};yKWU5`rGGMD1%2wl(jo+ z+~$2HJvP62Q`ME(V?%xVd{>)z)4E3=_;${t+a`~BvO~Y@Mz%lan2X+iWc+)cH~Kx) z_1yp5vV?tHd;i@}oUrF#S!eEKH4|@WWS89GyJ*Q@zFO$pdTk^7Y@_A*ne$TKSou}w z>8?B1%=K)zZ6bT&M#~ikPucNOxuu{-+dlJB9=L2w=jpWzE+669ux{O&`);(XI9T=4 z%qjh+e!Jq{%P;YsvZ9fFdr#T7WnX!hOCEU(>iaoeUy|ezD`$pGGhFw07O{e61eH*fse^AHY2(r)b?m4gq+%O7AMr z8Ud{n@MUq3L;iqOmO?+hu|R9HA)aOA1$7@!ftoJB@XRE<(271ZZ5InP$eD~6A9(5_ zmx1zKUI(qZ2e|k$IOp)=d;VSk`jTH>d0KhF{8FFaL(62yhQc_JB{+ieCVJC>R`NAR zxFx`Ip`pVV-lZ_T2T_a#YA3DU1#oFo)_lP-raX~PHG7o3fI!V2f;Yt&68CaZ)c05B zTZiy;(Y&HKlz8$bl_7FbM=UI*H(wnX!c#{>{D(^ct7N4?&n&IZjkRfdkHlC=b&>pF zeHq;T!iu4VZT{j3*052KyM`N^SR2F~ZV_)rKzX=|r^IFs1X*xqPHxWl>@iuq zjaJa$;i)da6*wFC{&6M9^JNHRLVF32kBzQjcoyhO>u z`U{MyB)@8sql*=A+(o2;YPN))CmQ?~&=b=Jy2?jVj^IZ05WTgXpdRVb;b}WX&?%rE z=+u8$#UifnI_i;yUT82z9;;o-D$)80+(?-o0XIIETo=+dUV@^NB0Ti z>x3I%r&3Qe9u0zQB105#G8^xkPILm)U(mDAWECuM^e6KZJNC@!sAHCA^RikY${0;(zejk6hoRVTVy(eXHzMGBvUMnPi0%2**aBh{qr4 zSY^M>Q8A*m)?1}US|4+FG3G*&U?g&y`7L13X~b5KbWAdKOeI@e!ee?Qc9>x@&b8kE z<3#@>eaA@7BJZjrKO1eD7Z#AF#<39LONvK266w8>URM&|B{VK4&123c9^M*`)Pd}m z*{@{$irAESd=Y*YN_7qEKhjZ2tBUj(k;}v78Hvx)TYHE;v_6v20&5tnV5g8)Mw9nM z{zj1@1?0#%gJAooe5S<9G7 z)5JM!Sf^NQ=hmbV1~N?4i>bv!f5tUIs*&HN(Tq~f;ZDLDO%c6->>n9v8d0vHzclhS zcbfZTiInN?vYbtG-uOI0+ifb?|Q7J0cDa zjf;xB!)|JW!^E{RmLBe0F8gS{Lyp`(M&_DW?a0#bCw15QT+>npBjUPV=ID5CC-Z|K z#Xobz94RQZjF|G7Kqk*oEo@X=Jf)Rk=0K#iuyk?V(UN&3*`~1`io?7X(}`0+q+Nhq*>M|m7>PmdnkCT5T($l=(zzM;B~$V0gw%N zRgf159`6>SV4c-mu&QPh`I0c+9ONa1zMK5stUxrNimO-XLCjuZ97nrX)6g|4Ekpnr zL9i$-8le^Q*kV$_I(AGdSoJqkiAzGQtESE5T9>Jr+&Jnj%Be=h8icvQkfN3%0hJes z7fUD<#weu%K1$SKb7brRD?AV-N@GsG?5Dg!vRq|c!{31whfS+V;#6LM7g$hKql)$Y z{$!)&{mHok<**6Jt_x{~#oOkdNJ24fu^n|arY(ZKq<|s)rfo>UDE}|D-Jbd$Q`-nj zW^K0pi0eCD9viW?0rj66fYTU58qsDFIH z8(WL-+V;l8B7MzBbEomP5{h&^*`JdQaLezB0wfV-v|wM-C?|-Caqo?MY6_w zZYa%1XJHD5Gd4)nlEgr9P7gheA{$zg!0SjTEnD)81|}z6Ich$yR@S-#ikE&wu2Ag| zJFY0SiI37i8IQ_qp-8E(Fffh-PFmt26yg)Bpuf+(u;FC8wPE^0 zBN`ff$3OdKG}v4dfu>^^AzGr20c|lGOeC8hws{OmTY?EMBy}kIWBN?z?pby1Fox!^ zY!jF87?9H!2NYwc83kL-Bx7GCP4zO1%mrhPAZCM!69R~nzjzlplFe-z=1_5!v|;J_ zM>$0F5p3kxVuuK;z|0bLI0U^+07U@*N8`tYtCl_d%nkbrA6(h>?B$ss?vT=iR4`$o zV2XLN=K*_g)g99|Wxc-b^D$4&j|Mw}_#u_a`NjFwCZj}uJ9n=CLzgw%O8)fMdw+Q6 z^aIC7gZ($hk6*~K&JgmKrf?XJbt{E(MUeR)b*zNVA*EsRH${);-v5Ux|0@TiG$9ok zfbbBd>e9O(+#cLocEQ|{Z=QDFm4lNBv-q3=c8H-lEYrj|EQVqN7JDf_p&j##^n`E4rwk3y4@2DAs5-x9 zr#&xy-eJkf^kWjYqEiZ^)X|2TBn-l_YYO($BCvfSv&f(Lk2JArau|;=;AR=LpQ)@R zfi?-n%%~$#z)b=YRhgN$qhs2pNellh_;>=Kgc~r;;EEOvkZsfkf=B0p28;&3fkDB; zEbIZLgntFYAKjv96V2YEhYwHgqzqTA{2oN94k^_>y_U>QQ)=j^8T?)aC$uLcZ5NiV zD16`3fD$B<{2s+0^eVI^pzb1l(e8S|I$^e&%P;KKxRt?gkNgU$xSqDN<19hexPtaz z!wK!@$9Fa5Obvb4@Ld_*?hqlUx)MN_jBD)Tt_r_gqPg2n0qN4%YVvvL2W;&^iv|lYBY}2Ue-j(;ku9C`W1cJ8Dt7!GAJE&ss zN-~Sn#F()|FYaOa$jmz+n$StUoTKqGDsjI;#zFkCF)QTH+l?*i6rv(_4h?YCjiy&a zje?bm@?bUnOewNm@MsvjK{>sa%@>##lBxf~CjN_>ci6O(%{KkZ+w(7C%gMi(5g&a6 z=JtrVA4h!dMUlT*d{&)^qA;x>1t`BegcuP(ED^yL51Q<917muqq>y{nQ7{7@`E0GP zfnRN0;^X@a;}Y_1BN*{~L*vl_fh7ENO7YN!$1d7hnnxOXm=&ZWpQ1WAWjxXHYaU-c z*f{+@4`)*Aq8)Yp_Sz74Tcy|ta9-M8n!*SsL=mD#`Dkh%)j->Wj>z780?D3qPx9eQwAHthnT^ z<;Hvxp01`)yXsMtlJHi-N+r?;?8O^1QRZ`xywbEov!Wa-t2C^u?bFM463fpij$}ES zw#h+W)g~G6v=XU0N*a9*`A-N=Cy#4oL}HEV$Yqxv-2O7le#<8fg07PIW;@vB>|%M256`f00C&J?v= zV}U++!J@m^Yrrl*@=-Dd#S0dwr;Fnjjkr6PYHsoD7Y{cVh$}H=qe#n=l(@Haq6R#C zN0Er~k=PUtr7ut$B2KDBJyz86qL0M6d@jzZOC$-rUmzj-jami>sJuXSttu+E2?)8G zHbyRQMn~Sys-{btA1+wj`@E+J_l%2~kz%9RvKK|PY{&mk-uj%&bk8hP-yjSuEW=!LO7GY#4&HG?!5(r>P241u8 z-nX+Ks11=6MJ~kP*xUv5zYIVsEkx0dfUqAF9HYnqOJu&5heiv1ARROHn3UTSVqBCZ OBD}>+c`NGetFirstPlayerController() : PlayerController; + if (PlayerController) + { + FInputModeGameAndUI InputModeData; + InputModeData.SetWidgetToFocus(TakeWidget()); + PlayerController->SetInputMode(InputModeData); + PlayerController->SetShowMouseCursor(true); + } + } + + if (ReturnButton) + { + ReturnButton->OnClicked.AddDynamic(this, &UReturnToMainMenu::ReturnButtonClicked); + } + + if (const UGameInstance* GameInstance = GetGameInstance()) + { + MultiplayerSessionsSubsystem = GameInstance->GetSubsystem(); + if (MultiplayerSessionsSubsystem) + { + MultiplayerSessionsSubsystem->MultiplayerOnDestroySessionComplete.AddDynamic(this, &UReturnToMainMenu::OnDestroySessionComplete); + } + } +} + +bool UReturnToMainMenu::Initialize() +{ + if (!Super::Initialize()) + { + return false; + } + + return true; +} + +void UReturnToMainMenu::MenuTearDown() +{ + RemoveFromParent(); + + if (const UWorld* World = GetWorld()) + { + PlayerController = PlayerController == nullptr ? World->GetFirstPlayerController() : PlayerController; + if (PlayerController) + { + const FInputModeGameOnly InputModeData; + PlayerController->SetInputMode(InputModeData); + PlayerController->SetShowMouseCursor(false); + } + } +} + +void UReturnToMainMenu::ReturnButtonClicked() +{ + if (MultiplayerSessionsSubsystem) + { + ReturnButton->SetIsEnabled(false); + MultiplayerSessionsSubsystem->DestroySession(); + } +} + +void UReturnToMainMenu::OnDestroySessionComplete(bool bWasSuccessful) +{ + if (!bWasSuccessful) + { + ReturnButton->SetIsEnabled(true); + return; + } + if (const UWorld* World = GetWorld()) + { + if (AGameModeBase* GameMode = World->GetAuthGameMode()) + { + GameMode->ReturnToMainMenuHost(); + } + else + { + PlayerController = PlayerController == nullptr ? World->GetFirstPlayerController() : PlayerController; + if (PlayerController) + { + PlayerController->ClientReturnToMainMenuWithTextReason(FText()); + } + } + } +} \ No newline at end of file diff --git a/Source/Blaster/HUD/ReturnToMainMenu.h b/Source/Blaster/HUD/ReturnToMainMenu.h new file mode 100644 index 0000000..d1601c1 --- /dev/null +++ b/Source/Blaster/HUD/ReturnToMainMenu.h @@ -0,0 +1,38 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "ReturnToMainMenu.generated.h" + +/** + * + */ +UCLASS() +class BLASTER_API UReturnToMainMenu : public UUserWidget +{ + GENERATED_BODY() + +public: + void MenuSetup(); + void MenuTearDown(); + +protected: + virtual bool Initialize() override; + UFUNCTION() + void OnDestroySessionComplete(bool bWasSuccessful); +private: + + UPROPERTY(meta = (BindWidget)) + class UButton* ReturnButton; + + UFUNCTION() + void ReturnButtonClicked(); + + UPROPERTY() + class UMultiplayerSessionsSubsystem* MultiplayerSessionsSubsystem; + + UPROPERTY() + class APlayerController* PlayerController; +};