From 239425c47d1cb420365031ed62aa9f852671e482 Mon Sep 17 00:00:00 2001 From: wyatt Date: Tue, 28 Oct 2025 23:51:17 +0800 Subject: [PATCH] =?UTF-8?q?UI=E6=A1=86=E6=9E=B6=E8=B0=83=E6=95=B4=EF=BC=8C?= =?UTF-8?q?=E4=B8=BB=E7=95=8C=E9=9D=A2=E9=87=8D=E5=81=9A=20#16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 初步调整 --- Config/DefaultEngine.ini | 2 +- .../GameMode/BP_BusyLevelGameMode.uasset | Bin 22080 -> 22271 bytes Content/UI/BP_BusyRootWidget.uasset | Bin 0 -> 23839 bytes Content/UI/Level/BP_BusyLevelHud.uasset | Bin 0 -> 27664 bytes .../UI/Level/StateBar/WBP_HealthBar.uasset | Bin 0 -> 38034 bytes Content/UI/Level/StateBar/WBP_RoleHead.uasset | Bin 0 -> 26314 bytes .../UI/Level/StateBar/WBP_SatietyBar.uasset | Bin 0 -> 28210 bytes Content/UI/Level/StateBar/WBP_StateBar.uasset | Bin 0 -> 29253 bytes .../BP_RoleStateController.uasset | Bin 0 -> 6931 bytes Content/UI/Level/WBP_MainPanel.uasset | Bin 0 -> 29352 bytes Content/UI/Level/bar.uasset | Bin 0 -> 21032 bytes Content/UI/Level/bar2.uasset | Bin 0 -> 22504 bytes Script/BusyRabbit-CSharp.code-workspace | 2 +- .../Ability/Role/Fox/FoxUltimate.cs | 3 - .../Level/GameSettings/BusyLevelHud.cs | 29 ++++++ .../Level/Role/BusyFoxRole.cs | 3 - .../Controllers/BusyRoleStateController.cs | 76 ++++++++++++++++ .../UI/Level/StateBar/BusyHealthBar.cs | 71 +++++++++++++++ .../UI/Level/StateBar/BusySatietyBar.cs | 36 ++++++++ .../UI/Level/StateBar/BusyStateBar.cs | 55 ++++++++++++ .../BlueprintLibrary/BusyAscLibrary.cpp | 10 +++ .../BlueprintLibrary/UIFunctionLibrary.cpp | 19 ++++ .../Components/BusyAbilitySystemComponent.cpp | 15 ++++ .../Private/UIFramework/MinimalWidget.cpp | 6 ++ .../Private/UIFramework/RootWidget.cpp | 22 +++++ .../Private/UIFramework/UIController.cpp | 21 +++++ .../Private/UIFramework/UIFrameworkHud.cpp | 83 ++++++++++++++++++ .../Private/UIFramework/UIManager.cpp | 60 +++++++++++++ .../Private/UIFramework/WidgetPanel.cpp | 1 + .../Public/BlueprintLibrary/BusyAscLibrary.h | 5 ++ .../BlueprintLibrary/UIFunctionLibrary.h | 15 ++++ Source/BusyRabbit/Public/Core/PW_UserWidget.h | 2 +- .../Public/Level/Actor/BusyPawnBase.h | 17 ++-- .../Components/BusyAbilitySystemComponent.h | 4 + .../Public/UIFramework/MinimalWidget.h | 17 ++++ .../Public/UIFramework/RootWidget.h | 24 +++++ .../Public/UIFramework/UIController.h | 30 +++++++ .../Public/UIFramework/UIFrameworkHud.h | 55 ++++++++++++ .../BusyRabbit/Public/UIFramework/UIManager.h | 34 +++++++ .../Public/UIFramework/WidgetPanel.h | 13 +++ 40 files changed, 713 insertions(+), 17 deletions(-) create mode 100644 Content/UI/BP_BusyRootWidget.uasset create mode 100644 Content/UI/Level/BP_BusyLevelHud.uasset create mode 100644 Content/UI/Level/StateBar/WBP_HealthBar.uasset create mode 100644 Content/UI/Level/StateBar/WBP_RoleHead.uasset create mode 100644 Content/UI/Level/StateBar/WBP_SatietyBar.uasset create mode 100644 Content/UI/Level/StateBar/WBP_StateBar.uasset create mode 100644 Content/UI/Level/UIControllers/BP_RoleStateController.uasset create mode 100644 Content/UI/Level/WBP_MainPanel.uasset create mode 100644 Content/UI/Level/bar.uasset create mode 100644 Content/UI/Level/bar2.uasset create mode 100644 Script/ManagedBusyRabbit/Level/GameSettings/BusyLevelHud.cs create mode 100644 Script/ManagedBusyRabbit/UI/Level/Controllers/BusyRoleStateController.cs create mode 100644 Script/ManagedBusyRabbit/UI/Level/StateBar/BusyHealthBar.cs create mode 100644 Script/ManagedBusyRabbit/UI/Level/StateBar/BusySatietyBar.cs create mode 100644 Script/ManagedBusyRabbit/UI/Level/StateBar/BusyStateBar.cs create mode 100644 Source/BusyRabbit/Private/BlueprintLibrary/UIFunctionLibrary.cpp create mode 100644 Source/BusyRabbit/Private/UIFramework/MinimalWidget.cpp create mode 100644 Source/BusyRabbit/Private/UIFramework/RootWidget.cpp create mode 100644 Source/BusyRabbit/Private/UIFramework/UIController.cpp create mode 100644 Source/BusyRabbit/Private/UIFramework/UIFrameworkHud.cpp create mode 100644 Source/BusyRabbit/Private/UIFramework/UIManager.cpp create mode 100644 Source/BusyRabbit/Private/UIFramework/WidgetPanel.cpp create mode 100644 Source/BusyRabbit/Public/BlueprintLibrary/UIFunctionLibrary.h create mode 100644 Source/BusyRabbit/Public/UIFramework/MinimalWidget.h create mode 100644 Source/BusyRabbit/Public/UIFramework/RootWidget.h create mode 100644 Source/BusyRabbit/Public/UIFramework/UIController.h create mode 100644 Source/BusyRabbit/Public/UIFramework/UIFrameworkHud.h create mode 100644 Source/BusyRabbit/Public/UIFramework/UIManager.h create mode 100644 Source/BusyRabbit/Public/UIFramework/WidgetPanel.h diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index a6c9c09..05b4eca 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -16,7 +16,7 @@ ManualIPAddress= GlobalDefaultGameMode=/Game/Blueprint/Bp_BusyGameMode.Bp_BusyGameMode_C GameInstanceClass=/Script/BusyRabbit.BusyGameInstance EditorStartupMap=/Game/Level/HomeLand.HomeLand -GameDefaultMap=/Game/Level/HomeLand.HomeLand +GameDefaultMap=/Game/Level/FalconPlain.FalconPlain [/Script/Engine.RendererSettings] r.Mobile.AntiAliasing=0 diff --git a/Content/Blueprint/Level/GameMode/BP_BusyLevelGameMode.uasset b/Content/Blueprint/Level/GameMode/BP_BusyLevelGameMode.uasset index a4a4b840d9a501b5766ebc7b0d0f2432873f064f..47845b24a0302f6efdd720dc35d7d7c735a8afb4 100644 GIT binary patch delta 3003 zcmb`JYfM~46vt;45SNFryt>OSO9@B;5h$e(pp|yF>?}Pz#n?Kq|JS+7=&; zi7{I6^rNX5qec-MLTZiGq<*M2_Ct*yNsKhHRBXkzQmye(&zUv&yXF)csf4>U+`eoEH<2PRywHf+h|r7 zW81Ld!eoWP9Az?M(G%M2?Abmrzy`ZdKQP%C-5R+f6Pt_O+k3l;L*C-ru6^K|(gZ{Rwt_ z_a@|LG-6lP?!^MF22;Qy@M(ZE$zQ_@iEr`sFm1}`TOeS1RV`1(Bt>$y0_Djsav|r{ zFp^Rh-;LeLe!}(k!sp)PR0>L_lB-B|g(X*z><&wQMA8$M%p!SQkWOV7)+hZXBu@%L zOCx(iaqI^qdv(cvT{0M!T*hbz!jc&zkLi+~x};l|Jf%yX(Ip3UNkEV;nU#L&DQ|s? z`aCTOxox_nU6*v|lI^(k+>W zTOOFO*kP+>ecB$GhjR4iWqHyI6B)U1-E1rRQa0VdzOpE8)jnCFTXs^G5Bo&7P3bwg zcgi2p$R}iZRgI8Op!}95dL-ig_|O5T=*@I_(Y{yYS=R7!x{)N`P5sd->P7Ssl>erQ z9))NSA2s@jyhm>bg`C@Ra<6OT6m{D*O8SIXO$|lUAaeGM;a6Cg zQ+jeD6LUCToNQbRqtz)!8j;Ki9iEibtxAPaV#p|>6K1Llxf7CIg?s~SbfrA#5R9=l z>06~=C%v|J2%dA5#fK!JctIGhTb4xAp&ep%^g;{4VRs(=U9i#Wo5MR^fb(8QL|1-wrj++w8_b87V#4lUW9zp1oJ$mp@gsb)7 z9|-B3kZHz@z_>KERjgiNTBwZqJNDcpp>|iDaKpPnCUT1}abcT;^e&>k>nj)0)^P{) z`%@O3mr5A%+o~$`rg#&lNS`aR4T=+QakzZ4!2wtO%i*J%{lPy zy+%8C<3?Fq3#s)l|JN!^GdIt^HvfLB@3Uja#?MYo%{n015Pn593o9xJ=&z^*<^p}( z3vG?d#X3LDFvFXT{-x`zzq>tBe+|?-wRlgC25C=5gO$1&UkQUvmbGecnI^`}vZOii z%9*Asi~oIvIpJKBjW@%krq#w4*`}O@nowf;8ribsSlQ@cq_JAb7vGHIA^KV#51H*5 Pk}sJ8{R?*hZ?5_Wy?IRq delta 3252 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 literal 0 HcmV?d00001 diff --git a/Content/UI/Level/BP_BusyLevelHud.uasset b/Content/UI/Level/BP_BusyLevelHud.uasset new file mode 100644 index 0000000000000000000000000000000000000000..41be366137f7242158753f32e7d3020c7abfd5a2 GIT binary patch literal 27664 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 T7>D+K*;NTo@0=o?6ZroJdk%5w literal 0 HcmV?d00001 diff --git a/Content/UI/Level/StateBar/WBP_HealthBar.uasset b/Content/UI/Level/StateBar/WBP_HealthBar.uasset new file mode 100644 index 0000000000000000000000000000000000000000..b1a0378cd131060a529ce5ec39a905938552ec32 GIT binary patch literal 38034 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 HiTeK!TM?Z| literal 0 HcmV?d00001 diff --git a/Content/UI/Level/StateBar/WBP_RoleHead.uasset b/Content/UI/Level/StateBar/WBP_RoleHead.uasset new file mode 100644 index 0000000000000000000000000000000000000000..13b39fa31e6ed9b28aa24ba75fd30c4db88ba02f GIT binary patch literal 26314 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 literal 0 HcmV?d00001 diff --git a/Content/UI/Level/StateBar/WBP_StateBar.uasset b/Content/UI/Level/StateBar/WBP_StateBar.uasset new file mode 100644 index 0000000000000000000000000000000000000000..2e6e67ce3b3f9fe1469f75e2a659173b73c8e3d1 GIT binary patch literal 29253 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 F{|~RI;)VbK literal 0 HcmV?d00001 diff --git a/Content/UI/Level/UIControllers/BP_RoleStateController.uasset b/Content/UI/Level/UIControllers/BP_RoleStateController.uasset new file mode 100644 index 0000000000000000000000000000000000000000..89b0bc2dfe59a052870c7ecebd61e2989fc98f70 GIT binary patch literal 6931 zcmds6eQ;I96+eLhK?nlnt12KMgbztV5&{Snl9#-Y50bzmSg{ap-rFP>?|b)g?|s1s zBB&HW$7!)zJA*@o4$4@ap`(>r#}7)K+K-Vsj*cTEbSlG)f?pH?1x(Lx@7?!qAPE`h zUp<+3clVsLXU{o%cK7V&z=KnFo^5Y$U)7uFx?V)zatR2&c%tCkh=;q|e$kEx1`@D7Eu}@1MKRw{18M{kf4dzZ}ToM2B zDzvD`YpBet5pBZYO2CXcmT4Hmvhzyo8<&`d2sxS~(s=Gg^dtWDXPf(=%pw}cWpRFK zesD%f!HnWyQAyFPIde*87R@fnFP~jFqj+{v0fut{o%#(V8qDQG{axIwLFw{M7KnBR zqpGEjhA7VRB6{+X;V&RU>D7L@5jeVPBXzNgnvZcUrkP(E|o5@86< z7Sm_u7E3zOmkS>2g3g^JygiJLpz<+~ck~7qr@lPb?U+b7?-L*GY8`oUKyc$QmX#L@ zTYB8d3z(K@sB2m+!VaCQoPPWDK3aLKMUM&Evf!tcFi>>~8FFqcK}FiS^{g|MSeBNo zx6HV(oFrB5`$UJBrV_(2*OswE9Nmmj``3d`+z51yXwkySS|K7!&H9AZB0_fyV~J?C z>1QweWG>{D8VM1%^q5nT&?9uH-wh2v^kXYyj<8~y(O`?Zn31F{|9W~cyC~f)l(ZcY zUB>Z*f$w+vPwOCcX)-Qo;E>0TW}}m78Y$HWXYPAgO6oic4^LTkr_`iVa$|s2zjeD$tl6Yj8wa0A42!#b#o`8STrnC|GBp|2AWx^wumr$#eJy%xS(YY{bO z7z7^LjA1l8u7w2+b&^|QO1);WM_ubjeZ1!`%w9-q6Om=QSXuhZB7l$3YpE0Z`L;MI=oAw z9V-z|dpDn+x&U-TldxJ4HT7(fO*c%~U5KzzOESG+z(b!NzPHT3$Qxpo(2P*4X2t2y z#y+D)`MUaO*b6B7#{L@-0x6L+Y))Y|dZaLy1kIEk@#&b6(uAGtWbbC1Z#ufDr7v^1 zZg$q*vz>Qa3WVHtX3OCrurUw{CSqYsQz`GD^#1OhdE*)Ft(nHIUD~|u>+=&jaCWIl z(dq@27`r?oL!2_rmsYr|NVeUXY^*MzKOFc~_5d)pad^1AEB0ipz{#PsBJh7a|3a>H(4Hr4C2L zOnsus(8HWs1T9|iYfbC!4rxYiE5Y%Al$fz@yJuO&6pwkjSANZ>bb(jD$tzJnVL+~1 z&}rr?^6K63{fGIAd&oDZ2Yjbk-n1U_-P%LG!XEO?>V$8qhs*Oy_)q!L?-#|Vf()rI zwpf6lPx)E->>TsWb=f-QyUnAanA}4?HAZLS`sE=O0axNvG1M8~JXZuE4vWL@O(&UjAEZmNz8aAOIbSx*a#P zB+^MqM3S45n@%!8W4qEMnfi8PS_fu%O_7-TrFYhsH`ba~R5J)`TqaIILu;|+K~_{W zb9T|3Vp$LBrDd9<(dh5n+cSC5(~b|9xX#Y0ATbqM)^EF)*x^68upAM`z2^8MM!4}F_x4;qdks=?7t@VqfX_LcMZ=# z6Rk^0UqwM$%e_qYa+)_i51mu{c+%4vUEOSFdveNI1BdlTRIHKn9cPU)cw=^FqAR-c zURsX?3H=Oj8-#&+D5W>FO+2av)ns ztJAXmxb-xi^7(fg-9;;|5AO*=XG3uM zrJG?k174dH;5tgkl~pc_lt_UjBET@c0EyrdBK=b2^%O`jU~&O|X1t^-kl8<&)fGWy zs{Rg>JZ|t|#Q{)yIny+j^{sr)RN!kYk@VEp(9CrXbw*dS)A-Vz3$!`dB&HCVA zVe8&Wr)z%q%P$MRe`WMXYIt-=`4@FeF?wSg^8;`yop))Obb)!XZ~*=h{lcYp{0N%h zcDUSP&g|ONu$Nhk9U9PMi(lUP#F>fu7lGHFI9K(XUB`NL(81qO7Zymzb{OE_%H=Ct zzhQNzj$J7DwV!fw^1k9GTq&I}=HNGz=W}h7`^g7#!8j###PZAmAQ%j? zUcGu%UES`vbo9+%wY0R%i(xFT6Jy`d73nwkcYUwefAd$rFW9mEjO+HZ|H(4ELd*)6$I{n=)pRQuNmMt7TJeFXqPaiaIRf&E3o3He}_qFE^#qTB9ia#uMZp$h; z_;J~cdq+OF`|)Oi4f#Xmmd8tm-<{ue@TPq$cdBCv_HNqi_r;f7apvx2d$(_$@%_X& zf}Lx8w|9B&eK`kuUv;%l8PsnW!LsMx_8y>U5W?Zp}r-jNL@PE+lYwx~@Bw zvB7jrP05;+F)24aB|9TCEi*GUFE2GUB{MfSBR4;7(xjA0gkq-C=yJuGjPi zy(l+kOjX{5G3A;|Q+?XF2}u)qIb(mHy0MLNs>D;jvX3ip(@1h- zJg2=*Gkol+VSP4pkh`{C_vWgG%D$;jSpN7i_puywPKtZ#Yl35$9DE)iafVNOLZ!@2) zE98w7YISODbFrq`EA>*pw@#~Apt;I5hmURe)kRaFo@|$2^LVM*X?~}j?d>|Cs-G2F z(d;v{hFO}|2Q{rQx{nE|RN3s&SkJ_b2RefvU3amh9`-}=Xn`^TttZ6Zx3((>8iwA$ zT6QnK9bH{h(x`d8PP>-xch~ZMNH}ukh0t4e=`7XjR7qK+7;c6je@UO=Jx>oQEz%4X zy`Secyv^+8Ydy>Ml}_aw|OM|C%dVfC}BqTkM^9#!IlX9JAZmi~S$F1*VfzQk+{|tkY=N`BmB| z4$<8{!|SJE)1=?L#jHcUNIiI4(Zs(Z57uXD%`E;2|AnZ5{4AAvgyns(7VU z8PmL~r@mOXQ{#U<*a(3{fr*{)?BVfX-cI&hhoSe?(Hl0PA9Ja1wOWGku{Vo`uvsCQ{MV@<928z*8~=mQ)P>xnTtM3IkH@8CLukn33>0yKT7#VMcjSObFuYsc(ESFjC3n$s`?b zk?q*_!>c9*e?!1B%KmuMR4#8L$wT8r^J?x|jor2N?QNJe@=X6jUGH(a$PF}bS5WHJ z>`v2uZ~we}(3mI?Cr>`l>2mS0>VNjphcJ4yMOrOea_GAOT`1#l>8incH{bMo47Ysb z0z4kQ>&@@Mc)r)Ex$UlI-cd2nyx0SbPt(YWkgn|9ZL!te&aZ@q17JC;oewfk7kxZ<7gc!jFZ2sIiX>v=|}eHgWcYP0S)xG$fVa(_>7Qm8o$mb`k+N1$4y zdICC_uxZ5#SVEENr3r`~{-LTj##52H$l2g;V9ypGs6~@ST0@QI*@sKd#uzt&!Tw(M;KS!a@zTBUIfRuvdi{}8ak@E`gp03oLb*k{-S5(9{^pYd zH+IjEbt-3|d77p-XmC#d)9W`341k+}94kNXHUqN3f~7;5H?;Z-C=W2+75lfxZj*pg z-FE@==6|BWN`T>G5C3qZ3(DfY=Wxt3@lcFz&ez(^%`GqsF%IP{nDxd3hagFb!{Nhp zdTpm)Z{cWu!$Vyly-3f7jYS9-O4Zs0YMoZ7*Qze(Vv)OaTD|#`V*J0M|~t??rmF5O^dgRi|BoFL<4CI377E$F>McNi8|dC6^W z+y)(17+$FzHf4`@C@2c;Z5n*-`Mf5dU;PyC zBg1{qe+~2(qZMQK^uO z_2yk@uZl)p9j2^OG8-QoaMsrG99-ZwCZ-3No$I;Cg_g)CaXVj?`t)*<=R@{~C0$ZQ zp3gedMij=ib}_6EV%B(yM7~!Khz+i#f#vNk0lkD|N6>?ul*NvE=Tf6nC#HK2rR{ ztok*KJ+@=y>%*v4t2K%w#1|_v!`{3@>w;NZ2F$_O47y|=zOf`1{w7fD_cfQRH8oCy z{cY;Hzr#AR{S;ui+1ZCSFvyw{3~;#h-Ivp+KdjFjmPXT}s}N3!P@=lJ^t@_QI#ZA1 zl$)MJ2plMHt-2>h{bgGy0uRpvY_q~a>oU=UB79)6`p!9KaKL9BbM#ctOk)r2xh@|1 z&cnRR%h;SdY;(}t0S7whyzGn7Q8Uxv_o_K6^IbOkXAs;RJxrVVi46pW$6~%|Yx=-K zT1nQmPvTi<$_%h+m?21;*=N-n@KEK`yuvNSf3&nw7+AnI$YknEzSzS}sg<}Tb6>dr z3~Irw9Z*AH@-@}o`1@O-G@e$7D<)!#>;k${T&)+EH6!jNjQd@yk8M>Bbp{=9t3p18 zv9J+IvIbs*tR-2sU!Bqsv>)nR)Ad%2&2#siF+RE zQ-!>b=5=7s8e*2PUDQbO=+SZAmC;I$>Y_kXscBYfbfaD&XQ|ZD;8tjX#xoS-QSh9k zD17DUQ~cDVPcd}G>vt;@5g1O@rO<5Z_b3kCiz-g9(qyhzfmTB+5@Lel@kW|oI7!ej zYmo0khNg4A3gkq6P6|DhIv&uuT+M`_8j24rnRRMu6ev!g;x*T%c7=+G7sSzH6{j)6 zr_gi_k*H;_#tEuErAc$Sl91tm(WB4HDlaZ5o+gw~Sx*h(Kde(|VXAoiUX5r&qFUWY zk&Lre@q6qPVL}76!cts_3J67SqJ^(QCF)p(0y!e?R@^!`cAy2dwpR1`NU&y8t<)^S zRL+GD(LM3(5EWgdNJLHbXrGI1*EOGegrR7QJhX-})yWl4GMgQvm~w-1gW9ardR3p< ziK5>EA{Usd*5GM4Js-{aT>G@n*9_`1>irtIDkiB(%bbT=mAafH5N+#jMQfzB8V^9o zEG`f-8-A}_(H#yhnKk0Epp$+%Mbl9zX5>u9LG-c4g#LLsLS@oCwIWs`KHhc7tXvo{ zyiKXUhT@>)fV)W!IsnMhxZJ>P^CvC-XPvcYUe!9~Y)y`YSEaBA}^hS_z zc=ZNOq~1x3ac^yXGat4}f$8Afv>iuogrW}F_Bfqf{kSHI&&So$8i)L%$-!8#rIfe} z%;|;pCGEliSwzg_C{KZn0gd#TK&W8>`g#4MlY|sm zIH-9%)5{B_mLF3caZ;L&=|R@&kPhhKj2T*vq$^S&=EO>a#tRE8kkM*b!Ccg*G?;$J zeB^|tk=C0R_BkyjuM+nch$}9U@HRz(_ZhXfISRZ_3GbRH@cvGCS4M&N3E{1c5|5s= z@zkEYXm4GVc-KdXwUxTwzX00VohNbn*uvd5#_Xc9FQXsb1Tu>e@Ayq&w#Ww-RtP?@xa6gQTOq+tQI>pw3Ph*o;ARY?!xOL~30)>hlT zZ%?0+9{7}N7SMnSG3;b~gFMC~9*W6(t86I46A1J-o*|$Nd0YX*6>ucfhkc@bdEXTU zBEg-#Pvw%Hm5#*W4H8aIs@U>+%UdjAMt(s)!&Zb1Wi4;89M+>-x43Ryd&G5*i|^SZ zK5<~L#8XdA9MXS4?}4L+ju}02=!g;H(xy%tmvTO)r=}W@1TIaen30 zY18x2h^=RQeB!BzgM0NFoR>5rDX+t+&@0{;5{EbbEnipTX>ax|BueoCF#;Z47bM5BquD@aHFK@r&&b#iu=id7t z*tzS$-48wd$nTzd`k7~+d;WzNUw-A)KfLzG*Z=hAxBvRiyYC%*|AP+?efIemhrc}X z)z{yA3%MYtOr~V5pAu#CC;TwoXm-i%E>_JUF#WudK4J>cZ28q^;=IJNv5J zcI@eX*7)*I`_y>%$MqeW{`RoXAR3n}I>A;Rmt+CKf^z+t^^CDm=fxz_dfoZ&?u+^0&U=P_QG9EswIe(DJFxGu)bDrMzdCcl=Z()-=$jus zJ7&wfi(hm6>aG^19jdtCo168`yWf9fcP2ahU46_4_l`Mu!;XvNA3Lq{&PR^U=<~uQ zWA8lm&QrfRxO~j3@$b7cvetiAvH!yId+&Mhe=C1`$=myGc)0gm$2-5Bdip2j`}2xs zuf6@@P34DUxA!i~bEIrtJCa5Di>WR6Y}lI{=D&92vnQW_>7wg|-F;x@ zJqHS!(zd=ZJS`z1gEf6yH9zV`qb2?yyy!dXKe{?`UB$HgNlqrXVs1sO(&{V$pTk4W zVX!MkGIs1!2fQuo$#^=)a9c7RQ!fWKlV13tnITjnkDCMzWGA)e31@|Hx-Y9yb-Hl6 z5~pJ9<`E|X^F5BhCwsZIPOB~ff}|r(E2=<&zh)~PFfD) z2Kym$X=l-TkfY=4?Re2n9&un0|FDXMyuUrfk&Vugno_h?F8d|OM-NdW+|q31X3W+~ z$g+a6R#DDFT7i`<$SQ4a8DY!OByFuNTpKOHB$qaF zbmsjmR!XC10da=bBikNEbpHUpLAXA4K5?RPZ{TNBxEFA+T+W+8?f8gav}dEkP9`1r z2?srOii9KkN?vX3`1(xRR4yMo23e}qlZ||*$w#EJI8l};u0fqz@1%aMy=fhlK^iA2 zhvY}v*>ut-v~8nBuqj1&iS)ULpG-ZS%Ch;tT=Mo4$U@Uu2KCNF{>vm-I>9ms zYcfGH$pX{qegfT3plfi%pQx;oZ>v`f_FDU;vPasNxtEYRpEMZsCRTd$82U75t0yXx z^c~a54i|Hu9`qennDle)^WRVKALJd9%%{=ip)r+gnHT1+4Tvr&j;TK|bkC9NvRF}zX(*Jsc_M=tFx zcxYdeWPvq`Rj{8^uO!o$3H}>Lb{Gko6A_vn0g9PUdhip~hO7@AxOt3%7$X=VwuZ|Y zs(lT-Yi^y{H0Gl1;!D{hG!C}2E7(f1o>An_=(Mw~E1N^HaS8hw%|R%OWxwEMF{CT_ z>%COgm(8Q{mFxh!k{zXok;p&EE+N~iXZ_f6_A(t#xRtd018owc9xOzT7%AED&L`4N z;Eyo#BK`{cCK>ZsO9xxZ>m=f_C1qnvq9R2s>Lj1Nl5d(0;-BI*y$ib3CT zEW80+*FpTqV_Iq38FN`ZC| zTS-<*_Ub45#oxg+b2_;HtLIjMh)%}vC)z{O7C@nnT5lveetJM%LszWEY&2R-y|j&S zhQKiKuz@Y_&J-ml%B8e>Q>VE?3-#Q4E+!hsDpv#_(jFt*jf`{jRmZ~z<*nC89T}Hh4D>Pf5pS6xrZ zSu~RWn?n8=tGv*aRB#0oUN$l+ZA%NDNHOCyiWF0Mgr7kXJ$>zfqLfVfmrd}Ae06~Q zWcsBMHr4?X2``(jxkPJJRP@^87!i#1-@j@pE0`Z6d?uYr66QXR63S@nocXW z$<$L5sJ}9(Unfu>X3{m2?s5o{PVn*6&xk_J^&WD-&8EMpL~CqR^rT-2@;Oe_3->G1 z(-o6n9Za*mgRC091p5Ql)EUQqd`X4C(9dKcR{Stkd&dV@|37#kTFK_^Cy!-%e|@w%iX&R$o+7v{Ord#?(xBWYJdngsAur&Q@6QfrgD;OmE<&&~Gxkkk%w)=`K~| zP?E;)hmd}T@UnD~pCIxRdHzD)io~5H$}$9QrpTuXI-md=CM{VD9$CU973{i5m`MqB zW&5c#g26Xnl15s921d47H!UCq{D6c>8fgI0y2_VdDez#s}z) z7xWxVCI9B59ScZ0p3|O8_)94tN

