From cc5a0b3c4e0a3c59a15fab35c601dd8bd2909ede Mon Sep 17 00:00:00 2001 From: Oleg Petruny Date: Fri, 16 Aug 2024 12:52:53 +0200 Subject: [PATCH] runtime load final --- Config/DefaultEngine.ini | 2 +- .../BP_Test_RuntimeLoad.uasset | Bin 59337 -> 60103 bytes Content/Levels/Test/L_Test.umap | Bin 1955180 -> 1955180 bytes .../ImportTest/BP_ImportTest_Barrel.uasset | Bin 0 -> 31005 bytes Source/Lost_Edge/Private/ContentLoader.cpp | 239 ++++++------------ Source/Lost_Edge/Private/ContentLoader.h | 24 +- 6 files changed, 80 insertions(+), 185 deletions(-) create mode 100644 Content/Misc/ImportTest/BP_ImportTest_Barrel.uasset diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 91d8297..985f930 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -1,7 +1,7 @@ [/Script/EngineSettings.GameMapsSettings] -GameDefaultMap=/Engine/Maps/Templates/OpenWorld +GameDefaultMap=/Game/Levels/Test/L_Test.L_Test EditorStartupMap=/Game/Levels/Test/L_Test.L_Test bUseSplitscreen=False GlobalDefaultGameMode=/Game/Blueprints/GameModes/BP_MainGameMode.BP_MainGameMode_C diff --git a/Content/Levels/Test/Actors/RuntimeLoadTest/BP_Test_RuntimeLoad.uasset b/Content/Levels/Test/Actors/RuntimeLoadTest/BP_Test_RuntimeLoad.uasset index 40e68d70f78698022f20e0150b5ee2ec6e1288b3..2c3693ecf8959a0c3b0c6c6b4d708036893d4eff 100644 GIT binary patch delta 16386 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 OA;;m+tH89E%>Mxtfg%+E delta 15281 zcmdsecUTn36X*1%EGozTeGn^udIba6Pcq*QXyz1GRm3;U8-uM1_gR|9LRb5qGRbAaXvsPVK{Nu9X zUN)()JqyJuIQ1il9z;Ds5b+8G0sn~gXfDa0^j4oBMnkV|AVE})A_x-NmrM!bI^2%7 z1R*W^Nm%^A&2i_^O15_6o*T7cm9OkGXSyzqbLgRB?{XIN>%fgAD}e?@!fjPw)Iz%I z?|{+2J_mHGs|Bv@Sp=~Ma2uYNMJTN4fd=;)!Q(>TDL69HB`G>I$TKD>I?*9IY=U@} zBq328?-M*HXo5H~DL&diI5J60q+PtpD;w7$|s)<{{v~*Htj;sjNvPqpt(?l+U&4U6%Je1{skuj%qn> zqa0Tw$6*=Q6Z~72D z=_95`Lk!C3HZ$%L#O5T8OQsGqu*N?_( zj8#l!o}WvRYk+*79?=^hQ;r22DYDaWzSg!@WF`d_Hc{lV;o}s_WK9D@zLqb|iCy2j zr>yf%Mn*tpiaRE#%BaNW0!omg5nl`MUD!%&##cO9xOx>*40K6t^pG<^>k1Gl+W{U?f)BVBRZ>hA zT)tK{bQ!WeZNZo-id+EXtF6eHm=CV`=VdC4`C2v5WkxT-6M;+hB1K*dWV{D62;7N`dJ1&Q0NH0)@hmpCzUbXu6Rrdr~&dLKr!+e=f9AV zoksGt@YczYnN{*ZMlPetOl%nP-6xcAhRnoM<2_VeadI$2d&u z4>!hRejHZZ#&}g^Wok*u$I|d9N&>1ZH$!_(dnx#;mK`>YQ;@zp!pTop2~FaEhMQRH zD>BpF#JzT{-YZWb=N|W3ZN0r}{z?uxxpZvyamjnaSHvO*vwZE9Y*YQXjZG0`ME*)5 zG^wyCx_m7$p(Ma>@k{Xrd!^wfEOI#OQdMn6Rc*SSM|3g3wLh%N zA);8#`O=L1?B1a8bd{T>UI39MI5HucU-0bV6~%~>m#iojalO&IICEj<_(PwsD849; z=0}e$C)WCXT$g{qWU%DT@V;qEZ(U#dGCy8NNk=K^ z`Kga-MY(_L)p?E`aNs5XM3LUD>x=I=KS>^BIjAA`)SA$zht@1mC>X1;`aq5J0e^Gg zw7v7D=>GZmrG4PtoO)@UM$kWB?3$`th#3p(ruQAyLcG(1_WF-$(x+d2ns?c3tgUpB zRt6e<)vx-tU|I9q7UD+nmOdxu{MtfPNTjoFd<**B7PwyDdpIFlP;r02#?3~n-w6i3 zIetSD{Ppsu37<2hPxTHgOVEhR8+>=rO{wZV_62uh$X~AScU&$Sua)fH@A0Q8Tk72# ztbSP&`Z4pB?@g{yC2e?|mZeS#D>uWsqP}>7l*F@f<0!ask1o|&N{r4<%?UiUYF4JB z!r862)~gi0|7WdP^X$KpYn&6bS9q7Zf75g$m)HfYtEeGea!*&j+j(c-l7oDgqubQ} ziMD&aw1rSf{q)nPq(r+(yN--FajR;dmdl~HgI^a)n=WzQnmlOIw|k@UO|V)t32*!*Go2a_S^2QSVXto~NlwoZD{Z`tzFFIA@X-vpPc z-EY}j_q*CcoN}7e{D*YtH~xt`A2(-79|$g1yGr*jKiuz{YW&3(LPPD7s?C=f*LFV* zkC}Pk{PkSv2Wf`DML%}Dj`^Hk-=?1Hb#zdvVL_bXg0#GkzAJZ%W^X?mxnjTOrj1Xt zQG+M{J->X})*bUywW~^pD=jsw3)<+Oa7brsv0vF{CBvGR6BK;i%d7WZQGgOc_}zF_ zV=Veoeo~q<EyPZ{ zfKvac7UKGrQma?oNYC*i&G3+#pe3O%y^7txZU6RDaddTLzvU9HWW?Xab5}y?I@{>I zO&jaJRB|<=^6S!pT3b zkJoO8dtKH_BA_g$Nv(G0ByiNMMlbz!XUcs=Q?vaHTL@pHFU5u1o;~XI**__8`-SR^ z=+G#BE*QCB?w^(Ep~(GE>XiqHHO4M>(%6F7Vqg3Ilv8wG4@%=5$(iXM({%ajuIqE8 z6$^e1uQ<(tS}WRsV$TtcY6a3na3ggtzcQ-uf+Z^;F)bb^Fl?wJQBlzy5#*0lNlg4OSgZ3>LD)@7ZL+Rd7|vv!NejPlQGz}x8t`CH0;sp1Wr z%WYe(a^=b59{ZZ#`WqK|%&+usY0xmD^Ty0?4el4uQ?aSf#!>9-o^(ihU1j^^ zp9v<1xrsq5~*+s_bi?@CF4pB_hpl( z`5GnINctSAK2{@%fMVrCKBDB0r{UE|ibda=El zX4oYAM;i?d4)2+4a_+Rs(?2)=c5{Wx(;dc#Hm$bjK8o@EXHe7DoI3Hx(uP(43^b9l zDvfgj8=LC_W6%0*IW1^fc`=E#q360Irg0r+AT#|}`3xpnYAj##`1R&R>r!f2ckj(p z3%HPyyf1WP&bzWPryJgWjQzCb;Uudd{~lT6jdJEB7Q{9c8YL@KSRZXj%mBkb7D%=e zQrMk~$%C*WeH6D9zhXtRhz9CFl=j%W*z!JgA|h;IUte)`lYJl0=(Xh;S2vxEmYj0c zJ0n>;>D;cmH%C>@T(EeKa(>LcHYurb!sO`|KX?dpzqSy(`21kbdw#yiwn1gYj)8yb z+uZs&Q_D&5%3}A45~qGwG6Q2TOYL&>R*YGC+cZ){8(TqjAe~WTt-Q8|evFJ%m-1`0-!tP4RdY_uyQelN#(fEmI z?WQ|Iw@SC;60ToqIPX0yXoIvGkCKD;_~!{uepdRhyS5Q`jYkLA+r@q;UNio8X<^Bp zd&P=#bA&l*ETa0|szHILa_&huyGpTv0<%_t|L_)+}N95P)!UUFwysVbyoy56DG z>O-kDoIIu55w|7peH4W`u~ypr@^cN6^ybsG2uj+xUPEA$^)50_EWzYn=Tk~*rWFyR z>Ka|@8a?vUb-i3*S8$XzH>5!!eqSIdsUFw6o(q~Kjc|1Q@THu9a%!f1Pr{v6I-Fo_ zug&!WV?IN0`oYHScjr}(m?~IMXM9LFO>My^s{Sk80*LtcC4PQIqtjL9B$oJrP9ZE` zB`7cNKAizNfe9m#y6bRs zJj{hOK|a0~$WrW2jzVk~Z!~_2kTgXnXPR)oo9IXx*xo$KIFMyV$@)jEMe?YYLx2`( z4zgU4%~X5Rg2L&-%;DM0Gs1JR|3-XpxI>4p(zgc}h}#DP;1VDgh-`q&9( zVC!7qhywSRp;xgyG;|tYc{W%R0eUSddG{vuMr6PsR5{HMJ($8GttqUDXK%D8L`aTC zj{Z_~c)B4n@zg@i{v2`)I1u?wb|h`(jHf3H$+0MXiZy9R;V#AZM%$+vllD|EEnqb1 zKp9*e;6pl6IM-=fC@u&K#cDWelfmFHFc_Op63+BE4pN)mpA;ecSws8r2os1W^GOme z6i>=@d(xF^J($iX$5C2L0>`3+U_+D{XivIPn8rX|(jCRlG3gabq~hE_3qrUkYOXfg z6EqBMonc0LQZkxm2uUw$glmv7stz?o>w_keK0q@;184p~`l8qfnEOmEq$oCoj4~tr zAkdRg4fJe+t;k8(HCuxnNqur-KP8WFXbw6YfRM$nrNqBWAJ4An*i_oJkRCW^u@1%GSU+z0u$Z z6{Im61V!kRp$Z$|^N6tbIB^G1^_DP=v@O=oR2uVn& zq(igqk#8hUhTf{P03Qp~B%sd0a{4Jj3;%h*s8oQFv<>~qD3E4JMq?jbpW{fzPy}8i zn~bFlNRAwZLSqb(s#kAR6X}QwpluTshBRUg(b*_tG7-IrT1qBSyt&Z7Zc z;Nk7qkor6$Bu(i*LI7)BM&&^rkf{+sHDGXO6J zLeUaNb>kOBE2vnV)2&c!hV=+5xs~7JW+k_hN7;h)SwRlGS!P5EvVIv3Vbevc7oI~= zOIb*5kxMthgAzMW07h7L6I?2RfX50I&l?VqN)Yt-JWhwawT8(+-r7Lkc5tnAhmi2) zp#|5{ZUbj65)81GPw;z4tzm)}R}Mr?OGlyCKMg~#mkLQs^yVi6+_GU3xivqQiI)Qt zrZ&k%>*En-u##K>$j$pM0%MsRVT52DlgYS^GZ_0Hw*@%jrnn^p3|8G%7UPuGvT&9R z$19X^uo52s|J=m`J99A)&*J}UCxdh059cw}GRLJ3XEN2ZXj6kRpZ)xywoK4khf=l_ zTjy41xr`;?)rHG*=Sv)_xDk4gIRwpF(*SkWKT{9t?x-aaz|Bx?BNDk~N!nt{PG*@a z4Ql-k2A;eUL^}0J5Gm+~Y+ct7x`zRNj!QlHUX2@YrN{vFNf8G@vzSKWNBsE0Pn=Uw zOt!Y>B&sia`2U@Nc@7<2&KYLC>;B3U|_!I2vL=>2anJ+i93XL##Xy zksEbU*amgwT?`eaZ7_qE&u{g$;d7y>f#yV-l1)PlRM46&TI3d_l`~d(F^w-lfjQdx z%jjMQGZ<(7gx2SHkU8i{4xh|M!B;gD;AaA(a&;VAkI=pX z*PUkURAuj>c~4M6^zheJNj->j$1&%ivDJiICvxAl#^%SFM z4HoFmW^0fTwq>TSoBk*OTeV#ooeZRi88izs3*4m) z`UX>*OB34!67Aip+sXT=dt2F>(`f$IlaLjFQTgifET@?M2fbHo1vnJ5ktITP|Fd9L#&lP^{wnj?e@${)Sr< z&jqe9X1sd4@hRwDA@{p!cno7T8;ewt^Z$)T7Mcu{cV+4afOB@j?ZHABMSML2nKlBi zp@G!)F|-xN8oe#n(AB*OI`ljx38ALrqhe#?6DNuj5=|YGB#~jJsDCjR%_;uDTLT+H z31}@6zjc&dIKji{HdbZ@<^Tw7g$n59gjWp3iPjZ64rNT&3Q)sH{Z_mbmp|Bx4D^o*XKDSpjR-|U95#%7ZLv;8Co>tH*m8{>Z;wH5YKEcY zT^#Zkl($Q${G)vQgI%&i!3ebAqySAR<&f~}2GH=GgLfWt41HpN*wyOj&5hyk8<8In zd-pJS6JwRae~nUb_YF3Ic+eN;h_XEwmd z9%%o*vC2zn`h-@JSDp2y=*#yHgGU;jQnf{?qMxr_AY{(x_#WQW?_VL_wxRZEJ zWkk@h%Xr2@7Rlq8b%fP*IFaaxx-F9*SS*aBF8uR=^RDMos+e?Vbv zyf0TYJKJ;Bh6m3N{kY^(XSl8xMN7mv8qtj2w}bBzaj^4rTa+cL+_aGfu*x>|db zbHa*}vfDP&ol_d&eC+M!;*SdpC@Jl6-7Z8*3NdW;vjYu1yw=}X(K9V$zYn&hJ?_6O z*50Hl;_cR;Kf7ME-zwcTu@05+=EHA(VD;qQlMs#uVdUw#5n#b0>$=BcV3_K4#di!Gg8-uY}NqZbs zeaSIs;UUgY>R0#d;OH6Vt+OKp^mtRheqbgNF5(S;8S0h ziT4mPOkP}R2^dg`mky0Cj~{4Ml{&0xyQ;2^9C(LlpB1tlqBpYN)B~CSKCFx52;>#i zjXi(ZpuT^M?QoRAS-1O-MW9>e1gxjMGh6F9cishfRWINJ10EZG0gt7(emMBd+^-8i ztLuSgTvX}$d)sL26u45*%8Rzs=y0H*_DHMwFA(XoF7nNwW=%gbqUib4?Y0T1kkJXDO~64<5J@t1}F(d#}}@ic?4cD)Adk#@~YH1yU$l@8@o<^vD%S12z7m09%cTBqil z8VyO|fPQ2iT0-G>*}8Vm7m za($g(at@)1G4X7t$l!zoC~M*3cyV;7Sk_mW7$IiIgv=I)CbB~*hLo5jc5-lZB0DjL z9U2pzkQkp73N!m&0A=fW;mtgfDxBkO%+aFj^}?%FoPn zrC`1iZMx4w)wft=Cf)-g96*a-Y;bZkdt!WWbV7Jce3Z)f79~89Az;%JDBeVvoox2W zl0-=O4NRzMh#yYSO&Nf1Q@5`m@*ZM~EM2SxB9R&2%EFrO;4I`>2`ntEtgU%GCrb+p zp#|FZU<}(zC~|UevUcG+o12-L3;2!>0t=C&mANI~(aFM*$IrSuKv}L64SmRbb((&+ z2z|H@FK?Z#%q^^i0=|VnXlZS3?d)W2Ep%{n6q)m^EY11OloDs5gUHNDAmUqES()=3 zo%s%C&gRaJjsk&`i-VPe6H>q5T8r6zMoZ-V735m<@qQND#gZ>D6AAfzC!QtG(cIkJ z%!+4b4wG?mwlcFY7h*lOjxH{aPS!jTpYI|PS_&P^g*aSx{qRB+-eZ*yF?5Nzq~Aa7nZ{ zY$Q7=0mcVYi7w0I1aV>_s7!!E!eCi!<%hxhGV76ToeHcqc_<&Chh<`OTo`y6}=?$P0ny4jG}%1K>ck@cGDz!8E1A1}UTo zZB)uN&_oQVO$|S*=F!L$IM{cu7{9ey@yNp$i}^1-2>V0GQfHSw~Chz5~ diff --git a/Content/Levels/Test/L_Test.umap b/Content/Levels/Test/L_Test.umap index c1291f918fceb3d799c05f8341a2613538663a9f..7709d9ebc9a1521e6217d023b7e0d45490d3708f 100644 GIT binary patch delta 481 zcmaE}s{GBW@(o-}0+O?rd#39xahc_?(@({-m}{~WlL9Lf!=-C1≫~_Dqc1?U|U8 z)^Hn|=^7g78C&X^n6|H3$FzOTI%ZK@c_$}VVI}mdKF((jn0Wmia^K5_cn%5~?^C}YqLkBYhLnZ?Q!!;ng z6Ua^ivZI0QDj==~;(j2`*zO(9cUxHCO;*6{GACyD)nX?tdgko;G5zCAX3^~nviaJW zrZ*JwHEw^G&sV@W{a*>64u}~oB=AgQ;~I@pS1*OcEti;BqVR`Kqq#FPxlyKslF3 z{?&wT2X@iQ?-kCe(>G2NG!ge!)9V%5d-do;G{u({E{_kWdCIwbz2Cp8zW_zY~dnU&1_DoDk zYq$+8bPdh*Obzu64cgbNW7@uE9kZydyotG~qmz-biHVD)p{cW}xrwWZshgvvi?frH ztEr1+`-9iaK+FQftU$~L#Oy%K0mPg@%mu{UK+LoK!E0WpY@rMW28L)R28Jpit_I?M zrs)ddd{W!}!uf6p3uO2Dq)p)|b7`v5`gP7+QF;2unarZw7i9CbF->nMA*7yY@uJ)nG3uf`%-p}NaFn!`Qev9cFGz5gE zpG)R%pI#Toe|EaSX914(&(ZuqEU^7^wBT|paf@}&I1Xf_A81UF3*@uTKJaW+O=p1Cu{dJX{n3V#(m*V;U39u^xE%m6+Od5A diff --git a/Content/Misc/ImportTest/BP_ImportTest_Barrel.uasset b/Content/Misc/ImportTest/BP_ImportTest_Barrel.uasset new file mode 100644 index 0000000000000000000000000000000000000000..a1b053d2c53d6607d89cf02eeb52df7f6eeb43a2 GIT binary patch literal 31005 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 literal 0 HcmV?d00001 diff --git a/Source/Lost_Edge/Private/ContentLoader.cpp b/Source/Lost_Edge/Private/ContentLoader.cpp index 67f72f3..0a39ebc 100644 --- a/Source/Lost_Edge/Private/ContentLoader.cpp +++ b/Source/Lost_Edge/Private/ContentLoader.cpp @@ -5,210 +5,117 @@ #include "IPlatformFilePak.h" -#include "UObject/Class.h" -#include "UObject/UObjectIterator.h" - -namespace +void UContentLoader::BeginDestroy() { - constexpr auto mountPath = TEXT("/Game/LoadedContent"); + //if(mountedFiles.Num() > 0) + //{ + // while(mountedFiles.Num() > 0) + // UnmountPak(*mountedFiles.begin()); + // + // FPlatformFileManager::Get().RemovePlatformFile(GetPakPlatformFile()); + //} + + UObject::BeginDestroy(); } -UClass* UContentLoader::MountAndRegisterPak(FString pakFilePath) +UClass* UContentLoader::LoadPak(const FString& pakFilePath) { - if(pakFilePath.IsEmpty()) + UE_LOG(LogTemp, Log, TEXT("ContentLoader: Starting to mount pak %s"), *pakFilePath); + + FPakPlatformFile* pakFileMgr = (FPakPlatformFile*)(FPlatformFileManager::Get().FindPlatformFile(TEXT("PakFile"))); + if(!pakFileMgr) + { + UE_LOG(LogTemp, Warning, TEXT("ContentLoader: Unable to get PakPlatformFile.")); return nullptr; + } - pakFilePath = FPaths::ProjectContentDir() / pakFilePath; - - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, FString::Printf(TEXT("ContentLoader: Starting to mount pak: %s"), *pakFilePath)); - UE_LOG(LogTemp, Log, TEXT("ContentLoader: Starting to mount pak: %s"), *pakFilePath); - - if(!MountPak(*pakFilePath)) + if(!pakFileMgr->Mount(*pakFilePath, 0)) + { + UE_LOG(LogTemp, Warning, TEXT("ContentLoader: Unable to mount pak %s."), *pakFilePath); return nullptr; + } + + UE_LOG(LogTemp, Warning, TEXT("ContentLoader: Pak %s mounted successfully."), *pakFilePath); TArray content; - FString mountPoint = GetPakMountContentPath(pakFilePath, content); - RegisterMountPoint(mountPath, mountPoint); - - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, FString::Printf(TEXT("ContentLoader: Pak '%s' contains %d items"), *FPaths::GetCleanFilename(pakFilePath), content.Num())); - UE_LOG(LogTemp, Log, TEXT("ContentLoader: Pak '%s' contains %d items"), *FPaths::GetCleanFilename(pakFilePath), content.Num()); + const FString mountPoint = GetPakMountContent(pakFilePath, &content); + UE_LOG(LogTemp, Log, TEXT("ContentLoader: Pak '%s' contains %d items."), *FPaths::GetCleanFilename(pakFilePath), content.Num()); + FPackageName::RegisterMountPoint("/Game/", mountPoint); for(auto& i : content) { if(FPaths::GetCleanFilename(i).StartsWith(TEXT("BP_"))) { - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, FString::Printf(TEXT("ContentLoader: Found BP class: '%s'"), *i)); - UE_LOG(LogTemp, Log, TEXT("ContentLoader: Found BP class: '%s'"), *i); - return LoadPakObjClassReference(i); + UE_LOG(LogTemp, Log, TEXT("ContentLoader: Found BP class '%s' of pak %s."), *i, *pakFilePath); + return GetPakClass(i); } } return nullptr; } -void UContentLoader::BeginDestroy() +FString UContentLoader::GetPakMountContent(const FString& pakFilePath, TArray* content) { - if(mountedFiles.Num() > 0) - { - while(mountedFiles.Num() > 0) - UnmountPak(*mountedFiles.begin()); + TArray contentProxy; + if(!content) + content = &contentProxy; - FPlatformFileManager::Get().RemovePlatformFile(GetPakPlatformFile()); - } - - UObject::BeginDestroy(); -} - -FPakPlatformFile* UContentLoader::GetPakPlatformFile() -{ - FPakPlatformFile* pakPlatformFile = nullptr; - - IPlatformFile& platformFile = FPlatformFileManager::Get().GetPlatformFile(); - if(!platformFile.GetLowerLevel()) - { - pakPlatformFile = new FPakPlatformFile(); - pakPlatformFile->Initialize(&platformFile, TEXT("")); - FPlatformFileManager::Get().SetPlatformFile(*pakPlatformFile); - } - else - { - pakPlatformFile = (FPakPlatformFile*)(FPlatformFileManager::Get().FindPlatformFile(TEXT("PakFile"))); - } - - if(!pakPlatformFile) - { - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("ContentLoader: PakFileManager not found")); - UE_LOG(LogTemp, Log, TEXT("ContentLoader: PakFileManager not found")); - } - - return pakPlatformFile; -} - -bool UContentLoader::MountPak(const FString& path) -{ - FPakPlatformFile* pakFileMgr = GetPakPlatformFile(); - - if(!pakFileMgr) - return false; - - FString mountPoint = FString::Printf(TEXT("%s/%s"), mountPath, *FPaths::GetBaseFilename(*path)); - bool mounted = pakFileMgr->Mount(*path, 0, *mountPoint); - if(!mounted) - { - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::Printf(TEXT("ContentLoader: Pak %s mount failed"), *FPaths::GetCleanFilename(path))); - UE_LOG(LogTemp, Log, TEXT("ContentLoader: Pak %s mount failed"), *FPaths::GetCleanFilename(path)); - return false; - } - else - { - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, FString::Printf(TEXT("ContentLoader: Pak %s mounted at %s"), *FPaths::GetCleanFilename(path), *mountPoint)); - UE_LOG(LogTemp, Log, TEXT("ContentLoader: Pak %s mounted at %s"), *FPaths::GetCleanFilename(path), *mountPoint); - - mountedLock.Lock(); - mountedFiles.Add(path); - mountedLock.Unlock(); - } - - return true; -} -bool UContentLoader::UnmountPak(const FString& path) -{ - FPakPlatformFile* pakFileMgr = GetPakPlatformFile(); - - if(!pakFileMgr) - return false; - - bool unmounted = pakFileMgr->Unmount(*path); - if(!unmounted) - { - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::Printf(TEXT("ContentLoader: Pak %s unmount failed"), *FPaths::GetCleanFilename(path))); - UE_LOG(LogTemp, Log, TEXT("ContentLoader: Pak %s unmount failed"), *FPaths::GetCleanFilename(path)); - return false; - } - else - { - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, FString::Printf(TEXT("ContentLoader: Pak %s unmounted successfully"), *FPaths::GetCleanFilename(path))); - UE_LOG(LogTemp, Log, TEXT("ContentLoader: Pak %s unmounted successfully"), *FPaths::GetCleanFilename(path)); - - mountedLock.Lock(); - mountedFiles.Remove(path); - mountedLock.Unlock(); - } - - return true; -} - -void UContentLoader::RegisterMountPoint(const FString& rootPath, const FString& contentPath) -{ - FPackageName::RegisterMountPoint(rootPath, contentPath); -} -void UContentLoader::UnRegisterMountPoint(const FString& rootPath, const FString& contentPath) -{ - FPackageName::UnRegisterMountPoint(rootPath, contentPath); -} - -FString UContentLoader::GetPakMountPoint(const FString& pakFilePath) -{ + FString mountPoint, contentPath, contentPathTail; TRefCountPtr pakFile = new FPakFile(FPlatformFileManager::Get().FindPlatformFile(TEXT("PakFile")), *pakFilePath, false); - + auto pak = pakFile.GetReference(); if(pakFile.GetReference()->IsValid()) { - return pakFile.GetReference()->GetMountPoint(); + mountPoint = pakFile.GetReference()->GetMountPoint(); + mountPoint.Split("/Content/", &contentPath, &contentPathTail); + + for(FPakFile::FFilenameIterator It(*pakFile.GetReference(), false); It; ++It) + if(FPaths::GetExtension(It.Filename()) == TEXT("uasset")) + content->Add(FString::Printf(TEXT("%s%s"), *contentPathTail, *It.Filename())); } - return {}; -} - -TArray UContentLoader::GetPakContent(const FString& pakFilePath, const FString& appendPath) -{ - TRefCountPtr pakFile = new FPakFile(FPlatformFileManager::Get().FindPlatformFile(TEXT("PakFile")), *pakFilePath, false); - TArray pakContent; - - if(pakFile.GetReference()->IsValid()) + if(!contentPath.IsEmpty()) { - for(FPakFile::FFilenameIterator it{ *pakFile, false }; it; ++it) - { - if(FPaths::GetExtension(it.Filename()) == TEXT("uasset")) - { - pakContent.Add(FString::Printf(TEXT("%s%s"), *appendPath, *it.Filename())); - } - } - } - return pakContent; -} - -FString UContentLoader::GetPakMountContentPath(const FString& pakFilePath, TArray& content) -{ - FString contentPath, appendPath; - FString mountPoint = GetPakMountPoint(pakFilePath); - - if(mountPoint.Split("/Content/", &contentPath, &appendPath)) - { - content = GetPakContent(pakFilePath, appendPath); return FString::Printf(TEXT("%s/Content/"), *contentPath); } - else + else if(content->Num()) { - content = GetPakContent(pakFilePath, appendPath); - if(content.Num() > 0) + const FString fullPath = FString::Printf(TEXT("%s%s"), *mountPoint, *((*content)[0])); + if(fullPath.Split("/Content/", &contentPath, &contentPathTail)) { - mountPoint = FString::Printf(TEXT("%s%s"), *mountPoint, *content[0]); - if(mountPoint.Split("/Content/", &contentPath, &appendPath)) - { - return FString::Printf(TEXT("%s/Content/"), *contentPath); - } + return FString::Printf(TEXT("%s/Content/"), *contentPath); } } - return {}; + return FString(""); } -UClass* UContentLoader::LoadPakObjClassReference(const FString& pakContentPath) +UClass* UContentLoader::GetPakClass(const FString& pakContentPath) { - FString assetName = FString::Printf(TEXT("%s/%s.%s_C"), mountPath, *FPaths::GetBaseFilename(pakContentPath, false), *FPaths::GetBaseFilename(pakContentPath, true)); + const FString assetName = FString::Printf(TEXT("/Game/%s.%s"), *FPaths::GetBaseFilename(pakContentPath, false), *FPaths::GetBaseFilename(pakContentPath, true)); + const FString className = assetName + TEXT(".") + FPackageName::GetShortName(assetName) + TEXT("_C"); + auto result = StaticLoadClass(UObject::StaticClass(), nullptr, *className); + if(!result) + UE_LOG(LogTemp, Warning, TEXT("ContentLoader: Unable to load pak class: %s."), *className); + return result; +} - GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, FString::Printf(TEXT("ContentLoader: Loading '%s' class"), *assetName)); - UE_LOG(LogTemp, Log, TEXT("ContentLoader: Loading '%s' class"), *assetName); +bool UContentLoader::UnloadPak(const FString& pakFilePath) +{ + FPakPlatformFile* pakFileMgr = (FPakPlatformFile*)(FPlatformFileManager::Get().FindPlatformFile(TEXT("PakFile"))); + if(!pakFileMgr) + { + UE_LOG(LogTemp, Warning, TEXT("Unable to get PakPlatformFile for pak file (Unmount): %s"), *pakFilePath); + return false; + } - return nullptr;//StaticLoadClass(UObject::StaticClass(), nullptr, *assetName); + if(!pakFileMgr->Unmount(*pakFilePath)) + { + UE_LOG(LogTemp, Warning, TEXT("Unable to unmount pak: %s"), *pakFilePath); + return false; + } + + const FString mountPoint = GetPakMountContent(pakFilePath); + FPackageName::UnRegisterMountPoint("/Game/", mountPoint); + + return true; } \ No newline at end of file diff --git a/Source/Lost_Edge/Private/ContentLoader.h b/Source/Lost_Edge/Private/ContentLoader.h index 8448aca..b169842 100644 --- a/Source/Lost_Edge/Private/ContentLoader.h +++ b/Source/Lost_Edge/Private/ContentLoader.h @@ -13,27 +13,15 @@ class UContentLoader : public UObject public: UFUNCTION(BlueprintCallable, Category = "ContentLoader") - UClass* MountAndRegisterPak(FString pakFilePath); - - + UClass* LoadPak(const FString& pakFilePath); protected: virtual void BeginDestroy() override; - class FPakPlatformFile* GetPakPlatformFile(); + UFUNCTION(BlueprintCallable, Category = "ContentLoader") + bool UnloadPak(const FString& pakFilePath); - bool MountPak(const FString& path); - bool UnmountPak(const FString& path); - - void RegisterMountPoint(const FString& rootPath, const FString& contentPath); - void UnRegisterMountPoint(const FString& rootPath, const FString& contentPath); - - FString GetPakMountPoint(const FString& pakFilePath); - TArray GetPakContent(const FString& pakFilePath, const FString& appendPath); - FString GetPakMountContentPath(const FString& pakFilePath, TArray& content); - - UClass* LoadPakObjClassReference(const FString& pakContentPath); - - TSet mountedFiles; - FCriticalSection mountedLock; +protected: + FString GetPakMountContent(const FString& pakFilePath, TArray* content = nullptr); + UClass* GetPakClass(const FString& pakContentPath); };