From 8099d69a237b994fde84bb6dba6938127c6fa813 Mon Sep 17 00:00:00 2001 From: Dolobarsch Date: Sat, 5 Sep 2026 03:04:12 +0200 Subject: [PATCH] Neues Interaktionssystem implementiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Einführung eines modularen Interaktionssystems: - Hinzufügen der `IInteractable`- und `IInteractionLookupProvider`-Schnittstellen. - Implementierung der `UInteractionComponent` zur Steuerung von Interaktionen (Tippen, Halten, Kontextmenü). - Integration der `InteractionComponent` in `KingshearthLegacyCharacter`. - Hinzufügen des `InteractionContextMenuWidget` für UI-Interaktionen. - Änderungen an `PlayerHUDWidget`, um Interaktions-Widgets zu unterstützen. - Neue Assets und Konfigurationsänderungen für Kollisionen und Redirects. - Verbesserte Modularität und Benutzerfreundlichkeit durch klare Trennung von Logik und Darstellung. --- .claude/settings.local.json | 3 +- Config/DefaultEngine.ini | 3 + Content/Input/Actions/IA_Interact.uasset | Bin 0 -> 1174 bytes Content/Input/Actions/IA_InterectCycle.uasset | Bin 0 -> 1395 bytes Content/Input/IMC_Default.uasset | Bin 9111 -> 10048 bytes Content/Testing/BP_Campfire.uasset | Bin 0 -> 71208 bytes .../Blueprints/BP_ThirdPersonCharacter.uasset | Bin 129195 -> 140587 bytes Content/UI/WBP_InteractionContextMenu.uasset | Bin 0 -> 24322 bytes Content/UI/WBP_PlayerHUD.uasset | Bin 29844 -> 31757 bytes .../Interaction/Interactable.h | 37 ++++ .../Interaction/InteractionComponent.cpp | 205 ++++++++++++++++++ .../Interaction/InteractionComponent.h | 144 ++++++++++++ .../Interaction/InteractionLookupProvider.h | 33 +++ .../Interaction/InteractionTypes.h | 25 +++ .../KingshearthLegacy.Build.cs | 1 + .../KingshearthLegacyCharacter.cpp | 37 ++++ .../KingshearthLegacyCharacter.h | 31 +++ .../KingshearthLegacyPlayerController.cpp | 3 +- .../UI/InteractionContextMenuWidget.cpp | 110 ++++++++++ .../UI/InteractionContextMenuWidget.h | 76 +++++++ .../KingshearthLegacy/UI/PlayerHUDWidget.cpp | 11 +- Source/KingshearthLegacy/UI/PlayerHUDWidget.h | 7 +- 22 files changed, 722 insertions(+), 4 deletions(-) create mode 100644 Content/Input/Actions/IA_Interact.uasset create mode 100644 Content/Input/Actions/IA_InterectCycle.uasset create mode 100644 Content/Testing/BP_Campfire.uasset create mode 100644 Content/UI/WBP_InteractionContextMenu.uasset create mode 100644 Source/KingshearthLegacy/Interaction/Interactable.h create mode 100644 Source/KingshearthLegacy/Interaction/InteractionComponent.cpp create mode 100644 Source/KingshearthLegacy/Interaction/InteractionComponent.h create mode 100644 Source/KingshearthLegacy/Interaction/InteractionLookupProvider.h create mode 100644 Source/KingshearthLegacy/Interaction/InteractionTypes.h create mode 100644 Source/KingshearthLegacy/UI/InteractionContextMenuWidget.cpp create mode 100644 Source/KingshearthLegacy/UI/InteractionContextMenuWidget.h diff --git a/.claude/settings.local.json b/.claude/settings.local.json index c4c27d0..aa3c1f3 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -3,7 +3,8 @@ "allow": [ "mcp__unreal-mcp__describe_toolset", "mcp__unreal-mcp__call_tool", - "Bash(python *)" + "Bash(python *)", + "mcp__unreal-mcp__list_toolsets" ] }, "enabledMcpjsonServers": [ diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 631e962..dbdea0f 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -73,6 +73,9 @@ AppliedTargetedHardwareClass=Desktop DefaultGraphicsPerformance=Maximum AppliedDefaultGraphicsPerformance=Maximum +[/Script/Engine.CollisionProfile] ++DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,Name="Interactable",DefaultResponse=ECR_Block,bTraceType=True,bStaticObject=False) + [/Script/Engine.Engine] +ActiveGameNameRedirects=(OldGameName="TP_ThirdPerson",NewGameName="/Script/KingshearthLegacy") +ActiveGameNameRedirects=(OldGameName="/Script/TP_ThirdPerson",NewGameName="/Script/KingshearthLegacy") diff --git a/Content/Input/Actions/IA_Interact.uasset b/Content/Input/Actions/IA_Interact.uasset new file mode 100644 index 0000000000000000000000000000000000000000..15ecc1df135b2b19ef0d57fed3e0b61a7582e2b6 GIT binary patch literal 1174 zcmX@utTpfZ|Ns9Jm>C$jm>3v-0cj9mJsi*8v+8W5^r;({PSt+)%1sf82xVblURiN0fUNoIatvA(Bcyk}lXYEfcx z2~Y(C11Au-f(!wIc%XfXK-$^N&DGq(!qm;s(#X}t$kou&z|G9e$=S)t&CT4!)da2> zr0)q(6A&>>0TDnD0(CHm1{nzBM*#UCoCB4Q0n!Eax!>yEmAK5C;a0iT`equ)JP-ys zij{!_XznYML}no%Pg^_G)l@quH77N(I91nF&jKtDlwk41ArF)TgM|z?K7$xjfc7N; z0}L4e!}&ib5J65)Ly}_!^8NDjQW?H5ALW$=asm>QvlG)(ee#nNb26(EK|$#U4BO&@ z#N<>4p_0lD1)w5A!M$VeEKw1Vy5QuZ%z_eq=lr77Q2(T?RA5y6@YJ;vLy~jN%Sg;i zPE7$v9>djjr{AyvWu0>pi;Edb$}1-F0C~t!88zvIHdqW4*^szq5RypX;Q*?GI-a4} zy+ahp1&1&wltDldhzUkFG{%5I4gvpw!Nv|{BU3PSAWLBYDO6!X44`0#bASwx*Fb<9 zhw9#}Evzyv@Q4pcn zlOTAiXt6gHy$IsL2HT6CN-3hEP%Mg?C_+(DG`_dlZO7VBA57l7`QCgp``$OnUf6l< zTcJ?svk_9cmXIId(Z)KT)9bk}uEYM*Q|bK8i_VU7xAS&F)&Q38zdQe)zp_yEA~421 z411ektr3Q=O&*}Wh?-36K2FhN303n&xFZo&rzxuFLPm*GNF!tej7!J__6ZJc03VWq ze8A6%qSzvEQnR=_EQW;eu4Z1~xB$<$EGFYV4Q>hh$Tst~Zy1k+R{Rduar`v#kKjkU z+k407j!XA~_0zX+y1120uZ%7OPovutxf)pf_aT0N5iXaKH>3 z$=2V%NfT6Te_3(O`h{W_u#)AlATZb_h<%5YR4l3cB(+~w6?)95C7HeRG*<&CpV4VY zDv_iqJwx6`JrlS^GIEOL?v>+d+MP*K@@sZxuD%r7+R6>Zw17zFYo!q+melmXB5~)l z(F1s`XhNlA!8TRngrGxKPRS?e!Gt2mV`pXTZ4{cVC1r&Yhn^X(grue8Z8O9EMp*eT zMO3_eFj0re=En<(6zyq0dJ-fC8p zoBOJ<#^%+D);7EmLZjD6iPivPRpC__sqj2Z{~H>JhoLe3BUT<(bh)v4C;%3(G6VEo z<{Sl5$}GVmzMPBQ6J>)H=E$?WXe(CtGrXEt=7n(6ib-1musZmce7$T_@X_L#QIOCe zEp~M;vyzMxsn_w-w literal 0 HcmV?d00001 diff --git a/Content/Input/IMC_Default.uasset b/Content/Input/IMC_Default.uasset index 7935a056d446939cca180f0934c91b12dcf6b83c..6430975147e329af1ca2f923d7cb95c43bc69d0e 100644 GIT binary patch literal 10048 zcmds7du)?c6hFW~+(2OnA`b=SHRd+9bsLP=wytQA4W!@<#Eg$}**@vorv17xUJ?w1 zAVg6FLtuXp3^Ay|Kma8Q1W8b10xE$hpaB)c2XEwE&+mJbZ)J}rbdBXC-M#nR-@WJF z-#Pcyb?@tg>;4S}gVWj&CAKEI!6{_VA%9l3QnR$_A)>yVwT#Kk&C9h8vskk-bF6u}d6uHAoUB4yw$)~{ z+H$Qb8sH9`yOl`v7^la$3>nesZVHT1cCj9xg?hc0)9>a@={985=8|o@zM>U(9-E7C zpic~{Ew$%~p0!AAlDU+cI@y+!I#IZUp44Ex#ufsr1 zXZ&T(gCG<{bu!g;<8p?>>65)mhRt0mxt(H$N*^8m_?y2l9-~&(T0K5Nld^-~!!d=l zr>giDkWuJVWRIK9CE5Ispy=~SwG(_Eukb0gWZ!a1?#SArT1AAEzn7-%K_A7mxm|Uq zF34%FdO_5dNM5h(uJF_It#*!Yiz-izn`+OV>46qD>eaJL%@fG!8OcS>GCHAx>%?7>Aus8^a%K1OniqJW}!+~q|cPO50@;6oM! zw}BWZW-3|5G+^4i)rcfRJyEWxgnnA^NFCf~=pA0+lqFZWT2I3>`z1cbwW`~6My(#V zB4#UksaR4ZTIo8uErDT718p1m@~ZY)zLW<^3mo1A(2sFY#*(Ffa{Q|WN2Sb~xrr9b z!>kFp>-gTlOh8IJGvt}FU?Te-tDJ=ym3RVvQC2C0t8ljLrv;l{>J0zDO2|KpF18;F zYo#8ypv!IccSOVS(_a-%C4?#bY3teEtezk_XGs-eoX07-8wa{ktnjgQCS^~r99eynr6*3`B={%3m{c3fi*!uB&+iwU}BPa6d%T3wRg zPfE?~mDo?s1WtMTKq_x}Azg^9?E`x6L!dKQB_?H8ceh?vNw~gw(P6!;PI%3c$Q_h}t4p$1kZT^&056xOp=r>~)6 zAndfpL}yaOWA969MiV<8mXw{lmDt2ylNhZfFBI!*2z8 z9g;zMz9F6q^g1LddcHZ_;0ST45#pYW5SJDqEIH7R*Lgo+9(uV#TwouoUJ@f}@$R18Sv%O_e zw0Apfe%Kqr=eMSX?cs1Y&u?Q3+rw4OZ10m6wuk$x+1?jXw0A4af7r9b{r622?cEHs zhrK_X&!a7D4;NfBpTD)Ry>?;tF1E0}@OTME(H>9bz6J4h_ok%1Gxb-I`W!cZXQ1#? zpiJM7(JuUchqKDKm>N$}^_G?1(CyCXp_E@M)k3?p+Dtu|uD0oF?ZAlp9;i+!7{rT2 z7x)3vPfOHwg-137BQeWS5Q1Ac1PcNJkhw9gyO8k4@1QYA!b=5W?f_3ULkvCPG72#i z=&?Z{_EyL}mDhM7!z{!+Mni`l&Ere~P(Ku@CkndY+DrIO0AgHCp4N(lV;O=Y46cWm zdqo+`*$}le<6Ond8*qXj!>4L;@w1pNauIe$0G<>@ZiDTMAixfv2IE)c>{1#Ltj;RYp z94Kp)HvD(qcu3v<-(Q$M{L4eQ&D0wzm#a?< PeKFzd-6_WZU4j1(NU*wW literal 9111 zcmeHNYitx%6u!^`wFLzPEa0PHd6c@{wrt;kY`0rn?29f4ftYsKPPZfb%I<8TfJ!is z1|iY}(HQ6t)E@?7NFbtM0z^rC!~|4Af`ST05l~*G@~-Ebox7bb+p>ms;}TCYd*`0} z%{}*i=iGbGOndOPDXo8Zbad3lF_ze$u^UuEE_|BYvh|$p-SLH<6K&_u=WQI8xF>Ze zV+3J)29_jNyoFc8TXZDOeS42UHVyqQ`B2r z9>1)&l$&Zw#CpN+kg0{SBDz}oDYqy6NnR87F8sNcn_sK(y(U@2P)gjj(?ks`f^)wnGuIU&liH^!|S1uftxoLa(?tNdf z4R=PYz&Ow+1~q^s&_vG~gt*~UOHZF?&PlHp9ire9bvYUNN;@^gTe@kdHbrt;-&}_q zC)u+-9nkS#;=BWdP9%k0(>99gdaKPVd1SrW)gZWRVx2-CJNn_*=P@4Ms%TAaugK<3 z?f4FkF|q^BlAl3_(I!i77rT&T_JI?l*DEwtdEFk-D>pIA&ePHm(iS(#Vo>>8h3)|Q zC}GqCihYoYdU*o%xJ3cQ3h;w!rA85A_MH0 zU4CcK&YWXgXJWeMDu>V{deOD8*dfwmR#BG8O0n1=G)iu-kJTIzn^?PYGlGq)t0j8_^tBzwTH!RVw|YdIBsgl6c2<;?n)np8D$Y`QG`U@} zxJ*`SC4wxl7RRaG@dP6p*zV~IHYEh^D`=4H6{{y6q+=XRzqa{YqFS*wNTgYjXfV(^ zU_mFHIOwkjq}*L6)k`7~Iqt`XC2$0~3p!%;<%HSjw!-ZaSzFwpA((UJ;+I659K;xZ z*md>^QdbGKC4yZnbK3-mv|K=Jp)a3@$YaChre-kOokM+W@5@&{8%T%%B}wgR4n&%j zo!n6MDku%{Je#rYP#dOXMgPTumlf{aau~z2%3i-_c$sX=E#T&QCA%FHJvGz$K^!UO zd6?n7`Kw`NKI?yT(3!{SPP-KaV#BAm7;9$xogSuZ{^Io>FlBD{5_bFT>dYQ6<)X{a z3O?E>^@MRZitNIR7jHe;{dlY%ujG>1@mA}rJ#CuYudhKms(fmb$$ElqiS85!}K*X*Yi5Yd(M?I8u3KWt7A()waSXU zQoEtAzf`zO(P67sm)`K?+QArOnBZsa`OlulvI(@Qp;{sebqf)X?<|`3M(2}iYlUbR zWRb01v)FuBo0TGy0;OV`egXERF1=cpO3Rl!MB_5a$JW_?&%xx>h-SW7%_FJGu>Hev zkciHqX98HJQ_G9ApXaFeSPfjl;d0f+d*SjT#N|hbD+q&ARm`B?T%~zrM1X4}oIV2F z6~bjkfV)h%tO#(I2$vlO$9XPP+fd+ag@of-i<=aH-4i!CLR?yexG53hR9Khs5e*$& zk8-M7NuqKm(gYIZ7u^X09v39EuYfl2yF=~kj>aCILky$D{)@8(^8NTg8Satk6J?!UNd%yIez1t!4!`cg--(P)f4@Z}FemDEr9x@KCy#!4jN=;ql-})~cpGd>B z_D1%iy;~vv!=4!Gzwy0j?`DWS?5&}E>igIp(l;%i)B4yRatf_IOCQ?{jh7dC(H>3Z zz6J5snTZ5mlGNm0d6(4YM_H7=j!^ewJg4MJnipc61w5DIZ&XSalMya^;yqMQF5V~x z@;tMq2TeAZp|nnlxbI2ID|MH{1%80=?FiP@VT^tq$89gNi=xnB9k06kZr$FRUS_367BZ_q-<>n=n)My^AT+Hs}<2(LqsYjQza zspO6*dCHN33JDTuNPoI;L_@T_qK@UvMd=JN0>LX7NDNaJj5HiuQHr!wg|wKaEx5Pg1}A%zs8ifU=3+SFqPwsVmbUA?n)33`nK4Y;z4x~EUZo6w zVu3u+lwIpp%J|pp|0xTEj`G{{SC3&TGWwKpi@a0@^53c)q<^t_tNr~|8AYET!8ybK W%&2n48c*iWiT`SU8viR9@c#hq`)L9I diff --git a/Content/Testing/BP_Campfire.uasset b/Content/Testing/BP_Campfire.uasset new file mode 100644 index 0000000000000000000000000000000000000000..33862bdbee373a6b4169622c72759fbf42c6422c GIT binary patch literal 71208 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 Dw24Je literal 0 HcmV?d00001 diff --git a/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset b/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset index 590d9db4cc22988c75ba366159f64ca3d4a85d01..6623a9b9c71ccaf3269f8ec2003d2f058d7bd04b 100644 GIT binary patch literal 140587 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 diff --git a/Content/UI/WBP_InteractionContextMenu.uasset b/Content/UI/WBP_InteractionContextMenu.uasset new file mode 100644 index 0000000000000000000000000000000000000000..0d0362f86051b0c76c2d048e724d0b2c359566d9 GIT binary patch literal 24322 zcmeHP349dQ{eMdWgaAU2Ln!DZg5k^^F16+kfn1OTJc=;colO>Ycb1vigmC=|CD2SZY7UKA{|`$PG_Vzq#pwyPiuL zSG}1( zTZ`-7czfaeTPELm*Zpe=FXQ>f>+i2SV`s&{^leXVzC)c(u-EeT?H*e9&C~AM@Z_!? z^FN!JO0aXRPoLaaw!8F|kyl)0Dig*`B3Q|V*X^sQ`PIaoyGCs37~^@Rj9>>_cfa;# z$+iy%|1oz*@qHCplLLjTQ_O7GpvB zjUu@RQC>5Iv2@Bya&l%D%q%M`EH9r^Ix9CnH>V_bR%t=*?EH%S+=~1HLb20e%5MD% zH9)!h6dSfyiRSuH#&A!%V2@J%B>mJ(x}o%}!q_x*|Evp3SJXVv@3wm{8(TaLcxV$$ z^(R&LV+RVY7(*Zi{_fHRG$p9A)Lf7GF?f zTZ_J41%YIh2ES@)sK*M_HEW$EO*NI}9-pNfY}bWVuR|@xe*Y4mr$w_&_M1tgt~m)H z!%#cw4Lzh8RtKxv{TCl-HWQ}aUPju2$yw)nC%rWm;8MS8nv1kmVV|LywW{T7(;9v5 zmF)5HzE!YcbEzH(XhEwa+}!Nf>V3hW=3%R{CRLB_QMlM=`UrUCo@&}! zs0xJq8d}jj^{Ovuv6_O<{Nv)GaQX`#Y^f&SW6f3OV%6}eXn5Z{uQ&0AtF;!@-BGJ) zo<_YsY_w<%D>eTj&1fDlXqVN^EB7BX@=qRXcgfg?@?^{ zN8h=Cqjy+Z1pSTL84sdQm6CZ|bfbeE+OX~6;SNB9Zdkrx3mchs>JtbmLiOzNvHyJo z0swVX(=x*3N$vU%uTLXLndVi)eyh?@L#?&CM`L%q`bHaQc*xK#M28(Z{Qb)zdKsxh za}$Jn*J5%<-N-9r+D8{H0Hb9-Gvrr0s?}!A&wliA+pd!d2w&4YWx6{I+f@a|DC#2Igq-FEB0p0g>00}-7reBlR0aFg;j;!xpwU~l~Mv|qsGIgGqQGqj*vV>j>E ze=9;+x!qw%xgnpQoISuDzTVJ0KHGRVzQ1U~v;+|6&Ryd3`?h#bF*~^ zJ{>oJZoGb7wb;mxAN&r^Re`$*--mC0`7`iXsRbzvla_fuWLs0tZG@${Al!9#Z2q4% zw9Icx>py9Qv{gas$d(G;S=r{?MjIAw{ibJU&WEb1%redNwFEihEBnXHhifd*I@)!^ zW3tj2wRa#?Rja1e)zl^%a%#V)&}xkuitt>xZPO;ioEk0AtQoa5n6Pi1cKe+mWP|Ee z(zL}kyt)1?xU~(88eqen_nZT_s?j}Rzea(ZM;q=vp^Qsa-gHN$rUx{OI>+xv{DPrr z(220H`TdmnU<(c;d&lyL%RYcyfN?E7y({@v38>f2^O#X_P=i5$VX}Mvb)6p?t<@>^ zewg&|P}o6uvW%L=FWr6s{M3aIEzJ^rHA{IoWh%!ETcNOpK+5~qkieBS69}_jb+1%g zv})b0`h9CiGCc^+&5%m2H^S<;7;M`LvQ2%;pKszJf*dc}uLnOnu^zk`n(AkZANy$* zm{_FimhH1_i1y$dsJ20E(>#lPT6>+>Yibr-_uIG2BJlHdJy0Cb!(@tOqc3|59k9XO zss&WmdEce&8Ms|gUcD^-EMQqF%gnfAAEa&2y_Tbw|JU}HwnLBx%ZS+I%)Q1$&=8?% zTl&@K@|rwSMX++%^`AmAt5u_bd)qS`al`x0x5tNTQ2{rOUYNb^`2Yr>uHZ#9*i*!Q z`RvEnAwo7%IBxWX*q#Fe??)R==z$}wBa%P zPlhFID>NFK##T=Q&R8zhG)n7mPk7gEPzx8AmHCt|N0*rS6ISY&U$w5|+;pe$ZM zvEOXfRKseu2RN4X;uB3!x5S|FpUqtQz5-{qy~t``eZ?7cCkBFLaprZxeI_1!YE&2O zUZu7=pE`^=LZofGm53Cqdcvi1V1;sz9e9)VJC@pm1HZSOZrOr7cK6=z4Tb)AM7D94 z-sD<}P8#X&6PA>$g&|^3OoadiYX3(N6c*&6FE8WmG4t!^e+3RGW?9;TgD!9-dL%O| zFCK+D_EdyC7X#>mQCltsM@^8x3mR3V9%O1U=XavwZo32O;rjVT3iB^4oNAygJ`K-O6ge4Gd_l#d z88o5xC~nNMHFLVs9JUnI->!C;3b~k{s%lDz51WclPLfp&9$9Fg(3|`ez*iD*htcFu(j7|49Hddz zOKWRx+HjCOz~4cET`{q$6JDZ_zqsXOUh|OC(DYmjdVr?~l~%o-*S4$ZeDR1XVKNst zEO$7KPk94shtjNZXClf0S`7GTt;G#&DxNT1>5A&%EvrF~VrT)q4P?BA9^gb;eKY|z z+^rql z`;ZJ5h_fXctpJpIT4Ef9Yq?0pCqlKKlUk39O8G8Rf)Q#DMa*t4*-T!dTdmyUEi_3{ z;0y>pwCbUiAbB9)AK*S_P(;%eBOIg%#%-$56f+zWAx85V!izatvqs^^P-t=4M$=K@ zofMsT4Kg`s(5#ylA%q2@cDQNb>mI+qgAi0pF~O2u$4vt}oZYbZB*+Ub@PddnUGZ6& zcHkuMqm~Vg6I3bsYJPt-WKNyBqP=VE(w%?xH*incmL3vy_kx-t|`GTVmX9oeRgp6)hO(>9{88whb? zRko__pnx81(h`AdA5q>SlackC<*o=xOv`Nf{xp z-29Jak5++?3{MJ>`ofd8>i`7v9%wv_A1L2|q;BI9?N6kNnWH)-zGeH?QHK;f{W^Wg5(xASX163uJJS{kwi^J+UkzKM*#li zz=1u{7m;iZ>P@~^dZ7n0pm#YIM3mOc6`y?@ z_irNf{^`&sc1DUtYoJ#vu7}7DChp^9z0sR5Dmm$4SrUuh`NxqSHbR_fnYh8Wi}d52 z$AR9NqTP=i`UFUB0YTPRL}2-=gC5K-Ob>LPtkoy~=y+`CA zC+@pviO`d}!ee<^A3h>u!XVnbk+f@M;FgG#OBxOk>rK7}f#{?MnIt{Xo+@x|j6qKn zb;)|8hfP@|^fjm!Il>9}#yxVtkjofKmt7L@-XbERn|3MVH>gbI2JLlq?(6(tHhg|X zRRzQ1+J%NYU!pn8;FOfql!1d&2c-@jGI(g(_z`KthNWeU9XE3Pl!?=(PM(;VIU}!V z){LC9b22k$SI;@Sw0vIGylFG*nrbT=iz?@pqY>ATp+nP#rKOJ;kzSsanN@zosq;aW zmI9uVTp6rinky;I)%g%Rjri>E;z`Qp>X($?ezUQ8Q0nM0r;Hsp>5RGRa&YU%S&fLRVx2;kNeG9cwPy^7XCXxcHlw zTzS>D?_Pb)_pbf^jvwE6(@$>R`O{l|dHWrE?!4>nd+z=9ZytL1kw<^~*yGPU``q(? zcwyg*f877-UtW9tjlcfw%>(bf|G|g<_~_8b|NI1UK~9-$$-2pvMsoE_PEJZ52)SJS z+Ub{+mfSx*cfg3^g#*=9CuihsN*P&l#rE6w4mv%5(YvFXji*ybPb}C!={<C% z#eN>q?O|NEhi-j7%x%gf@?wq-PWqslK`4&rulC+mRyQ8_aW|Z$C~i}Iew{1&(!L-+0E7}e zCoKAqvP%Vi{E0*A8_%mRUskId0XmO>NhE*jT;W$+Ony8tw_r}e?EJz!zCft(m6Xvw zDSMPwe>6<-f1j`+JfA7{eZDA>D-t5702-dYRQ{sifRbP(D^(28ebRGq>QbCq&XrI?gofNGCy}>SB^+ z6e4L#TSVnNNpMk38nbx)Fg?ffFdwxPq!wLlg20$ZdTl2C`dB%~T}75@W^0(FvYb`0 zcB-Y5_M^B_`@}Alob?w}qMRL_Hw+c+loKZw$pNof#r+{foVn;6kxemPx#UOcFv`zh zQM0E=?vU>Y2hI0x#&ToeI2EEbQ+NDfQH7k z5N+EDlawV_^1h#=N6NBlmd|-cd$BCKJmLi|dQfV&6t#CcTgNJ?7wcpX=mN4!ui4;V=1@L|l~8E`<#~i(B3c1$*~gDncFDgp z9!9O&d#Tic^u*qEFhX!&L7I)m4=3H_G*8KQ$T&<~AFGTqTFfKAUBjb$G+H=eQXU!U zdY5O6;4Uf)BwIl}FGPJX+c8osC+p2(9S+H4%f~92)KFB4MxwulMINBW*q-Y8w!mW!Qyoa`sPFe)XYU4ZL38mVKKN^V99UV4`-TVPFL4eYCA zwQTBj(SI|@Z(~7AV?s+}K%HaZsNq)}dK2m)A_sV@E!{?0w1r-`hT4*{xtQ#oQadg>&}Nq&-OL*?5#u^$ zf6@3TdxEnx-BB+2k+gf)wTz>EkLY8CEXOLHd6u-$P&60W+HvzNqNT! z{$%^H>d&xV!#5=qP^GdnWI9AI^Ujc;{YQ2r-Y! zOuno3WjpD|NiM0E`Q)i3Bn#pgtl6nRG2JQ*yFIb;?xDWJIF8Mh< zA-&3e;ib8Zmng{EE_&b6zV6vC;0gB zULM6E8A3}w2v~3gy|g=3(CSJRd-UDo zKw+e}6ms7|EXIz%#Oo{izz6NIBs#JHvYwtyF@EPJ>Fd(`)*@`x-wk(c5v6 zV?B<6qZ;;SHu!0gJ`R7tGh=*|gP{Lr-gjcW4F2$36K1kF87q=JL0%*Ql=G9gIM(}B z0YtAwLaicPh=jvVJKs+AK$FI07Y81ukZayCRVz{f1-Dwt&S{qmLTNR zd#_d;IQA{?1<$k>U!K)DC3TZ|iPR+8!P##lDCdVo|JYqw{NB9#joQmzJalk;ELaK0 zw*Pb@gO?(AArv4vTel(f7Z#R=i~tk3;7v*JL8?sgdaQzPGo|9QVwxIcE{yg_aV3abVAtb+5r({c@({g}#YZG2Z7kc#>BOHy z@WAIxkfd;NgU8u69!(>oiN~g==w1=9i6VzVGQ{sp-T5I+PgWHG3f|YP=`w#b}#3PHevZIAQFOSGw!SB8u zvr_i{`qipmE&W^e{ri6KYAo2lb7VPDU2dUJz4V16?{Yt)KBb6OzU*>B5tI$5U&`d$ z$6oW!?wzF@uf2DAX#5Skq?&=o1D43YnO(Z*oYq%s_k8CWv+A0kj6qp<*fDfDX=RX2 zG#ycw1HV_LdS^}={Z`GTHS3@J!-Jx8u8!U059o1WL!JH7tjby0^wzh*{8une%vMMmvUf!c@Sy zu5(WM;;md1s>4@i@T_9`A(j7fz~p`3T~)quRmqg?fs58-vkGaVo$)ybUcx~_Jy=Sn z9!tK-qNG9OPJKhw{99dOmqxyxTO@Fi@y4+%EEB*Ykt5@Uc!3!~8!750q7X`H;zf*a z%Ha|`7vVyrhyqZ6**y}b-bjEswaSeK;3Sk%%D1yF6`ZO+Rg|L+xRL1^TmX2QfH*5v z3mD4rlL-QIcIOF*v(k70Lj}y6WI_dA2>|qTq-l1>|8g}lw($Y!U(-clQFkOP+)om~ z9&S5K6gYW`=Xfw!%DLAXKYqwKRC)C~86RA~Wof%4&)bRX4DcE$PIn%LJDYI6*)CYK zv*9#ILq;D_XNmLd+Z|L~S!4j?+4reg|rDiS#| r-YlAOV(z7{*vm5s9CIs-{5Up3$ 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 sj`Kb5;6#X28bfXDPJAB0WCDyM3M0cQ; GetInteractionOptions(AActor* Interactor); + + /** Runs the interaction identified by ActionID (one of the ActionIDs previously returned by GetInteractionOptions). */ + UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Interaction") + void ExecuteInteraction(AActor* Interactor, FName ActionID); +}; diff --git a/Source/KingshearthLegacy/Interaction/InteractionComponent.cpp b/Source/KingshearthLegacy/Interaction/InteractionComponent.cpp new file mode 100644 index 0000000..aef11eb --- /dev/null +++ b/Source/KingshearthLegacy/Interaction/InteractionComponent.cpp @@ -0,0 +1,205 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "InteractionComponent.h" +#include "Interactable.h" +#include "InteractionLookupProvider.h" +#include "Engine/World.h" +#include "TimerManager.h" +#include "GameFramework/Actor.h" +#include "GameFramework/Pawn.h" +#include "GameFramework/Controller.h" +#include "DrawDebugHelpers.h" +#include "KingshearthLegacy.h" + +UInteractionComponent::UInteractionComponent() +{ + PrimaryComponentTick.bCanEverTick = true; +} + +void UInteractionComponent::BeginPlay() +{ + Super::BeginPlay(); + UpdateFocus(); +} + +void UInteractionComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) +{ + Super::TickComponent(DeltaTime, TickType, ThisTickFunction); + UpdateFocus(); +} + +bool UInteractionComponent::PerformInteractionTrace(FHitResult& OutHit) const +{ + AActor* Owner = GetOwner(); + UWorld* World = GetWorld(); + if (!Owner || !World) + { + return false; + } + + if (Owner->Implements()) + { + if (IInteractionLookupProvider::Execute_InteractionLookupLoop(Owner, OutHit)) + { + return true; + } + } + + FVector TraceStart = Owner->GetActorLocation(); + FRotator TraceRotation = Owner->GetActorRotation(); + + if (const APawn* OwnerPawn = Cast(Owner)) + { + if (const AController* Controller = OwnerPawn->GetController()) + { + Controller->GetPlayerViewPoint(TraceStart, TraceRotation); + } + else + { + TraceStart = OwnerPawn->GetPawnViewLocation(); + TraceRotation = OwnerPawn->GetViewRotation(); + } + } + + const FVector TraceEnd = TraceStart + TraceRotation.Vector() * InteractionRange; + + FCollisionQueryParams QueryParams; + QueryParams.AddIgnoredActor(Owner); + + const bool bHit = World->LineTraceSingleByChannel(OutHit, TraceStart, TraceEnd, InteractionTraceChannel, QueryParams); + +#if ENABLE_DRAW_DEBUG + if (bShowDebugTraces) + { + const bool bHitInteractable = bHit && OutHit.GetActor() && OutHit.GetActor()->Implements(); + DrawDebugLine(World, TraceStart, bHit ? OutHit.Location : TraceEnd, bHitInteractable ? FColor::Green : FColor::Red, false, 0.0f, 0, 1.5f); + if (bHit) + { + DrawDebugSphere(World, OutHit.Location, 8.0f, 12, bHitInteractable ? FColor::Green : FColor::Red, false, 0.0f); + } + } +#endif + + return bHit; +} + +void UInteractionComponent::UpdateFocus() +{ + FHitResult Hit; + const bool bHit = PerformInteractionTrace(Hit); + + AActor* NewFocusedActor = (bHit && Hit.GetActor() && Hit.GetActor()->Implements()) ? Hit.GetActor() : nullptr; + + if (NewFocusedActor == FocusedActor.Get()) + { + return; + } + + FocusedActor = NewFocusedActor; + FocusedOptions = NewFocusedActor ? IInteractable::Execute_GetInteractionOptions(NewFocusedActor, GetOwner()) : TArray(); + +#if ENABLE_DRAW_DEBUG + if (bShowDebugTraces) + { + UE_LOG(LogKingshearthLegacy, Log, TEXT("[Interaction] Focus changed to '%s' (%d option(s))"), *GetNameSafe(NewFocusedActor), FocusedOptions.Num()); + } +#endif + + OnFocusedInteractableChanged.Broadcast(NewFocusedActor, FocusedOptions); +} + +void UInteractionComponent::TryBeginInteract() +{ + UpdateFocus(); + + if (!FocusedActor.IsValid() || FocusedOptions.Num() == 0) + { + return; + } + + CurrentTarget = FocusedActor; + CurrentOptions = FocusedOptions; + HighlightedIndex = 0; + bHoldConsumed = false; + + if (CurrentOptions.Num() >= 2) + { + GetWorld()->GetTimerManager().SetTimer(HoldTimerHandle, this, &UInteractionComponent::HandleHoldThresholdReached, HoldThreshold, false); + } +} + +void UInteractionComponent::TryEndInteract() +{ + GetWorld()->GetTimerManager().ClearTimer(HoldTimerHandle); + + if (bContextMenuOpen) + { + ExecuteOption(HighlightedIndex); + CloseContextMenu(); + } + else if (!bHoldConsumed && CurrentOptions.Num() >= 1) + { + ExecuteOption(0); + } + + ClearCachedTarget(); +} + +void UInteractionComponent::CycleContextMenuOptions(float Direction) +{ + if (!bContextMenuOpen || CurrentOptions.Num() == 0 || FMath::IsNearlyZero(Direction)) + { + return; + } + + const int32 Step = Direction > 0.0f ? 1 : -1; + HighlightedIndex = (HighlightedIndex + Step + CurrentOptions.Num()) % CurrentOptions.Num(); + OnContextMenuHighlightChanged.Broadcast(HighlightedIndex); +} + +void UInteractionComponent::HandleHoldThresholdReached() +{ + bHoldConsumed = true; + + if (CurrentOptions.Num() == 2) + { + ExecuteOption(1); + ClearCachedTarget(); + } + else if (CurrentOptions.Num() >= 3) + { + OpenContextMenu(); + } +} + +void UInteractionComponent::OpenContextMenu() +{ + bContextMenuOpen = true; + HighlightedIndex = 0; + OnContextMenuOpened.Broadcast(CurrentOptions, HighlightedIndex); +} + +void UInteractionComponent::CloseContextMenu() +{ + bContextMenuOpen = false; + OnContextMenuClosed.Broadcast(); +} + +void UInteractionComponent::ExecuteOption(int32 Index) +{ + AActor* Target = CurrentTarget.Get(); + if (!Target || !CurrentOptions.IsValidIndex(Index)) + { + return; + } + + IInteractable::Execute_ExecuteInteraction(Target, GetOwner(), CurrentOptions[Index].ActionID); +} + +void UInteractionComponent::ClearCachedTarget() +{ + CurrentTarget = nullptr; + CurrentOptions.Reset(); + HighlightedIndex = 0; + bHoldConsumed = false; +} diff --git a/Source/KingshearthLegacy/Interaction/InteractionComponent.h b/Source/KingshearthLegacy/Interaction/InteractionComponent.h new file mode 100644 index 0000000..da7f11d --- /dev/null +++ b/Source/KingshearthLegacy/Interaction/InteractionComponent.h @@ -0,0 +1,144 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Components/ActorComponent.h" +#include "InteractionTypes.h" +#include "InteractionComponent.generated.h" + +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnFocusedInteractableChanged, AActor*, FocusedActor, const TArray&, FocusedOptions); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnContextMenuOpened, const TArray&, Options, int32, InitialHighlightedIndex); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnContextMenuHighlightChanged, int32, NewHighlightedIndex); +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnContextMenuClosed); + +/** + * Drives the whole "hold E" contextual interaction system for its owning Actor: + * every tick it look-traces for an IInteractable, distinguishes tap/hold on the + * currently-focused one, and either executes an interaction directly (1-2 options) + * or drives a Context Menu (3+ options). Interactable objects need to know nothing + * about any of this - they just implement IInteractable and return their own + * FInteractionOption data. + * + * Detection is a single line trace on the "Interactable" trace channel (see + * DefaultEngine.ini - ECC_GameTraceChannel1, default response Block), not a + * proximity sweep. That channel defaults to blocking everything, exactly like + * Visibility, so ordinary geometry occludes it correctly out of the box; to make + * only part of an actor count as its "interactable hit box", set that specific + * component's Interactable trace response and turn the rest of the mesh's off + * (Ignore) in its Collision settings - no C++ changes needed per-actor. + */ +UCLASS(ClassGroup = (Interaction), Blueprintable, meta = (BlueprintSpawnableComponent)) +class KINGSHEARTHLEGACY_API UInteractionComponent : public UActorComponent +{ + GENERATED_BODY() + +public: + + UInteractionComponent(); + + /** Fired every time the look-traced focus changes, including to/from nothing - drives an ever-present "you can interact" prompt. */ + UPROPERTY(BlueprintAssignable, Category = "Interaction") + FOnFocusedInteractableChanged OnFocusedInteractableChanged; + + /** Fired when 3+ options are available and the hold threshold is reached. */ + UPROPERTY(BlueprintAssignable, Category = "Interaction") + FOnContextMenuOpened OnContextMenuOpened; + + /** Fired whenever CycleContextMenuOptions moves the highlighted entry. */ + UPROPERTY(BlueprintAssignable, Category = "Interaction") + FOnContextMenuHighlightChanged OnContextMenuHighlightChanged; + + /** Fired when the Context Menu closes, whether by confirming a choice or losing its target. */ + UPROPERTY(BlueprintAssignable, Category = "Interaction") + FOnContextMenuClosed OnContextMenuClosed; + + /** Call from the Interact input's Started/pressed event. */ + UFUNCTION(BlueprintCallable, Category = "Interaction") + void TryBeginInteract(); + + /** Call from the Interact input's Completed/released event. */ + UFUNCTION(BlueprintCallable, Category = "Interaction") + void TryEndInteract(); + + /** Call while the Context Menu is open (e.g. from a mouse wheel axis) to move the highlighted entry. No-op otherwise. */ + UFUNCTION(BlueprintCallable, Category = "Interaction") + void CycleContextMenuOptions(float Direction); + + UFUNCTION(BlueprintPure, Category = "Interaction") + bool IsContextMenuOpen() const { return bContextMenuOpen; } + + /** The actor currently under the look-trace, or nullptr if none. */ + UFUNCTION(BlueprintPure, Category = "Interaction") + AActor* GetFocusedActor() const { return FocusedActor.Get(); } + +protected: + + virtual void BeginPlay() override; + virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; + + /** Max distance of the look trace. */ + UPROPERTY(EditAnywhere, Category = "Interaction") + float InteractionRange = 300.0f; + + /** Trace channel the look trace queries - see the "Interactable" channel set up in DefaultEngine.ini. */ + UPROPERTY(EditAnywhere, Category = "Interaction") + TEnumAsByte InteractionTraceChannel = ECC_GameTraceChannel1; + + /** Seconds the Interact input must be held before it counts as a hold rather than a tap. */ + UPROPERTY(EditAnywhere, Category = "Interaction") + float HoldThreshold = 0.4f; + + /** Draws the look trace every tick (green = hit an IInteractable, red = blocked/missed) and logs focus changes. */ + UPROPERTY(EditAnywhere, Category = "Interaction|Debug") + bool bShowDebugTraces = false; + + /** + * Finds the look-trace target. If the owning Actor implements IInteractionLookupProvider, + * defers to its InteractionLookupLoop first - implement that interface directly on your + * Character/Actor to fully replace how a target is found (VR hand ray, a cone check, ...) + * without touching the tap/hold/menu logic below. Falls back to a line trace from the + * controller's view point along its view direction, InteractionRange long, on + * InteractionTraceChannel, whenever the interface isn't implemented or returns false. + */ + bool PerformInteractionTrace(FHitResult& OutHit) const; + + /** Re-runs PerformInteractionTrace, updates FocusedActor/FocusedOptions, and broadcasts OnFocusedInteractableChanged if either changed. */ + void UpdateFocus(); + + /** Bound to the hold timer; only ever runs when CurrentOptions.Num() >= 2. */ + void HandleHoldThresholdReached(); + + void OpenContextMenu(); + void CloseContextMenu(); + + /** Executes CurrentOptions[Index] against CurrentTarget, if both are still valid. */ + void ExecuteOption(int32 Index); + + void ClearCachedTarget(); + + /** Actor currently under the look trace and implementing IInteractable, updated every tick by UpdateFocus. */ + UPROPERTY() + TWeakObjectPtr FocusedActor; + + UPROPERTY() + TArray FocusedOptions; + + /** Snapshot of FocusedActor/FocusedOptions taken when Interact was pressed - what TryEndInteract actually acts on. */ + UPROPERTY() + TWeakObjectPtr CurrentTarget; + + UPROPERTY() + TArray CurrentOptions; + + UPROPERTY() + int32 HighlightedIndex = 0; + + UPROPERTY() + bool bContextMenuOpen = false; + + /** Set the moment the hold timer fires, so TryEndInteract knows not to also run the tap path. */ + bool bHoldConsumed = false; + + FTimerHandle HoldTimerHandle; +}; diff --git a/Source/KingshearthLegacy/Interaction/InteractionLookupProvider.h b/Source/KingshearthLegacy/Interaction/InteractionLookupProvider.h new file mode 100644 index 0000000..86fe030 --- /dev/null +++ b/Source/KingshearthLegacy/Interaction/InteractionLookupProvider.h @@ -0,0 +1,33 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "UObject/Interface.h" +#include "InteractionLookupProvider.generated.h" + +UINTERFACE(MinimalAPI, Blueprintable) +class UInteractionLookupProvider : public UInterface +{ + GENERATED_BODY() +}; + +/** + * Optional interface for the Actor a UInteractionComponent is attached to (e.g. + * BP_ThirdPersonCharacter). Implement it there - Class Settings > Implement Interface, + * just like IInteractable on an interactable object - and override InteractionLookupLoop + * in that Actor's own Event Graph to replace how its "look at" target is found (a + * different origin, a cone check, a VR hand-ray, ...). No separate component subclass + * or class-swapping needed. If not implemented, or the implementation returns false, + * UInteractionComponent falls back to its own default camera-forward line trace. + */ +class IInteractionLookupProvider +{ + GENERATED_BODY() + +public: + + /** Return true and fill OutHit with what was found; return false to fall back to the component's default trace. */ + UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Interaction") + bool InteractionLookupLoop(FHitResult& OutHit); +}; diff --git a/Source/KingshearthLegacy/Interaction/InteractionTypes.h b/Source/KingshearthLegacy/Interaction/InteractionTypes.h new file mode 100644 index 0000000..5765a30 --- /dev/null +++ b/Source/KingshearthLegacy/Interaction/InteractionTypes.h @@ -0,0 +1,25 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "InteractionTypes.generated.h" + +/** + * A single interaction an IInteractable currently offers. Order matters: + * index 0 is always the primary (tap) action, index 1 (if present) is the + * secondary (hold) action, and 3+ entries populate the Context Menu in order. + */ +USTRUCT(BlueprintType) +struct FInteractionOption +{ + GENERATED_BODY() + + /** Shown to the player (Context Menu entry, interaction prompt, ...) */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interaction") + FText DisplayName; + + /** Opaque id passed back to IInteractable::ExecuteInteraction - the object interprets it itself */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interaction") + FName ActionID; +}; diff --git a/Source/KingshearthLegacy/KingshearthLegacy.Build.cs b/Source/KingshearthLegacy/KingshearthLegacy.Build.cs index d5407f7..136e06a 100644 --- a/Source/KingshearthLegacy/KingshearthLegacy.Build.cs +++ b/Source/KingshearthLegacy/KingshearthLegacy.Build.cs @@ -30,6 +30,7 @@ public class KingshearthLegacy : ModuleRules "KingshearthLegacy", "KingshearthLegacy/AttributeSets", "KingshearthLegacy/GameplayEffects", + "KingshearthLegacy/Interaction", "KingshearthLegacy/UI/Menu", "KingshearthLegacy/Variant_Platforming", "KingshearthLegacy/Variant_Platforming/Animation", diff --git a/Source/KingshearthLegacy/KingshearthLegacyCharacter.cpp b/Source/KingshearthLegacy/KingshearthLegacyCharacter.cpp index 87a2777..7589b26 100644 --- a/Source/KingshearthLegacy/KingshearthLegacyCharacter.cpp +++ b/Source/KingshearthLegacy/KingshearthLegacyCharacter.cpp @@ -19,6 +19,7 @@ #include "GE_HealthDebuff.h" #include "GE_StaminaFatiguePenalty.h" #include "KingshearthLegacyGameplayTags.h" +#include "Interaction/InteractionComponent.h" AKingshearthLegacyCharacter::AKingshearthLegacyCharacter() { @@ -64,6 +65,8 @@ AKingshearthLegacyCharacter::AKingshearthLegacyCharacter() StaminaAttributeSet = CreateDefaultSubobject(TEXT("StaminaAttributeSet")); AbilitySystemComponent->AddAttributeSetSubobject(StaminaAttributeSet.Get()); + + InteractionComponent = CreateDefaultSubobject(TEXT("InteractionComponent")); } void AKingshearthLegacyCharacter::BeginPlay() @@ -276,6 +279,11 @@ void AKingshearthLegacyCharacter::SetupPlayerInputComponent(UInputComponent* Pla // Sprinting EnhancedInputComponent->BindAction(SprintAction, ETriggerEvent::Started, this, &AKingshearthLegacyCharacter::StartSprint); EnhancedInputComponent->BindAction(SprintAction, ETriggerEvent::Completed, this, &AKingshearthLegacyCharacter::StopSprint); + + // Interacting + EnhancedInputComponent->BindAction(InteractAction, ETriggerEvent::Started, this, &AKingshearthLegacyCharacter::DoInteractStart); + EnhancedInputComponent->BindAction(InteractAction, ETriggerEvent::Completed, this, &AKingshearthLegacyCharacter::DoInteractEnd); + EnhancedInputComponent->BindAction(InteractCycleAction, ETriggerEvent::Triggered, this, &AKingshearthLegacyCharacter::InteractCycle); } else { @@ -343,6 +351,35 @@ void AKingshearthLegacyCharacter::DoJumpEnd() StopJumping(); } +void AKingshearthLegacyCharacter::DoInteractStart() +{ + if (InteractionComponent) + { + InteractionComponent->TryBeginInteract(); + } +} + +void AKingshearthLegacyCharacter::DoInteractEnd() +{ + if (InteractionComponent) + { + InteractionComponent->TryEndInteract(); + } +} + +void AKingshearthLegacyCharacter::DoInteractCycle(float Direction) +{ + if (InteractionComponent) + { + InteractionComponent->CycleContextMenuOptions(Direction); + } +} + +void AKingshearthLegacyCharacter::InteractCycle(const FInputActionValue& Value) +{ + DoInteractCycle(Value.Get()); +} + void AKingshearthLegacyCharacter::Jump() { const bool bCouldJump = CanJump(); diff --git a/Source/KingshearthLegacy/KingshearthLegacyCharacter.h b/Source/KingshearthLegacy/KingshearthLegacyCharacter.h index 085953c..ce1e31b 100644 --- a/Source/KingshearthLegacy/KingshearthLegacyCharacter.h +++ b/Source/KingshearthLegacy/KingshearthLegacyCharacter.h @@ -15,6 +15,7 @@ class UInputAction; class UAbilitySystemComponent; class UHealthAttributeSet; class UStaminaAttributeSet; +class UInteractionComponent; struct FInputActionValue; DECLARE_LOG_CATEGORY_EXTERN(LogTemplateCharacter, Log, All); @@ -58,6 +59,14 @@ protected: UPROPERTY(EditAnywhere, Category="Input") UInputAction* SprintAction; + /** Interact Input Action - Started begins a tap/hold, Completed resolves it */ + UPROPERTY(EditAnywhere, Category="Input") + UInputAction* InteractAction; + + /** Cycles the Context Menu's highlighted option while it is open (e.g. mouse wheel axis) */ + UPROPERTY(EditAnywhere, Category="Input") + UInputAction* InteractCycleAction; + /** Walk speed is multiplied by this while sprinting */ UPROPERTY(EditAnywhere, Category="Sprint") float SprintSpeedMultiplier = 1.6f; @@ -120,6 +129,9 @@ protected: /** Called when the sprint input is released */ void StopSprint(); + /** Called for Context Menu cycling input (e.g. mouse wheel axis) */ + void InteractCycle(const FInputActionValue& Value); + /** Advances the regen delay/ramp curve and applies Stamina/Fatigue regen for this frame. */ void TickStaminaRegen(float DeltaSeconds); @@ -144,6 +156,10 @@ protected: /** Currently-applied GE_HealthDebuff instance, if any - reapplied/removed wholesale by SetHealthDebuff so it behaves like the old "set to X" API instead of stacking. */ FActiveGameplayEffectHandle HealthDebuffEffectHandle; + /** Drives the contextual "hold E" interaction system - see UInteractionComponent. */ + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Interaction", meta = (AllowPrivateAccess = "true")) + TObjectPtr InteractionComponent; + public: //~ Begin IAbilitySystemInterface @@ -219,6 +235,21 @@ public: UFUNCTION(BlueprintCallable, Category="Input") virtual void DoJumpEnd(); + /** Handles interact pressed inputs from either controls or UI interfaces - begins a tap/hold */ + UFUNCTION(BlueprintCallable, Category="Input") + virtual void DoInteractStart(); + + /** Handles interact released inputs from either controls or UI interfaces - resolves the tap/hold */ + UFUNCTION(BlueprintCallable, Category="Input") + virtual void DoInteractEnd(); + + /** Handles Context Menu cycling inputs (e.g. mouse wheel) from either controls or UI interfaces */ + UFUNCTION(BlueprintCallable, Category="Input") + virtual void DoInteractCycle(float Direction); + + /** Returns InteractionComponent subobject **/ + FORCEINLINE UInteractionComponent* GetInteractionComponent() const { return InteractionComponent; } + public: /** Returns CameraBoom subobject **/ diff --git a/Source/KingshearthLegacy/KingshearthLegacyPlayerController.cpp b/Source/KingshearthLegacy/KingshearthLegacyPlayerController.cpp index f72a280..603d216 100644 --- a/Source/KingshearthLegacy/KingshearthLegacyPlayerController.cpp +++ b/Source/KingshearthLegacy/KingshearthLegacyPlayerController.cpp @@ -102,8 +102,9 @@ void AKingshearthLegacyPlayerController::OnPossess(APawn* InPawn) const AKingshearthLegacyCharacter* PossessedCharacter = Cast(InPawn); UHealthAttributeSet* PossessedHealthAttributeSet = PossessedCharacter ? PossessedCharacter->GetHealthAttributeSet() : nullptr; UStaminaAttributeSet* PossessedStaminaAttributeSet = PossessedCharacter ? PossessedCharacter->GetStaminaAttributeSet() : nullptr; + UInteractionComponent* PossessedInteractionComponent = PossessedCharacter ? PossessedCharacter->GetInteractionComponent() : nullptr; - PlayerHUD->InitializeHUD(PossessedHealthAttributeSet, PossessedStaminaAttributeSet); + PlayerHUD->InitializeHUD(PossessedHealthAttributeSet, PossessedStaminaAttributeSet, PossessedInteractionComponent); } } diff --git a/Source/KingshearthLegacy/UI/InteractionContextMenuWidget.cpp b/Source/KingshearthLegacy/UI/InteractionContextMenuWidget.cpp new file mode 100644 index 0000000..d515f73 --- /dev/null +++ b/Source/KingshearthLegacy/UI/InteractionContextMenuWidget.cpp @@ -0,0 +1,110 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "InteractionContextMenuWidget.h" +#include "Interaction/InteractionComponent.h" +#include "Components/VerticalBox.h" +#include "Components/TextBlock.h" +#include "Blueprint/WidgetTree.h" +#include "KingshearthLegacy.h" + +void UInteractionContextMenuWidget::NativeConstruct() +{ + Super::NativeConstruct(); + + if (PromptText) + { + PromptText->SetVisibility(ESlateVisibility::Collapsed); + } + + if (OptionsBox) + { + OptionsBox->SetVisibility(ESlateVisibility::Collapsed); + } +} + +void UInteractionContextMenuWidget::InitializeInteraction(UInteractionComponent* InInteractionComponent) +{ + if (InteractionComponent) + { + InteractionComponent->OnFocusedInteractableChanged.RemoveDynamic(this, &UInteractionContextMenuWidget::HandleFocusedInteractableChanged); + InteractionComponent->OnContextMenuOpened.RemoveDynamic(this, &UInteractionContextMenuWidget::HandleContextMenuOpened); + InteractionComponent->OnContextMenuHighlightChanged.RemoveDynamic(this, &UInteractionContextMenuWidget::HandleContextMenuHighlightChanged); + InteractionComponent->OnContextMenuClosed.RemoveDynamic(this, &UInteractionContextMenuWidget::HandleContextMenuClosed); + } + + InteractionComponent = InInteractionComponent; + + if (InteractionComponent) + { + InteractionComponent->OnFocusedInteractableChanged.AddDynamic(this, &UInteractionContextMenuWidget::HandleFocusedInteractableChanged); + InteractionComponent->OnContextMenuOpened.AddDynamic(this, &UInteractionContextMenuWidget::HandleContextMenuOpened); + InteractionComponent->OnContextMenuHighlightChanged.AddDynamic(this, &UInteractionContextMenuWidget::HandleContextMenuHighlightChanged); + InteractionComponent->OnContextMenuClosed.AddDynamic(this, &UInteractionContextMenuWidget::HandleContextMenuClosed); + } +} + +void UInteractionContextMenuWidget::HandleFocusedInteractableChanged(AActor* FocusedActor, const TArray& Options) +{ + if (!PromptText) + { + return; + } + + if (FocusedActor && Options.Num() > 0) + { + PromptText->SetText(Options[0].DisplayName); + PromptText->SetVisibility(ESlateVisibility::HitTestInvisible); + } + else + { + PromptText->SetVisibility(ESlateVisibility::Collapsed); + } +} + +void UInteractionContextMenuWidget::RefreshOptions(const TArray& Options, int32 HighlightedIndex) +{ + if (!OptionsBox) + { + return; + } + + OptionsBox->ClearChildren(); + + for (int32 Index = 0; Index < Options.Num(); ++Index) + { + UTextBlock* Row = WidgetTree->ConstructWidget(UTextBlock::StaticClass()); + Row->SetText(Options[Index].DisplayName); + Row->SetColorAndOpacity(FSlateColor(Index == HighlightedIndex ? HighlightedColor : NormalColor)); + OptionsBox->AddChildToVerticalBox(Row); + } +} + +void UInteractionContextMenuWidget::HandleContextMenuOpened(const TArray& Options, int32 InitialHighlightedIndex) +{ + UE_LOG(LogKingshearthLegacy, Log, TEXT("[Interaction] Widget received OnContextMenuOpened: %d option(s), OptionsBox bound: %s"), + Options.Num(), OptionsBox ? TEXT("yes") : TEXT("NO - add a VerticalBox named exactly \"OptionsBox\" in this widget's Designer tree")); + + CachedOptions = Options; + RefreshOptions(CachedOptions, InitialHighlightedIndex); + + if (OptionsBox) + { + OptionsBox->SetVisibility(ESlateVisibility::HitTestInvisible); + } +} + +void UInteractionContextMenuWidget::HandleContextMenuHighlightChanged(int32 NewHighlightedIndex) +{ + RefreshOptions(CachedOptions, NewHighlightedIndex); +} + +void UInteractionContextMenuWidget::HandleContextMenuClosed() +{ + CachedOptions.Reset(); + + if (OptionsBox) + { + OptionsBox->ClearChildren(); + OptionsBox->SetVisibility(ESlateVisibility::Collapsed); + } +} diff --git a/Source/KingshearthLegacy/UI/InteractionContextMenuWidget.h b/Source/KingshearthLegacy/UI/InteractionContextMenuWidget.h new file mode 100644 index 0000000..99ad1c1 --- /dev/null +++ b/Source/KingshearthLegacy/UI/InteractionContextMenuWidget.h @@ -0,0 +1,76 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "Interaction/InteractionTypes.h" +#include "InteractionContextMenuWidget.generated.h" + +class UInteractionComponent; +class UVerticalBox; +class UTextBlock; + +/** + * One widget covering both interaction UI needs so you only wire up a single thing + * in WBP_PlayerHUD: an ever-present "you're looking at something" prompt (PromptText, + * driven by OnFocusedInteractableChanged - shows any time the look trace is on an + * IInteractable, regardless of option count or whether Interact is even pressed) and + * the Context Menu shown while holding Interact on a 3+-option IInteractable + * (OptionsBox, driven by OnContextMenuOpened/HighlightChanged/Closed). Both bound + * widgets are optional and toggle their own visibility independently - add whichever + * you want in the Designer, named exactly as below; all population/highlight/show-hide + * logic lives here in C++. + */ +UCLASS(abstract) +class UInteractionContextMenuWidget : public UUserWidget +{ + GENERATED_BODY() + +public: + + /** Call once, right after creation (see UPlayerHUDWidget::InitializeHUD), to bind to InInteractionComponent's delegates. */ + UFUNCTION(BlueprintCallable, Category = "Interaction") + void InitializeInteraction(UInteractionComponent* InInteractionComponent); + +protected: + + virtual void NativeConstruct() override; + + /** Rebuilds OptionsBox's rows from Options, styling HighlightedIndex differently from the rest. */ + void RefreshOptions(const TArray& Options, int32 HighlightedIndex); + + UFUNCTION() + void HandleFocusedInteractableChanged(AActor* FocusedActor, const TArray& Options); + + UFUNCTION() + void HandleContextMenuOpened(const TArray& Options, int32 InitialHighlightedIndex); + + UFUNCTION() + void HandleContextMenuHighlightChanged(int32 NewHighlightedIndex); + + UFUNCTION() + void HandleContextMenuClosed(); + + /** Text color used for the highlighted row. */ + UPROPERTY(EditAnywhere, Category = "Interaction|Style") + FLinearColor HighlightedColor = FLinearColor(1.0f, 0.85f, 0.3f, 1.0f); + + /** Text color used for every other row. */ + UPROPERTY(EditAnywhere, Category = "Interaction|Style") + FLinearColor NormalColor = FLinearColor::White; + + /** Ever-present prompt - shows the primary option's DisplayName any time the look trace is on an IInteractable. Optional, place it in the WBP subclass's Designer tree. */ + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr PromptText; + + /** Container the Context Menu's option rows are built into. Optional, place it in the WBP subclass's Designer tree. */ + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr OptionsBox; + + UPROPERTY() + TArray CachedOptions; + + UPROPERTY() + TObjectPtr InteractionComponent; +}; diff --git a/Source/KingshearthLegacy/UI/PlayerHUDWidget.cpp b/Source/KingshearthLegacy/UI/PlayerHUDWidget.cpp index 5e62f88..0056a7f 100644 --- a/Source/KingshearthLegacy/UI/PlayerHUDWidget.cpp +++ b/Source/KingshearthLegacy/UI/PlayerHUDWidget.cpp @@ -1,8 +1,10 @@ #include "PlayerHUDWidget.h" #include "UI/HealthBarWidget.h" #include "UI/StaminaBarWidget.h" +#include "UI/InteractionContextMenuWidget.h" +#include "KingshearthLegacy.h" -void UPlayerHUDWidget::InitializeHUD(UHealthAttributeSet* InHealthAttributeSet, UStaminaAttributeSet* InStaminaAttributeSet) +void UPlayerHUDWidget::InitializeHUD(UHealthAttributeSet* InHealthAttributeSet, UStaminaAttributeSet* InStaminaAttributeSet, UInteractionComponent* InInteractionComponent) { if (HealthBar) { @@ -13,4 +15,11 @@ void UPlayerHUDWidget::InitializeHUD(UHealthAttributeSet* InHealthAttributeSet, { StaminaBar->InitializeStaminaBar(InStaminaAttributeSet); } + + UE_LOG(LogKingshearthLegacy, Log, TEXT("[Interaction] PlayerHUD ContextMenuWidget bound: %s"), ContextMenuWidget ? TEXT("yes") : TEXT("NO - check the widget in ContextMenuWidget is named exactly \"ContextMenuWidget\" in WBP_PlayerHUD's Designer tree")); + + if (ContextMenuWidget) + { + ContextMenuWidget->InitializeInteraction(InInteractionComponent); + } } diff --git a/Source/KingshearthLegacy/UI/PlayerHUDWidget.h b/Source/KingshearthLegacy/UI/PlayerHUDWidget.h index 636915e..ad6b81d 100644 --- a/Source/KingshearthLegacy/UI/PlayerHUDWidget.h +++ b/Source/KingshearthLegacy/UI/PlayerHUDWidget.h @@ -8,6 +8,8 @@ class UHealthBarWidget; class UStaminaBarWidget; class UHealthAttributeSet; class UStaminaAttributeSet; +class UInteractionComponent; +class UInteractionContextMenuWidget; /** * Top-level player HUD. Owns a health bar and a stamina bar and forwards @@ -21,7 +23,7 @@ class UPlayerHUDWidget : public UUserWidget public: UFUNCTION(BlueprintCallable, Category = "HUD") - void InitializeHUD(UHealthAttributeSet* InHealthAttributeSet, UStaminaAttributeSet* InStaminaAttributeSet); + void InitializeHUD(UHealthAttributeSet* InHealthAttributeSet, UStaminaAttributeSet* InStaminaAttributeSet, UInteractionComponent* InInteractionComponent); protected: UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) @@ -29,4 +31,7 @@ protected: UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) TObjectPtr StaminaBar; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr ContextMenuWidget; };