;pJYlDnF4q=+cLElEd}_*)-sIe(weQA{SO|c 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 literal 0 HcmV?d00001 diff --git a/Content/UI/Level/bar2.uasset b/Content/UI/Level/bar2.uasset new file mode 100644 index 0000000000000000000000000000000000000000..cc0567aebce2aea44444c95fb1c22ce2e85e65de GIT binary patch literal 22504 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%0D`dmWdv!)yMyUM(#ZU%nLQ{T@3kiZUYm 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 Delegate = new TDelegate(); Delegate.BindUFunction(this, "OnGamePlayTagAddOrRemove"); diff --git a/Script/ManagedBusyRabbit/Level/GameSettings/BusyLevelHud.cs b/Script/ManagedBusyRabbit/Level/GameSettings/BusyLevelHud.cs new file mode 100644 index 0000000..ed8e437 --- /dev/null +++ b/Script/ManagedBusyRabbit/Level/GameSettings/BusyLevelHud.cs @@ -0,0 +1,29 @@ +using UnrealSharp.Engine; +using UnrealSharp.Attributes; +using UnrealSharp.BusyRabbit; +using UnrealSharp; +using UnrealSharp.UMG; + +namespace Level.GameSettings; + +[UClass] +public class ABusyLevelHud : APW_UIFrameworkHud +{ + [UProperty(PropertyFlags.EditDefaultsOnly)] + public TSubclassOf WidgetClass { set; get; } + + + protected override void BeginPlay() + { + base.BeginPlay(); + + } + + protected override void OnResourceLoaded() + { + + var widget = CreateWidget(WidgetClass); + UIManager.PushWidgetPanel(widget); + } + +} \ No newline at end of file diff --git a/Script/ManagedBusyRabbit/Level/Role/BusyFoxRole.cs b/Script/ManagedBusyRabbit/Level/Role/BusyFoxRole.cs index 392a749..5be6fe1 100644 --- a/Script/ManagedBusyRabbit/Level/Role/BusyFoxRole.cs +++ b/Script/ManagedBusyRabbit/Level/Role/BusyFoxRole.cs @@ -38,10 +38,7 @@ public class ABusyFoxRole : ABusyPlayerRole protected override void EndPlay(EEndPlayReason endPlayReason) { base.EndPlay(endPlayReason); - PrintString("haha1"); MovementComponent.MoveDirectionChangedDelegate.Remove(OnRoleMoveDirectionChanged); - PrintString("haha2"); - } [UFunction()] diff --git a/Script/ManagedBusyRabbit/UI/Level/Controllers/BusyRoleStateController.cs b/Script/ManagedBusyRabbit/UI/Level/Controllers/BusyRoleStateController.cs new file mode 100644 index 0000000..3f7519e --- /dev/null +++ b/Script/ManagedBusyRabbit/UI/Level/Controllers/BusyRoleStateController.cs @@ -0,0 +1,76 @@ +using UnrealSharp.Engine; +using UnrealSharp.Attributes; +using UnrealSharp.BusyRabbit; +using UnrealSharp.GameplayAbilities; +using UnrealSharp; +using UnrealSharp.CoreUObject; + +namespace UI.Level.Controllers; + +[UMultiDelegate] +public delegate void OnUIAttributeChange(FName AttributeName, float NewValue, float OldValue); + + + +[UClass] +public class UBusyRoleStateController : UPW_UIController +{ + [UProperty()] + public TMulticastDelegate OnAttributeChangeDelegate { get; set; } + + + protected override void OnUIControllerInitialized() + { + if (UGameplayStatics.GetPlayerController(0) is ALevelPlayerController PC) + { + ABusyPlayerRole Role = PC.ControlledRole; + if (AbilitySystemLibrary.GetAbilitySystemComponent(Role) is UBusyAbilitySystemComponent ASC) + { + RegisterAttributeListener(ASC, "Health"); + RegisterAttributeListener(ASC, "Hunger"); + } + } + } + + public float GetControlledAttribute(FName AttributeName) + { + if (UGameplayStatics.GetPlayerController(0) is ALevelPlayerController PC) + { + ABusyPlayerRole Role = PC.ControlledRole; + if (AbilitySystemLibrary.GetAbilitySystemComponent(Role) is UBusyAbilitySystemComponent ASC) + { + FGameplayAttribute Attribute = UBusyAscLibrary.GetAttribute(Role.Attributes, AttributeName); + return ASC.GetGameplayAttributeValue(Attribute, out bool IsFound); + } + } + return 0; + } + + public float GetRoleAttribute(ABusyPawnBase Pawn, FName Attribute) + { + return 0; + } + + + + + protected void RegisterAttributeListener(UBusyAbilitySystemComponent ASC, FName AttributeName) + { + TDelegate Delegate = new TDelegate(); + Delegate.BindUFunction(this, "OnAttributeChange"); + ASC.BindEventToAttributeChange(typeof(UBusyPlayerRoleAttributeSet), AttributeName, Delegate); + } + + + [UFunction()] + protected void OnAttributeChange(FName AttributeName, float NewValue, float OldValue) + { + OnAttributeChangeDelegate.Invoke(AttributeName, NewValue, OldValue); + } + + + protected override void OnUIControllerDestroy() + { + base.OnUIControllerDestroy(); + } +} \ No newline at end of file diff --git a/Script/ManagedBusyRabbit/UI/Level/StateBar/BusyHealthBar.cs b/Script/ManagedBusyRabbit/UI/Level/StateBar/BusyHealthBar.cs new file mode 100644 index 0000000..423e8bb --- /dev/null +++ b/Script/ManagedBusyRabbit/UI/Level/StateBar/BusyHealthBar.cs @@ -0,0 +1,71 @@ +using UnrealSharp.Attributes; +using UnrealSharp.BusyRabbit; +using UnrealSharp.UMG; +namespace UI.Level.StateBar; + + +[UClass] +public class UBusyWidgetHealthBar : UPW_MinimalWidget +{ + [UProperty(PropertyFlags.EditAnywhere)] + public float Percent { get; set; } + + [UProperty(PropertyFlags.EditAnywhere)] + public float Test { get; set; } + + + protected UProgressBar? HpBarHurt { get { return GetWidget("HpBarHurt") as UProgressBar; } } + protected UProgressBar? HpBarHealth { get { return GetWidget("HpBarHealth") as UProgressBar; } } + protected UProgressBar? HpBarNormal { get { return GetWidget("HpBarNormal") as UProgressBar; } } + protected USizeBox ? SizeboxMain { get { return GetWidget("SizeboxMain") as USizeBox; } } + + [UProperty(PropertyFlags.EditAnywhere)] + public float MaxHp { get; set; } + + [UProperty(PropertyFlags.EditAnywhere)] + public float CurHp { get; set; } + + [UProperty(PropertyFlags.EditAnywhere)] + public float Width { get; set; } + + [UProperty(PropertyFlags.EditAnywhere)] + public float Height { get; set; } + + protected float LastHp = 200; + + + public override void PreConstruct(bool isDesignTime) + { + SetHpConfig(CurHp, MaxHp); + RefreshHealthBarDisplay(); + } + + public override void Construct() + { + base.Construct(); + SetHpConfig(180, 200); + } + + public void SetHpConfig(float CurHp, float MaxHp) + { + LastHp = CurHp; + this.CurHp = CurHp; + this.MaxHp = MaxHp; + RefreshHealthBarDisplay(); + } + + + protected void RefreshHealthBarDisplay() + { + if (HpBarHealth == null || HpBarHurt == null || HpBarNormal == null || SizeboxMain == null) + { + return; + } + HpBarHurt.Visibility = ESlateVisibility.Collapsed; + HpBarHealth.Visibility = ESlateVisibility.Collapsed; + HpBarNormal.Percent = MaxHp != 0 ? (CurHp / MaxHp) : 0; + SizeboxMain.WidthOverride = Width; + SizeboxMain.HeightOverride = Height; + } + +} \ No newline at end of file diff --git a/Script/ManagedBusyRabbit/UI/Level/StateBar/BusySatietyBar.cs b/Script/ManagedBusyRabbit/UI/Level/StateBar/BusySatietyBar.cs new file mode 100644 index 0000000..2e8b818 --- /dev/null +++ b/Script/ManagedBusyRabbit/UI/Level/StateBar/BusySatietyBar.cs @@ -0,0 +1,36 @@ +using UnrealSharp.Engine; +using UnrealSharp.Attributes; +using UnrealSharp.BusyRabbit; +using UnrealSharp.UMG; + +namespace UI.Level.StateBar; + +[UClass] +public class UBusyWidgetSatietyBar : UPW_MinimalWidget +{ + protected UProgressBar? SatietyBar { get { return GetWidget("SatietyBar") as UProgressBar; } } + + protected float CurrSatiety; + protected float MaxSatiety; + public void SetSatietyConfig(float CurrSatiety, float MaxSatiety) + { + this.MaxSatiety = MaxSatiety; + this.CurrSatiety = CurrSatiety; + RefreshDisplay(); + } + + public void OnSatietyChanged(float CurSatiety) + { + this.CurrSatiety = CurSatiety; + RefreshDisplay(); + } + + public void RefreshDisplay() + { + float Percent = MaxSatiety > 0 ? CurrSatiety / MaxSatiety : 0; + if (SatietyBar != null) + { + SatietyBar.Percent = Percent; + } + } +} diff --git a/Script/ManagedBusyRabbit/UI/Level/StateBar/BusyStateBar.cs b/Script/ManagedBusyRabbit/UI/Level/StateBar/BusyStateBar.cs new file mode 100644 index 0000000..b860a1b --- /dev/null +++ b/Script/ManagedBusyRabbit/UI/Level/StateBar/BusyStateBar.cs @@ -0,0 +1,55 @@ +using UnrealSharp.Engine; +using UI.Level.Controllers; +using UnrealSharp.Attributes; +using UnrealSharp.BusyRabbit; +using UnrealSharp; + +namespace UI.Level.StateBar; + +[UClass] +public class UBusyWidgetStateBar : UPW_MinimalWidget +{ + protected UBusyWidgetHealthBar? WBP_HealthBar { get { return GetWidget("WBP_HealthBar") as UBusyWidgetHealthBar; } } + protected UBusyWidgetSatietyBar? WBP_SatietyBar { get { return GetWidget("WBP_SatietyBar") as UBusyWidgetSatietyBar; } } + + protected UBusyRoleStateController? UIController; + + + public override void Construct() + { + base.Construct(); + WBP_SatietyBar.SetSatietyConfig(100, 200); + + UIController = UUIFunctionLibrary.GetUIController(this, "RoleState") as UBusyRoleStateController; + + InitRoleAttribute(); + UIController.OnAttributeChangeDelegate += OnAttributeChanged; + + } + + public void InitRoleAttribute() + { + float CurHealth = UIController.GetControlledAttribute("Health"); + float MaxHealth = UIController.GetControlledAttribute("MaxHealth"); + float CurSatiety = UIController.GetControlledAttribute("Hunger"); + float MaxSatiety = UIController.GetControlledAttribute("MaxHunger"); + WBP_HealthBar.SetHpConfig(CurHealth, MaxHealth); + WBP_SatietyBar.SetSatietyConfig(CurSatiety, MaxSatiety); + } + + public override void Destruct() + { + base.Destruct(); + UIController.OnAttributeChangeDelegate -= OnAttributeChanged; + } + + + [UFunction()] + protected void OnAttributeChanged(FName AttributeName, float NewValue, float OldValue) + { + if (AttributeName == "Hunger") + { + WBP_SatietyBar.OnSatietyChanged(NewValue); + } + } +} diff --git a/Source/BusyRabbit/Private/BlueprintLibrary/BusyAscLibrary.cpp b/Source/BusyRabbit/Private/BlueprintLibrary/BusyAscLibrary.cpp index 08d155a..93344aa 100644 --- a/Source/BusyRabbit/Private/BlueprintLibrary/BusyAscLibrary.cpp +++ b/Source/BusyRabbit/Private/BlueprintLibrary/BusyAscLibrary.cpp @@ -4,6 +4,7 @@ #include "AbilitySystemGlobals.h" #include "GameplayEffectTypes.h" #include "Gas/BusyGameAbility.h" +#include "Level/Actor/BusyPawnBase.h" UBusyAbilityDataAssetBase* UBusyAscLibrary::GetAbilityDataAssetByEffect(const FGameplayEffectSpec& Spec) { @@ -28,3 +29,12 @@ FGameplayEffectSpecHandle UBusyAscLibrary::MakeGameplayEffectSpecHandle(const UA FGameplayEffectSpec* NewSpec = new FGameplayEffectSpec(Effect, ContextHandle, Level); return FGameplayEffectSpecHandle(NewSpec); } + +FGameplayAttribute UBusyAscLibrary::GetAttribute(const UBusyPawnAttributeSet* AttributeSet, const FName& AttributeName) +{ + if (FProperty* Prop = FindFieldChecked(AttributeSet->GetClass(), AttributeName)) + { + return Prop; + } + return nullptr; +} diff --git a/Source/BusyRabbit/Private/BlueprintLibrary/UIFunctionLibrary.cpp b/Source/BusyRabbit/Private/BlueprintLibrary/UIFunctionLibrary.cpp new file mode 100644 index 0000000..f9c84d9 --- /dev/null +++ b/Source/BusyRabbit/Private/BlueprintLibrary/UIFunctionLibrary.cpp @@ -0,0 +1,19 @@ +#include "BlueprintLibrary/UIFunctionLibrary.h" +#include "UIFramework/UIFrameworkHud.h" + +UPW_UIController* UUIFunctionLibrary::GetUIController(const UObject* Object, const FName& Name) +{ + if (Object == nullptr) return nullptr; + const UWorld* World = Object->GetWorld(); + if (World == nullptr) return nullptr; + const APlayerController* PC = World->GetFirstPlayerController(); + if (PC == nullptr) return nullptr; + + if (APW_UIFrameworkHud* Hud = Cast(PC->GetHUD())) + { + return Hud->GetUIController(Name); + } + + return nullptr; + +} diff --git a/Source/BusyRabbit/Private/Level/Actor/Components/BusyAbilitySystemComponent.cpp b/Source/BusyRabbit/Private/Level/Actor/Components/BusyAbilitySystemComponent.cpp index 86507c8..c96f323 100644 --- a/Source/BusyRabbit/Private/Level/Actor/Components/BusyAbilitySystemComponent.cpp +++ b/Source/BusyRabbit/Private/Level/Actor/Components/BusyAbilitySystemComponent.cpp @@ -1 +1,16 @@ #include "Level/Actor/Components/BusyAbilitySystemComponent.h" + +void UBusyAbilitySystemComponent::BindEventToAttributeChange(const UClass* AttributeSetClass, const FName& AttributeName, FOnBusyAttributeChange Delegate) +{ + FProperty* Prop = FindFieldChecked(AttributeSetClass, AttributeName); + if (Prop == nullptr) + { + return; + } + FOnGameplayAttributeValueChange &OnAttributeChange = GetGameplayAttributeValueChangeDelegate(Prop); + + OnAttributeChange.AddLambda([AttributeName, Delegate](const FOnAttributeChangeData& Data) + { + Delegate.ExecuteIfBound(AttributeName, Data.NewValue, Data.OldValue); + }); +} diff --git a/Source/BusyRabbit/Private/UIFramework/MinimalWidget.cpp b/Source/BusyRabbit/Private/UIFramework/MinimalWidget.cpp new file mode 100644 index 0000000..33e0673 --- /dev/null +++ b/Source/BusyRabbit/Private/UIFramework/MinimalWidget.cpp @@ -0,0 +1,6 @@ +#include "UIFramework/MinimalWidget.h" + +UWidget* UPW_MinimalWidget::GetWidget(const FName& Name)const +{ + return GetWidgetFromName(Name); +} diff --git a/Source/BusyRabbit/Private/UIFramework/RootWidget.cpp b/Source/BusyRabbit/Private/UIFramework/RootWidget.cpp new file mode 100644 index 0000000..dfb882f --- /dev/null +++ b/Source/BusyRabbit/Private/UIFramework/RootWidget.cpp @@ -0,0 +1,22 @@ +#include "UIFramework/RootWidget.h" +#include "Blueprint/WidgetTree.h" +#include "UIFramework/WidgetPanel.h" +#include "Components/Overlay.h" +#include "Components/OverlaySlot.h" + + +bool UPW_RootWidget::PushWidget(UPW_WidgetPanel* Widget)const +{ + if (UOverlaySlot* OverlaySlot = Cast(MainOverlay->AddChild(Widget))) + { + OverlaySlot->SetHorizontalAlignment(HAlign_Fill); + OverlaySlot->SetVerticalAlignment(VAlign_Fill); + return true; + } + return false; +} + +bool UPW_RootWidget::RemoveWidget(UPW_WidgetPanel* Widget)const +{ + return MainOverlay->RemoveChild(Widget); +} diff --git a/Source/BusyRabbit/Private/UIFramework/UIController.cpp b/Source/BusyRabbit/Private/UIFramework/UIController.cpp new file mode 100644 index 0000000..9094336 --- /dev/null +++ b/Source/BusyRabbit/Private/UIFramework/UIController.cpp @@ -0,0 +1,21 @@ +#include "UIFramework/UIController.h" + +void UPW_UIController::InitUIController(APW_UIFrameworkHud* UIHud) +{ + Hud = UIHud; + OnUIControllerInitialized(); +} + +void UPW_UIController::DestroyUIController() +{ + OnUIControllerDestroy(); +} + +void UPW_UIController::OnUIControllerInitialized_Implementation() +{ +} + + +void UPW_UIController::OnUIControllerDestroy_Implementation() +{ +} diff --git a/Source/BusyRabbit/Private/UIFramework/UIFrameworkHud.cpp b/Source/BusyRabbit/Private/UIFramework/UIFrameworkHud.cpp new file mode 100644 index 0000000..011d189 --- /dev/null +++ b/Source/BusyRabbit/Private/UIFramework/UIFrameworkHud.cpp @@ -0,0 +1,83 @@ +#include "UIFramework/UIFrameworkHud.h" +#include "UIFramework/RootWidget.h" +#include "UIFramework/UIController.h" + +DEFINE_LOG_CATEGORY(LogUIHud) + + +APW_UIFrameworkHud::APW_UIFrameworkHud() +{ + UIManager = CreateDefaultSubobject(TEXT("UIManager")); +} + +void APW_UIFrameworkHud::BeginPlay() +{ + if (RootWidgetClass) + { + UPW_RootWidget* Root = NewObject(this, RootWidgetClass, FName("RootWidget")); + UIManager->AttachUIDisplay(Root); + } + + for (const TPair Pair : UIControllerClasses) + { + TSoftClassPtr ControllerClass = Pair.Value; + if (ControllerClass.IsNull()) continue; + + auto Delegate = FLoadSoftObjectPathAsyncDelegate::CreateLambda([this, Pair](const FSoftObjectPath& Path, UObject* Object) + { + if (const UClass* UIControllerClass = Cast(Object)) + { + if (UPW_UIController* NewController = NewObject(this, UIControllerClass)) + { + UIControllers.Add(Pair.Key, NewController); + NewController->InitUIController(this); + } + } + TryNotifyResourceLoaded(); + }); + + if (ControllerClass.LoadAsync(Delegate) == -1) + { + UE_LOG(LogUIHud, Error, TEXT("APW_UIFrameworkHud::BeginPlay can't load class: %s"), *ControllerClass.GetAssetName()); + } + } + + Super::BeginPlay(); +} + +void APW_UIFrameworkHud::EndPlay(const EEndPlayReason::Type EndPlayReason) +{ + UIManager->DetachUIDisplay(); + + for (const TPair Pair: UIControllers) + { + if (UPW_UIController* Controller = Pair.Value) + { + Controller->DestroyUIController(); + } + } + UIControllers.Empty(); + Super::EndPlay(EndPlayReason); +} + +UPW_UIController* APW_UIFrameworkHud::GetUIController(const FName& Name) +{ + if (UPW_UIController** ControllerPtr = UIControllers.Find(Name)) + { + return *ControllerPtr; + } + return nullptr; +} + +void APW_UIFrameworkHud::TryNotifyResourceLoaded() +{ + if (UIControllers.Num() == UIControllerClasses.Num()) + { + OnResourceLoaded(); + } +} + +void APW_UIFrameworkHud::OnResourceLoaded_Implementation() +{ +} + diff --git a/Source/BusyRabbit/Private/UIFramework/UIManager.cpp b/Source/BusyRabbit/Private/UIFramework/UIManager.cpp new file mode 100644 index 0000000..f13bbd1 --- /dev/null +++ b/Source/BusyRabbit/Private/UIFramework/UIManager.cpp @@ -0,0 +1,60 @@ +#include "UIFramework/UIManager.h" + +#include "Blueprint/UserWidget.h" +#include "UIFramework/RootWidget.h" +#include "UIFramework/UIFrameworkHud.h" + + +bool UPW_UIManager::AttachUIDisplay(UPW_RootWidget* InRootWidget) +{ + if (InRootWidget) + { + RootWidget = InRootWidget; + InRootWidget->AddToViewport(); + return true; + } + return false; +} + +void UPW_UIManager::DetachUIDisplay()const +{ + if (RootWidget.Get() != nullptr) + { + RootWidget->RemoveFromParent(); + } +} + +void UPW_UIManager::SetRootWidget(UPW_RootWidget* NewRootWidget) +{ + RootWidget = NewRootWidget; +} + +UPW_UIManager* UPW_UIManager::Get(UWorld* World) +{ + if (World == nullptr) return nullptr; + const APlayerController* PC = World->GetFirstPlayerController(); + if (PC == nullptr) return nullptr; + + if (const APW_UIFrameworkHud * Hud = Cast(PC->GetHUD())) + { + return Hud->GetUIManager(); + } + return nullptr; +} + +bool UPW_UIManager::PushWidgetPanel(UPW_WidgetPanel* Panel) +{ + if (RootWidget.Get() == nullptr) return false; + + if (WidgetPanelStack.Contains(Panel)) + { + WidgetPanelStack.Remove(Panel); + } + WidgetPanelStack.Push(Panel); + RootWidget->PushWidget(Panel); + return true; +} + +void UPW_UIManager::PopWidgetPanel(UPW_WidgetPanel* Panel) +{ +} diff --git a/Source/BusyRabbit/Private/UIFramework/WidgetPanel.cpp b/Source/BusyRabbit/Private/UIFramework/WidgetPanel.cpp new file mode 100644 index 0000000..c57bcc3 --- /dev/null +++ b/Source/BusyRabbit/Private/UIFramework/WidgetPanel.cpp @@ -0,0 +1 @@ +#include "UIFramework/WidgetPanel.h" diff --git a/Source/BusyRabbit/Public/BlueprintLibrary/BusyAscLibrary.h b/Source/BusyRabbit/Public/BlueprintLibrary/BusyAscLibrary.h index 8e912ed..c5c77fb 100644 --- a/Source/BusyRabbit/Public/BlueprintLibrary/BusyAscLibrary.h +++ b/Source/BusyRabbit/Public/BlueprintLibrary/BusyAscLibrary.h @@ -5,6 +5,7 @@ class UGameplayEffect; struct FGameplayEffectSpec; +class UBusyPawnAttributeSet; class UBusyAbilityDataAssetBase; UCLASS() @@ -20,4 +21,8 @@ public: UFUNCTION(BlueprintCallable) static FGameplayEffectSpecHandle MakeGameplayEffectSpecHandle(const UAbilitySystemComponent* Asc, const UGameplayEffect* Effect, const float Level); + + + UFUNCTION(BlueprintCallable) + static FGameplayAttribute GetAttribute(const UBusyPawnAttributeSet* AttributeSet, const FName& AttributeName); }; diff --git a/Source/BusyRabbit/Public/BlueprintLibrary/UIFunctionLibrary.h b/Source/BusyRabbit/Public/BlueprintLibrary/UIFunctionLibrary.h new file mode 100644 index 0000000..988dab7 --- /dev/null +++ b/Source/BusyRabbit/Public/BlueprintLibrary/UIFunctionLibrary.h @@ -0,0 +1,15 @@ +#pragma once + +#include "UIFunctionLibrary.generated.h" + +class UPW_UIController; + +UCLASS(BlueprintType) +class UUIFunctionLibrary : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() +public: + UFUNCTION(BlueprintCallable, Category = "UIFunctionLibrary") + static UPW_UIController* GetUIController(const UObject* Object, const FName& Name); + +}; diff --git a/Source/BusyRabbit/Public/Core/PW_UserWidget.h b/Source/BusyRabbit/Public/Core/PW_UserWidget.h index a429fe8..df15c84 100644 --- a/Source/BusyRabbit/Public/Core/PW_UserWidget.h +++ b/Source/BusyRabbit/Public/Core/PW_UserWidget.h @@ -70,7 +70,7 @@ public: * */ UCLASS() -class BUSYRABBIT_API UPW_UserWidget : public UPW_SimpleWidget{ +class BUSYRABBIT_API UPW_UserWidget : public UUserWidget{ GENERATED_BODY() public: // UPROPERTY(BlueprintReadOnly, EditDefaultsOnly, DisplayName="是否全局唯一") diff --git a/Source/BusyRabbit/Public/Level/Actor/BusyPawnBase.h b/Source/BusyRabbit/Public/Level/Actor/BusyPawnBase.h index e296956..217a8e4 100644 --- a/Source/BusyRabbit/Public/Level/Actor/BusyPawnBase.h +++ b/Source/BusyRabbit/Public/Level/Actor/BusyPawnBase.h @@ -12,7 +12,7 @@ class UBusyPawnMovementComponent; DECLARE_DYNAMIC_DELEGATE_TwoParams(FGameplayTagAddOrRemoveDelegate, const FGameplayTag&, Tag, const int32, Value); -#define MY_ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \ +#define BUSY_ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \ GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \ GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \ GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \ @@ -27,28 +27,29 @@ class UBusyPawnAttributeSet : public UAttributeSet GENERATED_BODY() public: +public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes") FGameplayAttributeData Health; - MY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, Health); + BUSY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, Health); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes") FGameplayAttributeData MaxHealth; - MY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, MaxHealth); + BUSY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, MaxHealth); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes") FGameplayAttributeData MoveSpeed; - MY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, MoveSpeed); + BUSY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, MoveSpeed); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes") FGameplayAttributeData Damage; - MY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, Damage); + BUSY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, Damage); UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes") FGameplayAttributeData Defense; - MY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, Defense); + BUSY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, Defense); }; -#undef MY_ATTRIBUTE_ACCESSORS +#undef BUSY_ATTRIBUTE_ACCESSORS UCLASS() @@ -103,7 +104,7 @@ public: FName PawnName; -protected: +public: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly) TObjectPtr Attributes = nullptr; diff --git a/Source/BusyRabbit/Public/Level/Actor/Components/BusyAbilitySystemComponent.h b/Source/BusyRabbit/Public/Level/Actor/Components/BusyAbilitySystemComponent.h index e8e20ef..c4d4f83 100644 --- a/Source/BusyRabbit/Public/Level/Actor/Components/BusyAbilitySystemComponent.h +++ b/Source/BusyRabbit/Public/Level/Actor/Components/BusyAbilitySystemComponent.h @@ -2,9 +2,13 @@ #include "AbilitySystemComponent.h" #include "BusyAbilitySystemComponent.generated.h" +DECLARE_DYNAMIC_DELEGATE_ThreeParams(FOnBusyAttributeChange, const FName&, AttributeName, float, NewValue, float, OldValue); UCLASS() class UBusyAbilitySystemComponent : public UAbilitySystemComponent { GENERATED_BODY() + + UFUNCTION(BlueprintCallable) + void BindEventToAttributeChange(const UClass* AttributeSetClass, const FName& AttributeName, FOnBusyAttributeChange Delegate); }; diff --git a/Source/BusyRabbit/Public/UIFramework/MinimalWidget.h b/Source/BusyRabbit/Public/UIFramework/MinimalWidget.h new file mode 100644 index 0000000..4ef4dc4 --- /dev/null +++ b/Source/BusyRabbit/Public/UIFramework/MinimalWidget.h @@ -0,0 +1,17 @@ +#pragma once + +#include "Blueprint/UserWidget.h" +#include "MinimalWidget.generated.h" + + +UCLASS(Blueprintable, BlueprintType) +class UPW_MinimalWidget : public UUserWidget +{ + GENERATED_BODY() +public: + UFUNCTION(BlueprintCallable, Category = "Widget") + UWidget* GetWidget(const FName& Name)const; + +}; + + diff --git a/Source/BusyRabbit/Public/UIFramework/RootWidget.h b/Source/BusyRabbit/Public/UIFramework/RootWidget.h new file mode 100644 index 0000000..5303b71 --- /dev/null +++ b/Source/BusyRabbit/Public/UIFramework/RootWidget.h @@ -0,0 +1,24 @@ +#pragma once + +#include "Blueprint/UserWidget.h" +#include "RootWidget.generated.h" + +class UOverlay; +class UPW_WidgetPanel; + +UCLASS() +class UPW_RootWidget : public UUserWidget +{ + GENERATED_BODY() + +public: + bool PushWidget(UPW_WidgetPanel* Widget)const; + bool RemoveWidget(UPW_WidgetPanel* Widget)const; + +protected: + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Widget", meta=(BindWidget)) + TObjectPtr MainOverlay; +}; + + + diff --git a/Source/BusyRabbit/Public/UIFramework/UIController.h b/Source/BusyRabbit/Public/UIFramework/UIController.h new file mode 100644 index 0000000..a7f5c21 --- /dev/null +++ b/Source/BusyRabbit/Public/UIFramework/UIController.h @@ -0,0 +1,30 @@ +#pragma once + +#include "UIController.generated.h" + +class APW_UIFrameworkHud; + +UCLASS(Blueprintable, BlueprintType) +class UPW_UIController : public UObject +{ + GENERATED_BODY() +public: + + void InitUIController(APW_UIFrameworkHud* UIHud); + + void DestroyUIController(); + +protected: + UFUNCTION(BlueprintNativeEvent) + void OnUIControllerInitialized(); + + UFUNCTION(BlueprintNativeEvent) + void OnUIControllerDestroy(); + +protected: + UPROPERTY() + TObjectPtr Hud; + + UPROPERTY() + TObjectPtr PC; +}; diff --git a/Source/BusyRabbit/Public/UIFramework/UIFrameworkHud.h b/Source/BusyRabbit/Public/UIFramework/UIFrameworkHud.h new file mode 100644 index 0000000..bdfdd78 --- /dev/null +++ b/Source/BusyRabbit/Public/UIFramework/UIFrameworkHud.h @@ -0,0 +1,55 @@ +#pragma once +#include "GameFramework/HUD.h" +#include "UIFramework/UIManager.h" +#include "UIFrameworkHud.generated.h" + + +DECLARE_LOG_CATEGORY_EXTERN(LogUIHud, Log, All); + + +class UPW_UIController; + + + +UCLASS(Blueprintable, BlueprintType) +class APW_UIFrameworkHud : public AHUD +{ + GENERATED_BODY() +public: + APW_UIFrameworkHud(); + virtual void BeginPlay() override; + virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; + +public: + UPW_UIController* GetUIController(const FName& Name); + + +public: + UPW_UIManager* GetUIManager()const {return UIManager.Get();} + + +protected: + void TryNotifyResourceLoaded(); + + +protected: + UFUNCTION(BlueprintNativeEvent) + void OnResourceLoaded(); + +protected: + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + TSubclassOf RootWidgetClass; + + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + TMap> UIControllerClasses; + +protected: + UPROPERTY() + TObjectPtr UIManager; + + UPROPERTY() + TMap UIControllers; +}; + + + diff --git a/Source/BusyRabbit/Public/UIFramework/UIManager.h b/Source/BusyRabbit/Public/UIFramework/UIManager.h new file mode 100644 index 0000000..b0672e9 --- /dev/null +++ b/Source/BusyRabbit/Public/UIFramework/UIManager.h @@ -0,0 +1,34 @@ +#pragma once + +#include "UIManager.generated.h" + +class UPW_RootWidget; +class UPW_WidgetPanel; + + +UCLASS(BlueprintType) +class UPW_UIManager : public UObject +{ + GENERATED_BODY() +public: + bool AttachUIDisplay(UPW_RootWidget* InRootWidget); + void DetachUIDisplay()const; + void SetRootWidget(UPW_RootWidget* NewRootWidget); + +public: + UFUNCTION(BlueprintCallable) + static UPW_UIManager* Get(UWorld* World); + + UFUNCTION(BlueprintCallable) + bool PushWidgetPanel(UPW_WidgetPanel* Panel); + + UFUNCTION(BlueprintCallable) + void PopWidgetPanel(UPW_WidgetPanel* Panel); + +protected: + UPROPERTY() + TArray WidgetPanelStack; + + UPROPERTY() + TObjectPtr RootWidget; +}; diff --git a/Source/BusyRabbit/Public/UIFramework/WidgetPanel.h b/Source/BusyRabbit/Public/UIFramework/WidgetPanel.h new file mode 100644 index 0000000..9d87b48 --- /dev/null +++ b/Source/BusyRabbit/Public/UIFramework/WidgetPanel.h @@ -0,0 +1,13 @@ +#pragma once +#include "UIFramework/MinimalWidget.h" +#include "WidgetPanel.generated.h" + + + +UCLASS(BlueprintType, Blueprintable) +class UPW_WidgetPanel : public UPW_MinimalWidget +{ + GENERATED_BODY() +public: + +};