From 696cdd1d1195e9020faa34ae34f398d82907c0ac Mon Sep 17 00:00:00 2001 From: wyatt Date: Mon, 13 Oct 2025 11:57:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8B=90=E7=8B=B8=E6=8A=80=E8=83=BD=E4=B8=B4?= =?UTF-8?q?=E6=97=B6=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Content/Blueprint/Bp_BusyBonfire.uasset | Bin 26740 -> 0 bytes .../BP_BusyLevelPlayerController.uasset | Bin 21719 -> 21929 bytes .../GameMode/BP_BusyLevelPlayerState.uasset | Bin 21506 -> 21506 bytes Content/Data/BusyGameAsset.uasset | Bin 4452 -> 4473 bytes .../Data/Input/Level/IA_UltimateSkill.uasset | Bin 0 -> 1415 bytes .../Input/Level/IMC_PlayerInputContext.uasset | Bin 7780 -> 9051 bytes Content/Data/Level/LevelRoleBaseConfig.uasset | Bin 0 -> 2771 bytes Content/Lua/Level/Actor/LevelFoxRole.lua | 31 ++++++++ Content/Lua/Level/Actor/LevelRabbitRole.lua | 2 + Content/Resource/Spine/Role/Fox/Fox.uasset | Bin 3287 -> 3287 bytes .../Resource/Spine/Role/Fox/FoxData.uasset | Bin 4752 -> 6732 bytes .../Spine/Role/Fox/Textures/Fox.uasset | Bin 122616 -> 122616 bytes Source/BusyRabbit/Private/BusyBonfire.cpp | 21 ------ Source/BusyRabbit/Private/BusyCharacter.cpp | 8 --- .../Private/BusyLevelLogicSubSystem.cpp | 44 ------------ .../Private/Level/Actor/BusyPawnBase.cpp | 34 +++++++-- .../Private/Level/Actor/BusyPlayerRole.cpp | 17 ++++- .../Actor/Components/BusyPawnMovement.cpp | 68 +++++++++++++++--- .../Private/Level/LevelPlayerController.cpp | 13 ++++ Source/BusyRabbit/Public/BusyBonfire.h | 29 -------- Source/BusyRabbit/Public/BusyCharacter.h | 26 ------- .../Public/BusyLevelLogicSubSystem.h | 53 -------------- .../Public/Level/Actor/BusyPawnBase.h | 45 +++++++++++- .../Public/Level/Actor/BusyPlayerRole.h | 32 +++++++++ .../Level/Actor/Components/BusyPawnMovement.h | 46 ++++++++++++ Source/BusyRabbit/Public/Role/BusyRole.h | 2 +- .../BusyRabbit/Public/Tables/BusyPawnConfig.h | 46 ++++++++++++ 27 files changed, 319 insertions(+), 198 deletions(-) delete mode 100644 Content/Blueprint/Bp_BusyBonfire.uasset create mode 100644 Content/Data/Input/Level/IA_UltimateSkill.uasset create mode 100644 Content/Data/Level/LevelRoleBaseConfig.uasset delete mode 100644 Source/BusyRabbit/Private/BusyBonfire.cpp delete mode 100644 Source/BusyRabbit/Private/BusyCharacter.cpp delete mode 100644 Source/BusyRabbit/Private/BusyLevelLogicSubSystem.cpp delete mode 100644 Source/BusyRabbit/Public/BusyBonfire.h delete mode 100644 Source/BusyRabbit/Public/BusyCharacter.h delete mode 100644 Source/BusyRabbit/Public/BusyLevelLogicSubSystem.h create mode 100644 Source/BusyRabbit/Public/Tables/BusyPawnConfig.h diff --git a/Content/Blueprint/Bp_BusyBonfire.uasset b/Content/Blueprint/Bp_BusyBonfire.uasset deleted file mode 100644 index c4c8d7748d59376bd31f6520501bd55ee84e6129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26740 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 LO~vww0{s644b5%* diff --git a/Content/Blueprint/Level/GameMode/BP_BusyLevelPlayerController.uasset b/Content/Blueprint/Level/GameMode/BP_BusyLevelPlayerController.uasset index cf8f75ccf0335a72e21e0490abd15b1aa0b597fa..b55e2a41345739e3a9b04e0402b180828b05548d 100644 GIT binary patch delta 1361 zcmai!T}YEr7{{Npoat{Fey>HMgsVLAuh2tj5( zcZnC$m2_1vDo6y~6bMBTSr-wZmVGHnb(4@i=iOQOy3hmfp6C4j|K~a9eaAVkhuQF5 z);FW|=L6W$r!(VmjWq!v3W5NzR|Bw);y^s+I5X{xQlkMtPjS=;kVf$x%{>+XuHC0N zPR}GgGquyf_s8xO^bNTm_qUWa;vh4zAdWKU_R?g4HW&GqjU^g<4^_lET=GuM;`$U? z0bD-6x2f7+=WO))e2!Ybx1|~WynSIstL`_;!fkQMM#njo3G_X&ujH+9FPV80H7Hss zpQ<;$k$-IH)#&R;=Hn}^-HE-1WW6T@-~*9HPM8OaH)g7Mo60#u&UO`nuHw5aw2$Pw_#a=jVC^FEzvBYnO@l?>ArKE${Hw4IoJh!2@za7^ z64m^y;0-JIdCpZGsv`&!wc}LVCHC-*w$+XEiTgDEe9S3I#X@7L=I23NFsI^((Js{s zUoORXev)X^6p(Di-AO5XbOQaNHX$)|-h5&bLvcjpt%XY2V3JL$TqfTWdB!0{)=M_Y zPlz|>)fN1d)0hm&0U^`zS7c9=qQb6XrFxF!HX`BbTVj9xC5n7zvrW1hDgfRgT2!Z( z(z{#nDal?TXH(n}&dZhR{U)2#9Y%By@k7jqvmAR&RZ@V`@Vc{#0N@T)ZZRL$9C0a4 zZkV4$J)~O*pT(u1-;y3ZK@)erJZMSCh~d{(+2T^CJeC(=>?A&ST*EPkNy%<2zh&}+ t16fQvN8dXaALW^}-zlq5vU$o9c_yb8=ya@7&MukKvJ<#aoP+lAfxn$1J01W4 delta 1138 zcmah|TS!z<6g}rQlQSdEO!K(&N+l8Pg+bY4LNmuH6?|Yb`6AKMjC9BxVPZ@X?WeCu z_oo%u0~sT1xMY7#_0y-&PteamNYl%-eno7bGslaAQ3vkcYp=ETzUN-fi9MwsV)X8k zHc>%H8I+q&SqLE-GJ^4_M92=z$G}Suo|rchl7khs5t55JY9b`=!W!{9X04l$J@|Ay zUVOej_p1KMk+}=8zJV~@r%pNo3p7wLjq;-)`nRkNT3W3MX6zkJ+PF8Awmq-__G^D>?-bmS$n2-}@=uEhhNU+C6C#jhEv6AT#A6GO zV?56CxX5F*jd><(tT17->7!!GGOU;!uwW~c5)}}y%Yz1&4kUYxR8a+Q?CCOWFO@F~ zzZdf_fuB{ujJpWkyQO6^CChT35OkPd2>ig$P3PoNxp|8m7dUW+%WqL0M2a10*4@lb zKQ7H#E+2NJWxN(#?$vOWwAXU^AeHesjeZfe9YE`kY^ zuLyY`=KTV<1bFvvly9oChU^k}JOE{`c6k`f&G)8+G?ngr@2ZiaK|aLien<6S@c2x2 zyovMTK;dR!CAUBs^`r`Q>}EHuZR9DT)1#EOLS?N3?)my5<^D;1~K>7cHY!G1QgJ5wWo&4;_ zA#;Xf9#ccRt7=mpM^8MKqv#A2cNK)Fg^~Y(;1y7u11R7*IhgUtW;>?ujEt(2d08Yy zg7R}xof3;vo%8e3GSeB{OXhEqpB&2~G1-sh-R4l%U`81cpf;b>veXzu0@c_wpnsc&AzmBXa= z2dE6{9x$Z@AQL7}U=z{%4738o0f&}nNosB}!xx~C5VBBEYH@yPQF1E7 z*U7Q`c8uR9&*7I4{RvdX2~-8ra`W*`YN%&D}v5)@?&|A1P#fC6x5F#rYr3m}UGrIsfar7--R+#>J*0Odx%Z~y=R delta 617 zcmeyV^h9Zb0pr7oh6YS!?33jL)omDnpp2b?feA>9@iH)|K>6Q*Y!LVdq(PXEkAY#u zOq&IAw|o89X>IuP(>Lew#A7*%RzPtBL5Nxy`5y=#0>wFi0w$A#8ILf^Pj+OI;&sZ; zOUo=uWjLaL{)Hk)WU~>|9mdVpEbNSuAS0X#;+;y1E1}Bbof-P#j~Q-uVhv{8yphd~ zaq@X~0me6zIXL8bHKA7B2il}GnTJD~QFF2ehdQq|RQxqiTy^puc4@fCE1-x9ipWc# zh!#kM6Q=9M|~jM|eWIMsoq11G|~r$DtDAhkg831HbBVDbUyYDVtOJzSHS)P4h% zKy3$8%1{nBkmd!2E)YEAn_S2%Ho1Y9WpX^P1}7&}_}AnKyvj`P1SW6g?P6sD2HeHT zE_|~X?@zwZXTkLWqLqPxYqBE0xX34Qp-|vJWEn@iy1yo_TiUg{4zO>-%k50 zP#P4J9{IVcIf;2GAQdjD#mNjmfD)WQ3An(|$>;gy8NW|{&o9aP4dnL8a|N_*gJHI@ r02!e8gT)z81z0~Qf`amMQW^dN1-O6;;0|HI diff --git a/Content/Data/Input/Level/IA_UltimateSkill.uasset b/Content/Data/Input/Level/IA_UltimateSkill.uasset new file mode 100644 index 0000000000000000000000000000000000000000..3ae8d1f1c669d65532769fcb756819c0be38ae75 GIT binary patch literal 1415 zcmX@utTpe)|Ns9Jm>C$jm>3wo0BI0l1md?D8=ky$n(~GFmf<4D-EMjsKrt3p1_ltV z@1B^Os_&9mlBn;QS5R7_?~_`VnxpUO7$2Hbl9`)Wk{X zha!+RG<7s~Gce)!rlUB$M5$#a2Z)=@c5mN_81LFRxQ!U{Brg+cX} z9Fq``r>!08YN{QSnv>wqmdD}U!iU1AO4^A%1EGW@;&M!(0^-s!5O)g>h;i+pUh9u{jmywv4oSFiTJBF+4 zPQPIT$~xyH78f&=lvhj?1oANAGCE!41`kLA6yc7^AlEVoNhI)a0>yk&OAyXtf?1FZ0cB!PpmYaK_Y6RzP|QMB408v%8ZM|J zP&#sgvISv*1>_@}50!>f=w`tsfDD*@$YRKBkh$m)jWtDZ0z>TwG~_^g6#AI=7O?RNJ_Lt(utIs^}w>~1kF@u00m%JVoqslNM%7P11M=Z<>v$Q zdLFnqfdwy67!N=WWJRDlf+g2MV39ig+tLO->mwIIzLG&RyzHJuAj_%!ng&pDka_@E CR&isg)kO0ox-D1@TI zN8N8A1nz0_(5OiXA>;~!AC&zpaA~eOmAE7%9xaQX1hfMjA*T{?fzpST>HuneZfo;Y z&wTX@+pVjvwPjURTdQxr*mL^s#>&(6iP3K~GtE;nv|8hMj|7*KruZ+LD72w03}rjV z{LGRnmNwucBQIyi#~RdLhH=AvjbJQqt_y_xoh_mEnoIsbfbav{R~)0(f>}vrG}_o< zoPkB10PC9DDRhF$uI}DYZI8dBqrIoLrJFo(eP|iG8Dn6~I*DJ?=MS}AJa;+Jjy@qO zm`iap*Riw*ylgs?5B2O($P_XnVqT1$gy)=Avy5XLfoWC{y(RPxE4+M#=T&$G3a=1? zT7kZe{O@bNL zh&x7c_1eb6Tb4!7r%i%EF4dGP=ZZt?(@Rdj0fIU!%yI66XXVg3wj%E&^xE@Lsl}H= zcvLFW=_0K^6C<9erorFX=l+EA%D z;IY*S`h+TGAJ{DxxM9$Wt8^w4$}MjAm{0)$b3D=~E#-_IniAbiIt(TSF|s@Ji=hJe z#4yvjg_&WbHG{@RMLl!!?yQ|Vb(qiafACD{%v8jV;gvZnqTep86)&X0_mq-|sy$nI zj4P^NiP;dra>IzQO+_Xnin+__GI1~}IN_L)gH3~l|GlOA#zd)mKg_0DllO{q;bgL< U@7@g;Y!1k=*>^;TVbRw67lY?qVE_OC delta 1241 zcma)*OK4L;6ozMF9*wy-$xTdR^UjT$2-+sKF`xyLA|a#-EutcV3%ju*+FEdty@()a zdwf&~)NWEYLQ58c3oAwFM!OP31R*FWD8-mqQ8aqyKJpTa2ky+||K>mE+_{t2nRf#> zV!AmCAw4i|h}j7tT9U+ZlH!1|q@NB)jadOJTbapc5@fss}%T#ZZqz)x2fx>?*2>timFA;$tRj`NTRAr6A&~- zaLh_$oU_9-k!Q`L_QBNa>``3o#4_yIG3G3g7Tl2aaPZP2i_m6TmoxUf@vy3*&A)ia31Rn zyH2)MTX+4BbEAH#I|rZaa=&S~>)zQ?F$}Xl_MRVoepvSGZ>fB->7hG1`fR#Rv^b)0 k-QQA)Zfm&4U`BL10_wXfGrN2d$cZ92#lSyl0jlDeKN*=9V*mgE diff --git a/Content/Data/Level/LevelRoleBaseConfig.uasset b/Content/Data/Level/LevelRoleBaseConfig.uasset new file mode 100644 index 0000000000000000000000000000000000000000..e70f4bb1e80e76cc2177127dfe5a34a112475852 GIT binary patch literal 2771 zcmb7GYfKzf6h5uA(g%nrYTrer7NN`X3N)G)c9&Nl$gBFJG;wx&3#-GS1>6h@W+~=y#jCTE)F*yEn{xgpr}KM9+|UgXbfQ;ECKn~9^Cc6GzMMXeO*$KPYPp4zZw~MbqO^(; zXQF72@wuSc7xD*<0#{h?Zc@Bnzd;if{eL_jMRIE)vF9c4Yr<#HWZjl+=}fB(g_Q1w zkQNjnqnql^{qD~IR@a45*Adi02J%2-pEb5XpNX&M^pM)WZ6(y2>S9wfboTrxqUupP zlr}-{tr~h3Dffs2N?0{2y?)hi_=Qd#%k+z>7C{7bK^NAxZH7tJs-_qblcqks@qp7s z)!HHY?Z}!5NUjx%YP3_!6=$P)3x}36yNLY*)GkesQxz; z!>WwS5LyEChcIe5ejoQJ{(NVKv_gE4T{lj zUM22BI<7HucJ|ORrtKDnV%E;h-Y<_L&34pCuj$J| zjoIf2-(dd70%@`8*bdCjthf5?4yQFt1Wa)kthcrVK@#Hm{$@UV3@ymF))taT-Ug{4 zYF&s=+OiPe>LhxzZQ3;Zfzkv-%ln7%7S@`x(pTV+9RQ}qd?0NEokc}tNq%`%>UqZm-35dPhQPhA0#N%$vMnD4MMwj#;5wQ~A zCqM$?CAaJycmP1a=0q9<>8>pPByP6O@8$<5P9$@)HJO{iWNv<4k;Kj8|KH7szwjM^ vz~Ji#$mVCkKYf?^@9F!0ebVcAVdMuySB`rK0Ce3bZ%p}aIM-<%3H<*8p8d^( literal 0 HcmV?d00001 diff --git a/Content/Lua/Level/Actor/LevelFoxRole.lua b/Content/Lua/Level/Actor/LevelFoxRole.lua index beeeecb..f3339be 100644 --- a/Content/Lua/Level/Actor/LevelFoxRole.lua +++ b/Content/Lua/Level/Actor/LevelFoxRole.lua @@ -8,6 +8,8 @@ end function LevelFoxRole:ReceiveBeginPlay() self["SpineAnimationComponent"]:SetAnimation(0, "Idle/Front", true) self.last_animation = "Idle/Front" + self:InitMoveSpeed(300) + self:InitHealth(500, 500) end @@ -32,6 +34,8 @@ function LevelFoxRole:OnMoveDirectionChanged(InDirection) self["SpineAnimationComponent"]:SetAnimation(0, cur_animation, true) self.last_animation = cur_animation end + + self["SpineAnimationComponent"]:SetTimeScale(1.0) end @@ -40,5 +44,32 @@ function LevelFoxRole:OnMove(location) self["MovementComponent"]:MoveTo(location) end +function LevelFoxRole:OnUltimateSkill() + print("LevelFoxRole:OnUltimateSkill") + local sprint_distance = 600 + local sprint_speed_rate = 3.8 + + -- 获取角色朝向 + local forward_direction = self["MovementComponent"]:GetForwardDirection() + + self["MovementComponent"]:SprintTo(sprint_distance, sprint_speed_rate) + + + local anim_comp = self["SpineAnimationComponent"] + if forward_direction.X >= 0 then + anim_comp:SetAnimation(0, "Ultimate/Right/UltimateStage1", false) + else + anim_comp:SetAnimation(0, "Ultimate/Left/UltimateStage1", false) + end + local anim_entry = anim_comp:GetCurrent(0) + + local anim_total_time = anim_entry:GetAnimationEnd() + local sprint_time = sprint_distance / (self:GetSpeed() * sprint_speed_rate) + + anim_comp:SetTimeScale(anim_total_time / sprint_time) + + print("hahhh", anim_total_time, sprint_time) +end + return Class(nil, nil, LevelFoxRole) \ No newline at end of file diff --git a/Content/Lua/Level/Actor/LevelRabbitRole.lua b/Content/Lua/Level/Actor/LevelRabbitRole.lua index 1ad5850..64ac056 100644 --- a/Content/Lua/Level/Actor/LevelRabbitRole.lua +++ b/Content/Lua/Level/Actor/LevelRabbitRole.lua @@ -7,6 +7,8 @@ end function LevelRabbitRole:ReceiveBeginPlay() self["SpineAnimationComponent"]:SetSkin("back/move") self["SpineAnimationComponent"]:SetAnimation(0, "animation", true) + + self:InitMoveSpeed(380) end diff --git a/Content/Resource/Spine/Role/Fox/Fox.uasset b/Content/Resource/Spine/Role/Fox/Fox.uasset index e1d4835215bf17830da34c43aa553e6f02ae16f9..8372f7d6d0bdd53881b90f0293026fd57d41cb5b 100644 GIT binary patch delta 27 jcmcaEd0leCWr4$7s<-4{g}LvWqRsKA|6%;b$6vSswUP~~ delta 27 lcmV+$0ObGI8P^$*(-1`6=9Z!)JV3R0itd|<#Fnw+^b5v|4(R{@ diff --git a/Content/Resource/Spine/Role/Fox/FoxData.uasset b/Content/Resource/Spine/Role/Fox/FoxData.uasset index 63b9046f6a9c07dbf07a986d7e9bf8807df18b13..bff54a54d4e5ce53cfde07289d1b671d907b58e1 100644 GIT binary patch delta 2357 zcmcgtO=uHQ5Pol)O_NP(nxa@m1r@cGC8-}k^v%T9o`kff&700mt7AtR(qL;E~-IOo!BLPrsoeR3yLsFu0Cu_SfJg?z7L; z2p+Is)QoVyot@EWd1h?OCNl>zokqgw?9NiMoCT$FbGE}(f#3FC!|2%5mC1G*uCm5e zwi^A0>FNSnbH{!olF01YSL4?>ajN&q?51D0X3`$!-GG57eTqfwx^U!+EwR~gk zOK#0?+i!Ls$e2bXZR|B8Qrd1p9;>}f;R>&!W91Sr7RQlK+?%>i?p2sbCO0!?fz_ju3&!DtuHpu3N1oh;9gR8ygb3fGA(4L8 z!9-iz4jBTDNQ%S;JR)=Ouu3Uf4Ui)sbs*p-@u8uUPhux_vG{`r4-1Wx1==bR^na!! z(d8G!5F+M`Tomcza|#nQ~T)~_GUOFQBs;7Pnj#y4~l8IDK_!>EZyV}%Qs<7I1tu~-kP2^J^5 z%6nYw8(c`CI$EJF%$imd&;k(v#o=)q$u3&7*ilkJ+^$3*Znn6Ut6d=bIMUkP+4XZ< ztMtjKIi32K>rOcCFEl6T<*$(S(;adWEYrvpvuc2>;G`c{4!4qRQMRX?{PC{-_ZvW| zTIE`|Vy;my;{f?DbgDG~jR;77qgDS&r&?@QsZ~>bJy~<3X~MX#qHn2DiR3~}djDOj zG}Za5~mI>}-Re#bz1 zJLAbWpPER3GKYx4rNTWy4CulIj31hxVshjn%}*WFG(UCC{aYXsa@H+?K_f;_!w&*S zj1Ev}#OON@AE6P0c+i`993*n;Bbq<`Q6Nkik5H}g(%?qCrNOPkaX6r8a3gLR#1Oj_ fsEVc5(ObfGr74H#yCT}S{W=8 delta 334 zcmX?OGC_61b%70AUVV%xaCDiMoqMgm`P+(#&kN*Ygcwl3e;^2CXJFs~iY5qcE@d=k zVUp#Vyo%L}Ns?=FAglP~1XhmCqHGyVf)hA_YI=ag#~C+|b!`<0n%u|ng?Y}LIg?vC zwZZgePJJ-_l+yrAOK?HN-Jo;{7esy;7exLhmoZo!Keq{(cH@SqFX7e!^A~gP<7dsw zFHU6zITHjpC&%;nP2R_2&d5Fa8_!%u&dF1F?HM^HU*Vm}$Tc~S&xW6Yh08M~Csp4m zF*%!;lY253zmy&)BLgGY*E}!=2aLf6W3WIOJY1WD_^lWjxi|L;Tw|PkPO=UFE^KCR diff --git a/Content/Resource/Spine/Role/Fox/Textures/Fox.uasset b/Content/Resource/Spine/Role/Fox/Textures/Fox.uasset index 5e64a761aa5598de51ee6339d6ba9f6ffdfc2b88..ffb672b00b37927f65c7347167eb5185c82c0522 100644 GIT binary patch delta 92 zcmeydm;J|H_6;nI0(7! t`I|X3`Z*YlH_tGL7%MFLsO6_yoy!_mo8SS<++A)4#0007RAlU!_ diff --git a/Source/BusyRabbit/Private/BusyBonfire.cpp b/Source/BusyRabbit/Private/BusyBonfire.cpp deleted file mode 100644 index 16f7bc0..0000000 --- a/Source/BusyRabbit/Private/BusyBonfire.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - - -#include "BusyBonfire.h" -#include "Components/CapsuleComponent.h" -#include "Components/InventoryComponent.h" - - -ABusyBonfire::ABusyBonfire(){ - LuaFilePath = TEXT("GamePlay/Bonefire/Bonfire"); - - Inventory = CreateDefaultSubobject("Inventory"); - - SceneComp = CreateDefaultSubobject(TEXT("RootScene")); - CapsuleComp = CreateDefaultSubobject(TEXT("BonfireCapsule")); - - CapsuleComp->SetCollisionResponseToAllChannels(ECR_Ignore); - - CapsuleComp->SetupAttachment(SceneComp); - this->RootComponent = SceneComp; -} diff --git a/Source/BusyRabbit/Private/BusyCharacter.cpp b/Source/BusyRabbit/Private/BusyCharacter.cpp deleted file mode 100644 index 2e38d49..0000000 --- a/Source/BusyRabbit/Private/BusyCharacter.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - - -#include "BusyCharacter.h" - -FString ABusyCharacter::GetLuaFilePath_Implementation()const { - return LuaFilePath; -} \ No newline at end of file diff --git a/Source/BusyRabbit/Private/BusyLevelLogicSubSystem.cpp b/Source/BusyRabbit/Private/BusyLevelLogicSubSystem.cpp deleted file mode 100644 index c797856..0000000 --- a/Source/BusyRabbit/Private/BusyLevelLogicSubSystem.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - - -#include "BusyLevelLogicSubSystem.h" -#include "Kismet/GameplayStatics.h" - -UBusyLevelLogicSubSystem::UBusyLevelLogicSubSystem(){ - -} - -void UBusyLevelLogicSubSystem::Initialize(FSubsystemCollectionBase& Collection){ - Super::Initialize(Collection); - ReceiveSubSystemInitialize(); -} - -bool UBusyLevelLogicSubSystem::ShouldCreateSubsystem(UObject* Outer) const{ - if (!Super::ShouldCreateSubsystem(Outer)) { - return false; - } - auto s = UGameplayStatics::GetCurrentLevelName(Outer); - return UGameplayStatics::GetCurrentLevelName(Outer) != "HomeLand"; -} - -void UBusyLevelLogicSubSystem::Tick(float DeltaTime){ - Super::Tick(DeltaTime); - ReceiveSubSystemTick(DeltaTime); -} - -FString UBusyLevelLogicSubSystem::GetLuaFilePath_Implementation() const { - return TEXT("GamePlay/Level/BusyLevelLogicSubSystem"); -} - -void UBusyLevelLogicSubSystem::OnWorldBeginPlay(UWorld& InWorld){ - Super::OnWorldBeginPlay(InWorld); - // ReceiveWorldBeginPlay(); -} - -void UBusyLevelLogicSubSystem::Deinitialize(){ - // Super::Deinitialize(); -} - -TStatId UBusyLevelLogicSubSystem::GetStatId() const{ - return Super::GetStatID(); -} diff --git a/Source/BusyRabbit/Private/Level/Actor/BusyPawnBase.cpp b/Source/BusyRabbit/Private/Level/Actor/BusyPawnBase.cpp index 5147ba5..a894ad2 100644 --- a/Source/BusyRabbit/Private/Level/Actor/BusyPawnBase.cpp +++ b/Source/BusyRabbit/Private/Level/Actor/BusyPawnBase.cpp @@ -3,7 +3,7 @@ #include "SpineSkeletonRendererComponent.h" #include "SpineSkeletonAnimationComponent.h" #include "Level/Actor/Components/BusyPawnMovement.h" -#include "SpineBoneFollowerComponent.h" + ABusyPawnBase::ABusyPawnBase() { @@ -27,13 +27,39 @@ ABusyPawnBase::ABusyPawnBase() void ABusyPawnBase::BeginPlay() { Super::BeginPlay(); - // SpineAnimationComponent->SetSkin(DefaultSkinName); - // SpineAnimationComponent->SetAnimation(0, DefaultAnimationName, true); + + // for (UClass* AbilityClass : Row->DefaultAbilities) { + // if (AbilityClass) { + // AbilitySystemComponent->GiveAbility(FGameplayAbilitySpec(AbilityClass)); + // } + // } } float ABusyPawnBase::GetSpeed_Implementation()const { - return 280; + if (Attribute) + { + return Attribute->GetMoveSpeed(); + } + return 200; } +void ABusyPawnBase::InitMoveSpeed(const float MoveSpeed)const +{ + if (Attribute) + { + Attribute->InitMoveSpeed(MoveSpeed); + } +} + +void ABusyPawnBase::InitHealth(const float Health, const float MaxHealth) const +{ + if (Attribute) + { + Attribute->InitHealth(Health); + Attribute->InitMaxHealth(MaxHealth); + } +} + + diff --git a/Source/BusyRabbit/Private/Level/Actor/BusyPlayerRole.cpp b/Source/BusyRabbit/Private/Level/Actor/BusyPlayerRole.cpp index 451bae0..64b2b27 100644 --- a/Source/BusyRabbit/Private/Level/Actor/BusyPlayerRole.cpp +++ b/Source/BusyRabbit/Private/Level/Actor/BusyPlayerRole.cpp @@ -1,5 +1,4 @@ #include "Level/Actor/BusyPlayerRole.h" - #include "Camera/CameraComponent.h" #include "GameFramework/SpringArmComponent.h" @@ -15,4 +14,20 @@ ABusyPlayerRole::ABusyPlayerRole() CameraComponent->SetProjectionMode(ECameraProjectionMode::Orthographic); SpringArmComponent->SetRelativeRotation(FRotator(0, -90.0, 0.0)); + + Attribute = CreateDefaultSubobject(TEXT("Attribute")); + + InitMoveSpeed(200); + InitHealth(100, 100); +} + +void ABusyPlayerRole::BeginPlay() +{ + Super::BeginPlay(); + InitRoleAttributes(); +} + +void ABusyPlayerRole::InitRoleAttributes() +{ + } diff --git a/Source/BusyRabbit/Private/Level/Actor/Components/BusyPawnMovement.cpp b/Source/BusyRabbit/Private/Level/Actor/Components/BusyPawnMovement.cpp index e223690..87a8aeb 100644 --- a/Source/BusyRabbit/Private/Level/Actor/Components/BusyPawnMovement.cpp +++ b/Source/BusyRabbit/Private/Level/Actor/Components/BusyPawnMovement.cpp @@ -10,6 +10,18 @@ UBusyPawnMovement::UBusyPawnMovement() void UBusyPawnMovement::MoveTo(const FVector2D& Target) { MoveTargetLocation = Target; + BusyMoveState = EBusyMoveState::Move; +} + +void UBusyPawnMovement::SprintTo(const float Distance, const float SpeedRate) +{ + if (const AActor* Owner = GetOwner()) + { + SprintDistance = Distance; + SprintSpeedRate = SpeedRate; + BusyMoveState = EBusyMoveState::Sprint; + SprintStartLocation = FVector2D(Owner->GetActorLocation()); + } } FVector2D UBusyPawnMovement::GetMoveDirection()const @@ -40,6 +52,25 @@ void UBusyPawnMovement::TickComponent(float DeltaTime, ELevelTick TickType, { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); + switch (BusyMoveState) + { + case EBusyMoveState::None: + break; + case EBusyMoveState::Move: + MoveTick(DeltaTime); + break; + case EBusyMoveState::Sprint: + SprintTick(DeltaTime); + break; + case EBusyMoveState::Knockback: + break; + } + + +} + +void UBusyPawnMovement::MoveTick(const float DeltaTime) +{ AActor* Owner = GetOwner(); const IBusyMovable* Movable = Cast(Owner); if (!Owner || !Movable) return; @@ -56,20 +87,17 @@ void UBusyPawnMovement::TickComponent(float DeltaTime, ELevelTick TickType, } else { - if (MoveDirection.Normalize()) - { - NewLocation = CurrentLocation + FVector(MoveDirection * MoveDistance, 0); - } - else - { - NewLocation = CurrentLocation; - } + MoveDirection.Normalize(); + NewLocation = CurrentLocation + FVector(MoveDirection * MoveDistance, 0); } - if (!NewLocation.Equals(CurrentLocation)) + if (NewLocation.Equals(CurrentLocation)) + { + BusyMoveState = EBusyMoveState::None; + } + else { Owner->SetActorLocation(NewLocation, true); } - FVector2D &&NewDirection=GetMoveDirection(); if (!NewDirection.Equals(FVector2D::Zero(), 0.01)) { @@ -82,4 +110,24 @@ void UBusyPawnMovement::TickComponent(float DeltaTime, ELevelTick TickType, } } +void UBusyPawnMovement::SprintTick(const float DeltaTime) +{ + AActor* Owner = GetOwner(); + const IBusyMovable* Movable = Cast(Owner); + if (!Owner || !Movable) return; + + const FVector CurrentLocation = Owner->GetActorLocation(); + const FVector2D CurrentLocation2D = FVector2D(CurrentLocation); + + const float MoveDistance = DeltaTime * Movable->Execute_GetSpeed(Owner) * SprintSpeedRate; + const FVector2D NewLocation = CurrentLocation2D + ForwardDirection * MoveDistance; + + Owner->SetActorLocation(FVector(NewLocation, CurrentLocation.Z), true); + + if (FVector2D::Distance(NewLocation, SprintStartLocation) >= SprintDistance) + { + BusyMoveState = EBusyMoveState::None; // 这里不对,需要栈来做 + } +} + diff --git a/Source/BusyRabbit/Private/Level/LevelPlayerController.cpp b/Source/BusyRabbit/Private/Level/LevelPlayerController.cpp index 25b9b41..9019da8 100644 --- a/Source/BusyRabbit/Private/Level/LevelPlayerController.cpp +++ b/Source/BusyRabbit/Private/Level/LevelPlayerController.cpp @@ -141,10 +141,23 @@ void ALevelPlayerController::OnMove(const FInputActionValue& Value) const void ALevelPlayerController::OnPrimarySkill(const FInputActionValue& Value) const { + AActor* ControlledRole = GetControlledRole(); + if (!ControlledRole) return; + + if (IBusyControllable *Controllable = Cast(ControlledRole)) + { + Controllable->Execute_OnPrimarySkill(ControlledRole); + } } void ALevelPlayerController::OnUltimateSkill(const FInputActionValue& Value) const { + AActor* ControlledRole = GetControlledRole(); + if (!ControlledRole) return; + if (IBusyControllable *Controllable = Cast(ControlledRole)) + { + Controllable->Execute_OnUltimateSkill(ControlledRole); + } } void ALevelPlayerController::OnCameraDetach(const FInputActionValue& Value) diff --git a/Source/BusyRabbit/Public/BusyBonfire.h b/Source/BusyRabbit/Public/BusyBonfire.h deleted file mode 100644 index a2988c1..0000000 --- a/Source/BusyRabbit/Public/BusyBonfire.h +++ /dev/null @@ -1,29 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "LuaActor.h" -#include "BusyBonfire.generated.h" - -/** - * - */ -UCLASS() -class BUSYRABBIT_API ABusyBonfire : public ALuaActor -{ - GENERATED_BODY() -public: - ABusyBonfire(); - -public: - UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) - TObjectPtr CapsuleComp; - - UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) - TObjectPtr SceneComp; - - UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) - TObjectPtr Inventory; // ֿ - -}; diff --git a/Source/BusyRabbit/Public/BusyCharacter.h b/Source/BusyRabbit/Public/BusyCharacter.h deleted file mode 100644 index e47bbb4..0000000 --- a/Source/BusyRabbit/Public/BusyCharacter.h +++ /dev/null @@ -1,26 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once -#include "slua.h" -#include "CoreMinimal.h" -#include "PaperZDCharacter.h" -#include "BusyCharacter.generated.h" - -/** - * - */ -UCLASS() -class BUSYRABBIT_API ABusyCharacter : public APaperZDCharacter, public ILuaOverriderInterface -{ - GENERATED_BODY() - -public: - virtual FString GetLuaFilePath_Implementation() const override; - - //UFUNCTION(BlueprintNativeEvent) - //FString GetLuaFilePath()const; - - UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) - FString LuaFilePath; - -}; diff --git a/Source/BusyRabbit/Public/BusyLevelLogicSubSystem.h b/Source/BusyRabbit/Public/BusyLevelLogicSubSystem.h deleted file mode 100644 index 5a85d5a..0000000 --- a/Source/BusyRabbit/Public/BusyLevelLogicSubSystem.h +++ /dev/null @@ -1,53 +0,0 @@ -// Fill out your copyright notice in the Description page of Project Settings. - -#pragma once - -#include "CoreMinimal.h" -#include "LuaOverriderInterface.h" -#include "Subsystems/WorldSubsystem.h" -#include "BusyLevelLogicSubSystem.generated.h" - -/** - * - */ -UCLASS() -class BUSYRABBIT_API UBusyLevelLogicSubSystem : public UTickableWorldSubsystem, public ILuaOverriderInterface -{ - GENERATED_BODY() - -public: - UBusyLevelLogicSubSystem(); - - - -public: - virtual void Initialize(FSubsystemCollectionBase& Collection) override; - - virtual bool ShouldCreateSubsystem(UObject* Outer) const override; - - - virtual void Tick(float DeltaTime) override; - - virtual FString GetLuaFilePath_Implementation() const override; - - // ʼؿʱã - virtual void OnWorldBeginPlay(UWorld& InWorld)override; - - // ٣ؿжʱã - virtual void Deinitialize() override; - - virtual TStatId GetStatId() const override; - - - -public: // Ҫͼʵֽӿ - UFUNCTION(BlueprintImplementableEvent) - void ReceiveSubSystemInitialize(); - - UFUNCTION(BlueprintImplementableEvent) - void ReceiveWorldBeginPlay(); - - UFUNCTION(BlueprintImplementableEvent) - void ReceiveSubSystemTick(float DeltaTime); - -}; diff --git a/Source/BusyRabbit/Public/Level/Actor/BusyPawnBase.h b/Source/BusyRabbit/Public/Level/Actor/BusyPawnBase.h index cd5fc78..e6482e8 100644 --- a/Source/BusyRabbit/Public/Level/Actor/BusyPawnBase.h +++ b/Source/BusyRabbit/Public/Level/Actor/BusyPawnBase.h @@ -12,6 +12,37 @@ class USpineSkeletonAnimationComponent; class UBusyPawnMovementComponent; +#define MY_ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \ +GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \ +GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \ +GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \ +GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName) + + +UCLASS(Blueprintable, BlueprintType) +class UBusyPawnAttributeSet : public UAttributeSet +{ + GENERATED_BODY() +public: + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes") + FGameplayAttributeData Health; + MY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, Health); + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes") + FGameplayAttributeData MaxHealth; + MY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, MaxHealth); + + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes") + FGameplayAttributeData MoveSpeed; + MY_ATTRIBUTE_ACCESSORS(UBusyPawnAttributeSet, MoveSpeed); + +}; + +#undef MY_ATTRIBUTE_ACCESSORS + + UCLASS() class ABusyPawnBase : public ALuaPawn, public IBusyMovable { @@ -23,6 +54,13 @@ public: virtual float GetSpeed_Implementation()const override; +protected: + UFUNCTION(BlueprintCallable) + void InitMoveSpeed(const float MoveSpeed)const; + + UFUNCTION(BlueprintCallable) + void InitHealth(const float Health, const float MaxHealth)const; + protected: UPROPERTY(EditDefaultsOnly) TObjectPtr RootScene; //场景根组件 @@ -55,7 +93,12 @@ public: UPROPERTY(EditAnywhere, BlueprintReadOnly) TObjectPtr MovementComponent; /*-------------------------------------------------------------------*/ - + + +protected: + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly) + TObjectPtr Attribute = nullptr; + protected: UPROPERTY(EditAnywhere) diff --git a/Source/BusyRabbit/Public/Level/Actor/BusyPlayerRole.h b/Source/BusyRabbit/Public/Level/Actor/BusyPlayerRole.h index 14ae629..8506f66 100644 --- a/Source/BusyRabbit/Public/Level/Actor/BusyPlayerRole.h +++ b/Source/BusyRabbit/Public/Level/Actor/BusyPlayerRole.h @@ -3,6 +3,32 @@ #include "Level/LevelPlayerController.h" #include "BusyPlayerRole.generated.h" + +#define MY_ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \ +GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \ +GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \ +GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \ +GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName) + + +UCLASS(Blueprintable, BlueprintType) +class UBusyPlayerRoleAttributeSet: public UBusyPawnAttributeSet +{ + GENERATED_BODY() +public: + UPROPERTY(EditAnywhere, BlueprintReadOnly, DisplayName="饱食度") + FGameplayAttributeData Hunger; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, DisplayName="最大饱食度") + FGameplayAttributeData MaxHunger; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, DisplayName="饱食度消耗速度") + FGameplayAttributeData HungerConsume; +}; + +#undef MY_ATTRIBUTE_ACCESSORS + + UCLASS() class ABusyPlayerRole : public ABusyPawnBase, public IBusyControllable { @@ -11,6 +37,12 @@ public: ABusyPlayerRole(); + virtual void BeginPlay() override; + +protected: + void InitRoleAttributes(); + + protected: /*--------------------相机相关--------------------------*/ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) diff --git a/Source/BusyRabbit/Public/Level/Actor/Components/BusyPawnMovement.h b/Source/BusyRabbit/Public/Level/Actor/Components/BusyPawnMovement.h index b3ae449..91bb497 100644 --- a/Source/BusyRabbit/Public/Level/Actor/Components/BusyPawnMovement.h +++ b/Source/BusyRabbit/Public/Level/Actor/Components/BusyPawnMovement.h @@ -21,6 +21,19 @@ public: }; +UENUM(Blueprintable, BlueprintType) +enum class EBusyMoveState: uint8 +{ + // 静止 + None = 0, + // 正常移动 + Move = 1, + // 冲刺 + Sprint = 2, + // 被击退 + Knockback = 3, +}; + UCLASS() class UBusyPawnMovement : public ULuaActorComponent @@ -33,6 +46,14 @@ public: UFUNCTION(BlueprintCallable) void MoveTo(const FVector2D& Target); + /** + * 沿着当前角色的朝向,以若干倍的速度冲刺一定距离的长度 + * @param Distance + * @param SpeedRate + */ + UFUNCTION(BlueprintCallable) + void SprintTo(const float Distance, const float SpeedRate); + /** * 获取当前移动的方向 * @return 返回朝向的单位向量,如果没动返回(0,0) @@ -49,6 +70,24 @@ public: virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)override; + + /** + * 处理移动的Tick + * @param DeltaTime 距离上一帧的时间 + */ + void MoveTick(const float DeltaTime); + + /** + * 处理冲刺的Tick + * @param DeltaTime 距离上一帧的时间 + */ + void SprintTick(const float DeltaTime); + +protected: + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Movement") + EBusyMoveState BusyMoveState = EBusyMoveState::None; + + protected: UPROPERTY(EditAnywhere, BlueprintReadOnly) FVector2D MoveTargetLocation; @@ -58,5 +97,12 @@ protected: UPROPERTY(EditAnywhere, BlueprintReadOnly) FVector2D ForwardDirection; + + + +protected: // 冲刺相关 + float SprintSpeedRate = 1.f; + float SprintDistance = 100.f; + FVector2D SprintStartLocation; }; diff --git a/Source/BusyRabbit/Public/Role/BusyRole.h b/Source/BusyRabbit/Public/Role/BusyRole.h index 338136f..6b0c127 100644 --- a/Source/BusyRabbit/Public/Role/BusyRole.h +++ b/Source/BusyRabbit/Public/Role/BusyRole.h @@ -21,7 +21,7 @@ enum class EBusyRoleState : uint8{ }; USTRUCT(BlueprintType) -struct FBusyRoleConfig : public FTableRowBase { +struct FBusyRoleConfig: public FTableRowBase { GENERATED_BODY() UPROPERTY(EditAnywhere, BlueprintReadWrite, DisplayName = "角色的生命值") diff --git a/Source/BusyRabbit/Public/Tables/BusyPawnConfig.h b/Source/BusyRabbit/Public/Tables/BusyPawnConfig.h new file mode 100644 index 0000000..e202136 --- /dev/null +++ b/Source/BusyRabbit/Public/Tables/BusyPawnConfig.h @@ -0,0 +1,46 @@ +#pragma once +#include "BusyPawnConfig.generated.h" + + +class UGameplayAbility; + +USTRUCT(BlueprintType) +struct FBusyPawnBaseConfig : public FTableRowBase +{ + GENERATED_BODY() +public: + UPROPERTY(EditAnywhere, BlueprintReadOnly, DisplayName="生命值") + float Health; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, DisplayName="攻击力") + float Damage; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, DisplayName="防御力") + float Defense; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, DisplayName="移动速度") + float MoveSpeed; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, DisplayName="技能列表") + TArray> DefaultAbilities; +}; + + +USTRUCT(BlueprintType) +struct FBusyEnemyBaseConfig : public FBusyPawnBaseConfig +{ + GENERATED_BODY() +}; + + +USTRUCT(BlueprintType) +struct FBusyRoleBaseConfig : public FBusyPawnBaseConfig +{ + GENERATED_BODY() +public: + UPROPERTY(EditAnywhere, BlueprintReadOnly, DisplayName="饱食度") + float Hunger; + + UPROPERTY(EditAnywhere, BlueprintReadOnly, DisplayName="饱食度消耗速率") + float HungerConsume; +};