From 75b5f001bdd5552d4ecd811b41aa4a1547d25aed Mon Sep 17 00:00:00 2001 From: TsubakiLoL <2789646812@qq.com> Date: Sat, 26 Oct 2024 22:17:29 +0800 Subject: [PATCH] add --- TEST/Ranged Weapon/1_Slingshot.png | Bin 0 -> 2772 bytes TEST/Ranged Weapon/1_Slingshot.png.import | 34 +++++ TEST/Ranged Weapon/1_Slingshot_pull.png | Bin 0 -> 3061 bytes .../Ranged Weapon/1_Slingshot_pull.png.import | 34 +++++ TEST/Ranged Weapon/2_Bow.png | Bin 0 -> 2721 bytes TEST/Ranged Weapon/2_Bow.png.import | 34 +++++ TEST/Ranged Weapon/2_Bow_pull.png | Bin 0 -> 5262 bytes TEST/Ranged Weapon/2_Bow_pull.png.import | 34 +++++ TEST/Ranged Weapon/3_Longbow.png | Bin 0 -> 3987 bytes TEST/Ranged Weapon/3_Longbow.png.import | 34 +++++ TEST/Ranged Weapon/3_Longbow_pull.png | Bin 0 -> 6548 bytes TEST/Ranged Weapon/3_Longbow_pull.png.import | 34 +++++ TEST/Ranged Weapon/All.png | Bin 0 -> 35958 bytes TEST/Ranged Weapon/All.png.import | 34 +++++ TEST/Ranged Weapon/Bullet/1_Stone (1).png | Bin 0 -> 960 bytes .../Bullet/1_Stone (1).png.import | 34 +++++ TEST/Ranged Weapon/Bullet/1_Stone (2).png | Bin 0 -> 908 bytes .../Bullet/1_Stone (2).png.import | 34 +++++ TEST/Ranged Weapon/Bullet/1_Stone (3).png | Bin 0 -> 980 bytes .../Bullet/1_Stone (3).png.import | 34 +++++ TEST/Ranged Weapon/Bullet/1_Stone (4).png | Bin 0 -> 918 bytes .../Bullet/1_Stone (4).png.import | 34 +++++ TEST/Ranged Weapon/Bullet/1_Stone (5).png | Bin 0 -> 895 bytes .../Bullet/1_Stone (5).png.import | 34 +++++ TEST/Ranged Weapon/Bullet/1_Stone (6).png | Bin 0 -> 907 bytes .../Bullet/1_Stone (6).png.import | 34 +++++ TEST/Ranged Weapon/Bullet/1_Stone (7).png | Bin 0 -> 1184 bytes .../Bullet/1_Stone (7).png.import | 34 +++++ TEST/Ranged Weapon/Bullet/1_Stone (8).png | Bin 0 -> 1052 bytes .../Bullet/1_Stone (8).png.import | 34 +++++ TEST/Ranged Weapon/Bullet/2_Arrow.png | Bin 0 -> 1396 bytes TEST/Ranged Weapon/Bullet/2_Arrow.png.import | 34 +++++ TEST/Ranged Weapon/Bullet/3_Shuriken.png | Bin 0 -> 2104 bytes .../Bullet/3_Shuriken.png.import | 34 +++++ TEST/Ranged Weapon/Bullet/4_Kunai.png | Bin 0 -> 2024 bytes TEST/Ranged Weapon/Bullet/4_Kunai.png.import | 34 +++++ TEST/Ranged Weapon/Bullet/5_Snowball.png | Bin 0 -> 1518 bytes .../Bullet/5_Snowball.png.import | 34 +++++ autoload/database/database.gd | 32 ++++ json/character.json | 24 +++ .../base/base_behaviour_tree.tscn | 67 +++++++++ .../ranged/action_move_to_unit_ranged.gd | 55 +++++++ .../ranged/action_move_to_unit_ranged.tscn | 6 + .../ranged/ranged_behaviour_tree.tscn | 67 +++++++++ .../attack/base/attack_scene_base.gd | 53 +++++++ .../attack/base/attack_scene_base.tscn | 22 +++ .../attack/ranged/attack_range_bullet.gd | 24 +++ .../attack/ranged/attack_range_bullet.tscn | 20 +++ .../attack/ranged/attack_scene_ranged.gd | 52 +++++++ .../attack/ranged/attack_scene_ranged.tscn | 44 ++++++ .../dead_scene_sprite/dead_scene.tscn | 30 ++-- scene/class/game_data.gd | 14 ++ scene/test/action_attack.gd | 10 ++ scene/test/action_move_to_unit.gd | 2 +- scene/test/character.gd | 141 ++++++++++-------- scene/test/other_character.tscn | 87 ++--------- scene/test/test_main.gd | 2 +- 57 files changed, 1240 insertions(+), 158 deletions(-) create mode 100644 TEST/Ranged Weapon/1_Slingshot.png create mode 100644 TEST/Ranged Weapon/1_Slingshot.png.import create mode 100644 TEST/Ranged Weapon/1_Slingshot_pull.png create mode 100644 TEST/Ranged Weapon/1_Slingshot_pull.png.import create mode 100644 TEST/Ranged Weapon/2_Bow.png create mode 100644 TEST/Ranged Weapon/2_Bow.png.import create mode 100644 TEST/Ranged Weapon/2_Bow_pull.png create mode 100644 TEST/Ranged Weapon/2_Bow_pull.png.import create mode 100644 TEST/Ranged Weapon/3_Longbow.png create mode 100644 TEST/Ranged Weapon/3_Longbow.png.import create mode 100644 TEST/Ranged Weapon/3_Longbow_pull.png create mode 100644 TEST/Ranged Weapon/3_Longbow_pull.png.import create mode 100644 TEST/Ranged Weapon/All.png create mode 100644 TEST/Ranged Weapon/All.png.import create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (1).png create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (1).png.import create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (2).png create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (2).png.import create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (3).png create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (3).png.import create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (4).png create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (4).png.import create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (5).png create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (5).png.import create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (6).png create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (6).png.import create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (7).png create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (7).png.import create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (8).png create mode 100644 TEST/Ranged Weapon/Bullet/1_Stone (8).png.import create mode 100644 TEST/Ranged Weapon/Bullet/2_Arrow.png create mode 100644 TEST/Ranged Weapon/Bullet/2_Arrow.png.import create mode 100644 TEST/Ranged Weapon/Bullet/3_Shuriken.png create mode 100644 TEST/Ranged Weapon/Bullet/3_Shuriken.png.import create mode 100644 TEST/Ranged Weapon/Bullet/4_Kunai.png create mode 100644 TEST/Ranged Weapon/Bullet/4_Kunai.png.import create mode 100644 TEST/Ranged Weapon/Bullet/5_Snowball.png create mode 100644 TEST/Ranged Weapon/Bullet/5_Snowball.png.import create mode 100644 json/character.json create mode 100644 scene/behavour_tree/base/base_behaviour_tree.tscn create mode 100644 scene/behavour_tree/ranged/action_move_to_unit_ranged.gd create mode 100644 scene/behavour_tree/ranged/action_move_to_unit_ranged.tscn create mode 100644 scene/behavour_tree/ranged/ranged_behaviour_tree.tscn create mode 100644 scene/character/attack/base/attack_scene_base.gd create mode 100644 scene/character/attack/base/attack_scene_base.tscn create mode 100644 scene/character/attack/ranged/attack_range_bullet.gd create mode 100644 scene/character/attack/ranged/attack_range_bullet.tscn create mode 100644 scene/character/attack/ranged/attack_scene_ranged.gd create mode 100644 scene/character/attack/ranged/attack_scene_ranged.tscn create mode 100644 scene/class/game_data.gd diff --git a/TEST/Ranged Weapon/1_Slingshot.png b/TEST/Ranged Weapon/1_Slingshot.png new file mode 100644 index 0000000000000000000000000000000000000000..250918291218a63605fc5661d15e540a496671d1 GIT binary patch literal 2772 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 Qk8UcTt+gY(#xfw~e-~Xv>Hq)$ literal 0 HcmV?d00001 diff --git a/TEST/Ranged Weapon/1_Slingshot.png.import b/TEST/Ranged Weapon/1_Slingshot.png.import new file mode 100644 index 0000000..0912da4 --- /dev/null +++ b/TEST/Ranged Weapon/1_Slingshot.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://yx6i71kdwm6j" +path="res://.godot/imported/1_Slingshot.png-8a70f8f5f5bd430fbaa9ec05bd5153ce.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/1_Slingshot.png" +dest_files=["res://.godot/imported/1_Slingshot.png-8a70f8f5f5bd430fbaa9ec05bd5153ce.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/TEST/Ranged Weapon/1_Slingshot_pull.png b/TEST/Ranged Weapon/1_Slingshot_pull.png new file mode 100644 index 0000000000000000000000000000000000000000..5a465b3ae45749791395131e1659cadadb722945 GIT binary patch literal 3061 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 literal 0 HcmV?d00001 diff --git a/TEST/Ranged Weapon/1_Slingshot_pull.png.import b/TEST/Ranged Weapon/1_Slingshot_pull.png.import new file mode 100644 index 0000000..2df8973 --- /dev/null +++ b/TEST/Ranged Weapon/1_Slingshot_pull.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0renymshjnfj" +path="res://.godot/imported/1_Slingshot_pull.png-16dce7dfdab330745dc47518256551b1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/1_Slingshot_pull.png" +dest_files=["res://.godot/imported/1_Slingshot_pull.png-16dce7dfdab330745dc47518256551b1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/TEST/Ranged Weapon/2_Bow.png b/TEST/Ranged Weapon/2_Bow.png new file mode 100644 index 0000000000000000000000000000000000000000..ea7776ea83d8e5902d74900b3ca33ae6c5e11ff9 GIT binary patch literal 2721 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 literal 0 HcmV?d00001 diff --git a/TEST/Ranged Weapon/2_Bow.png.import b/TEST/Ranged Weapon/2_Bow.png.import new file mode 100644 index 0000000..5f7b165 --- /dev/null +++ b/TEST/Ranged Weapon/2_Bow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cyrr46lmsbrbx" +path="res://.godot/imported/2_Bow.png-42c406f3dbf3d4c06007d07f5d210e65.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/2_Bow.png" +dest_files=["res://.godot/imported/2_Bow.png-42c406f3dbf3d4c06007d07f5d210e65.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/TEST/Ranged Weapon/2_Bow_pull.png b/TEST/Ranged Weapon/2_Bow_pull.png new file mode 100644 index 0000000000000000000000000000000000000000..9960d8f78988fc632ca72ff567196876f3f9e605 GIT binary patch literal 5262 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 literal 0 HcmV?d00001 diff --git a/TEST/Ranged Weapon/3_Longbow.png.import b/TEST/Ranged Weapon/3_Longbow.png.import new file mode 100644 index 0000000..7148c2b --- /dev/null +++ b/TEST/Ranged Weapon/3_Longbow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bs81okrb5bf1" +path="res://.godot/imported/3_Longbow.png-374f2a8c4ff364aeb2656f1a54eb2d7f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/3_Longbow.png" +dest_files=["res://.godot/imported/3_Longbow.png-374f2a8c4ff364aeb2656f1a54eb2d7f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/TEST/Ranged Weapon/3_Longbow_pull.png b/TEST/Ranged Weapon/3_Longbow_pull.png new file mode 100644 index 0000000000000000000000000000000000000000..469c955cdbd79232be5a5796cea0aa4eef5afa63 GIT binary patch literal 6548 zcmX9@cRX9~_owz=B{tR87P}2%6}7cS?LBM978+^>DXH3O6t!aS*;edoB`rejn6YUo zO2;>!-|vt6dhR**-m{;3?)%)-$0oWAwA{2LBqR*_dfH~h6-h!uN=HpeJi{yEc8LoO zM9(IKgaml|zk@WgQazl6gzKTcwx&g7(P6QZpVe5-7}GYg41(TIRF9aXO^D|xq&#?< zRPl5XlxScq>GNcWM>u!Npr!l%-Jd?pR(vgmW?|su*QWfITxbFXtAdOi7uCY z*`=?!dJOE?dH}7#)9iebD>k+fjob+oD=3DI)Vf9<1|s`9gX8Y%U--H3)wp=^;Dzy;u`U zBmw#lqcrrOa(-r+bk(VYzUq;G{K&;*61t4#aynhQho98-=bt$j&TU~>Phsb`v@e~r zJtuotx-Pg^6l`k$Dvs6MgKmwi=ysHSV)uY{THaZgB$n_{VM4(oo00!SSueXV9@) zUlrKBcFb1SGE5we*Bo*6Ed8|msRQq#Z_~?J_+DjS4PXM5q1cVboQ^iK)31(_&muN7 zF{V2Ysg&`oqo})dJ@DmQop~S~E-<(A)dP0dVf~99dVU6a<5iX6Mm;ZxROC1!Ew72O zr9X2D7A_q*erWXf7{O8!af6v1s}o*IR}HS{`jGsn>EsY6)_QFZDy35T9{rxI81!@X zTgNMZa2(rFo4lP|Vz$6nKeGFAWe^2}`*e1mZT(&66jG*ANgHxM$grn>iG|n%qS_k1 zyEQ)wZ9dKu!J>B#WgFLMchywNz`_`>^yOcajlZEFxj&$R0UJ;tW6@tQ{@H8GV_3LQ zBp5sNLE}7()JXo)aIAfZv~g9_>P(!hcY+&XVd~v?x}r-P==fcz zTZ^c1m7%3u%|L%>NrdR3ZFS)kEO!WnXGwm;-nYveT&n)r=PJN%VXp5hK38u;w%8R2&ylbiEYo^ssL9xa z6&aK<`nhn!E}LlM`^$C2S9RGG$H+B`#tZhiU4-ujIDhfF=;}=M6wk7HVwf#^&+i*E zg|Sh+MiFRTt=d-Jv!qiyR?`ey9I*nW+Qt-L=JiMY^ojiU=b|?77?{zG<@4^v7EmH( z$n`(C7+LMlHoQLj_3Mx9l z8HSm7oLYOLZ_{f|$qmmo*ojou`9Q8#b`-_&XMYH~kJ{4VZPN6Dp1spM{h2lkebcNL9mp#Hoti}(6h_tqY7cuUhIZ@Iru@Co{k)*#+{36EhN>=;6my4)^{*6w1<0E zwyFO|+Kg}DNPk2px=f+fUy@Y-bF->4OqM!?4-HFPt>|8Bzf84#pulaug=u`|)crvL_oU*S}w38dR#X z;THQfDB`u@*P6`QRJHMf8e7l;W#_w$-B?>g-2-&i`9taC+Fu&XL5C(IgRn zHlAPCxBne)0N48WINScNuU2N!WIij*e{a6zWdsBL8510C$uA~^=XfBz?H`3%gt_k( zPL@YgA+!K}*rvu3Qq_XNHw`eWmyp2DNKND2lO*e zw&i+hr#zOP`x)P9)#bzA&4ZnK?zCgmiF+?&y2mp3vKUJ`eCN#OnpYU&HEK(U4IkcD zcKN8(mQ6~B!h4hRT-UAe%LXuDO1(yXys4UkiBlCc)zC=Q5%c(|N~< zH_AiGC^ok#*l279PpVT0W78+K0vkZ>cG;{lr-Ck$KZlV&*_JBr*7%?6XRBk!1&4xs z$|Jet#)_}^e>o4l0oT?tHWtd)WXwoDxDkFaZ^p{5rxH0;9|jrWji6zjXOoUGlU-A@ z`}{qMRNJ&<#scnL0m$3a&WDsrRaUMf%QoPNMap?E>fOgmE-2=B1SOnFUTUB zAYHjPeoGm`SUSfdTcG7SQpTEmhY#D9i7Smqfzq+yb=OoQ>a4E(iI?)Y)MgxPw0%q?+Vv#mSO0lC8@ulL zXK0B?H&mMWBOg1_3#FOyU^7**x+%dD+j$)eK+?BF%1?)}bjDjU1LVRPp$TX$9F1no^0b-L~ZS z$DtXV--6YIU#P84i<-Zj=NTkWga5%L1t{emLWq%`LrY zZ4I)H#FZP}J_ab>{bE-be_jrI?lqFe?)}VMWGYfGm0$Sy2>}n^I>tG+ClJ<05N1uM zVC0X-ewtHry}n)bUc+Ybp76y&%TIszKKO;}LVVs!OIutr`al z1+pf(oz83CCeJ{9TiH(>H^wgxUX;_#7Nsw0J5Y@cYSs#$lriE~bTeg@_Ca%G(t#UqEKgoy z66%WRw`yQDWZ66NVv)niA%`Sp-bloRmPP4#a9^^rRbak3|C^E=vt6_~Fuw}>&yi;> za=V}qeS6`17Fb~3yU$>CTRD5LV&Io^{(kv_g#O~=4lKOx-aY3USkYsF7NBn9bf|Q} zNR!H+v0Hl^Zaxyo=N6zkgV0@oKBxBn_~LP+d-KbPjcqmt zVn!{6_^_GF`(#S5p{Z;FP`iP5i#%rM!=kkXZztlt9cOeU7mhw%!DQsiZa4UyoS6~d z!SB9Gi|n-_r&_TOlIsGWnn>om4Y$KMDk=E5;jLpCK~YFj_%zJe_WyyfFktTLJrdTi zI=((n3AOZ_??D(;BrIptJ`%o$B_fK(LKVI9YC}&_XkX9dC~Os2S@tp5*t;V@=EaS! z7IyV7X$k#xNJ!>sXca#h;d>P9R;5o#z6?EF%#h<{%%MCRNkFCPH8r3hR3O{q4khE$ zdlBNe>U&UB$Q3sQV~sdd_MSQ0nvm}*ulud;a9s25+WVm6)BXv;s_H^{TeG9Szkb{tg9%OAi#NFai3rL#c?+M7<7X<-I|<{&4>*P2 zLxMkDII1P}+Bn(g3f77MGRCzw4(>))`6V;&J#DiWQ0kESc6@jAV8=rB>nR&tBH}j@ zNZ+I&qw1K^BNOuwrecC$^`9^JPBnR$2{cIY4C)+}sr9qgd!Y7t9b|GGXst75-?D*k zyt;ChstD$BPTm{Z6Y3(OexANflf3aS5haI=t7q{dhy{4$UD6uL_|$jfASr@@RgE%? z&;+4ZlvF9h_XqmQZy}!Gyspm=v&Z5l!k@4KfBXl$DS!aoE9s#f|6I3wQ$hnAU?E#` z6_1H84)pFm0&LNlUv)ppb zVq4PlQh#VX+;eMHErw*;SbZ`LTCmmc5-`CN;cQT2EQ7_dxyj%#U&WoDnpj;OSZBbp z!QsArNFR!5?~YJ}dUv9K|Dz`Rghx%kQ~kj>vXTSzP^DVyAD9dT#I239R+wDUF}Z=G zd;(|L%79b_+>a>;p1Oe}5W&e*lh=+oQ_e`+Ay6(QbVQ*q&Gh|{WAqbMnv4*~$mk#P zSTNb-wkQe^ovyhnR??}ImRP{5jpwiq4 zKtaD%aVUmvdUoYqbfpur77=MdH9VDo1OC8&q2>kOjXigIrK+sL@IsVHrWQNj=2c-A z>~7Agg~$y*vJ|zORi&pROnUMhtE>GE-Mple0X45T^l`C;YP3Ud!{$^Xj!Ue2j5{C$ zI+U4>?Sc2x^bMhchaPnH3LY|yIYjout9Ze0ld_L}&_gXQ^u7Y~9&}YY=687^nX(Qo z`oV=0WHVqyTo$@D>1I)Mre^oJ(RHT8e0?u@W}<9XGY79RD`b9sx4JZ!me#&CUp-b0 z2lAut9e+w`QaW+kl>+>MMV4&Gy#BVlFNGnUw&Z8-VDg?9+G2ELSX)B8;LOiudhFHT zp{E)-%uQP>+l>n9_MHPxY_JB6=xiHV$=ZlAJq8$~SvQ)gfx)Z=7cESK`y;Z>6T*q=EHVy3yL9j2~a>6ni(6O z-<6W*ukkTmO7T&m3}bo}n|L-bSk96HDTwPY*4`BoadSAK-jM0w(o!`5^vK>5XL4^) zt3*h`bBHs{qqhvFHw^$bjCMIxp!455k9)^|So45+qhl#L9_x`J%Oe!eX9|EDoD@ zXsf}OpT=e?3`~iHz1^Z~!Dz|lJ6ou!J5ecs&NFxBZk<|k)fT3ET)&$WEa~quwx8FM z+@vxU+w9gfwDe}iEzY5_5;t&Q@^ZBJ+@aXkOR z;-kZpfWab!=Qgg!AtLNxtR1>VFAZ;ut_J>5mn^zZ#nHLcmlPShYI78tV!>-*$C zio^HZAW>iA4m`lzhg_Ws%8}+>U!ZrfH!gRkvE9i?s48{*Duk)?=Oc$Pv53w& zvS~n-Zo{E z8M6gu8_yxq0i9)OAI|F8$3MOs@7?raYNH_C+;ntz2+ryhXAwJK9_tCG2qu)QHS)xlpZY|uaAHOX2FcXuLWL`pa zz)9Ld50?XcK@?KP!9d94l_PFee ycOCcYg)GcP+|Hq8#7(1!eP3#?9wkh2azA9j@v`dxqe%SCLZYu@qTTqwIsShd7qEf= literal 0 HcmV?d00001 diff --git a/TEST/Ranged Weapon/3_Longbow_pull.png.import b/TEST/Ranged Weapon/3_Longbow_pull.png.import new file mode 100644 index 0000000..c73fb64 --- /dev/null +++ b/TEST/Ranged Weapon/3_Longbow_pull.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://se3khy8uem13" +path="res://.godot/imported/3_Longbow_pull.png-9b86c2a8250d003f179725c5205d37b8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/3_Longbow_pull.png" +dest_files=["res://.godot/imported/3_Longbow_pull.png-9b86c2a8250d003f179725c5205d37b8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/TEST/Ranged Weapon/All.png b/TEST/Ranged Weapon/All.png new file mode 100644 index 0000000000000000000000000000000000000000..e848cbbf32efa9238ff8ad048ce687dd43503d56 GIT binary patch literal 35958 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 literal 0 HcmV?d00001 diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (2).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (2).png.import new file mode 100644 index 0000000..6db8c79 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (2).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://wcoid17psj8k" +path="res://.godot/imported/1_Stone (2).png-d6610342c5191ebcbdf70c6410b9da15.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (2).png" +dest_files=["res://.godot/imported/1_Stone (2).png-d6610342c5191ebcbdf70c6410b9da15.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (3).png b/TEST/Ranged Weapon/Bullet/1_Stone (3).png new file mode 100644 index 0000000000000000000000000000000000000000..5091a8c169c8e8af143f54cc41dda8d432ca4995 GIT binary patch literal 980 zcmV;_11tQAP)e^AWL`=0YcM8e|gyRy5Ft| z(om~Hh`&myA7J8~l=8iHEX!J>jQVH-C) z7>qPm7;`~h!APr#a5^jI6)aF}LeX{Xbo$G&t06djpZx@YQqI{RuFf5}0$W;I0wF~3 zNvq4tOSrwgHJa}poOW&B3W?V8@-mc4rQlbH| zECx{I*sK+GZj2x?h zZx%QqNqa?Cy1Tmz_LW>XW4XN7+U<4#$k2Hv;b^1WYPGn-cq}+qs@LmW*P4jfVZkx8 zS*$$IW2JwsW6-6*HywfVtQ98$V|5Ph{LrTmkjCZdUkI;+uA z@GP-7=H>aO`OY z9invrcs7HEWL1Y@;>o;Gn&*ukf=swXzMhDw8V5QI-ToTLCnBPIZ5@dO@d0)b zVT`rJ2z^XkoNY-|0X!U;1o8GygfT|l>o)-J!o4OXesAVTHDY6h7Ygef5z!c#6iFtN zNT<_CBoeO99}EUqEEdYY7Zaa1rX-5RBC^>mEX(p#E}ze%(P&_`S}Fam6nRuCy#Ym_ zTrPVSki_G0q*5tNCKILdF)?mvO$JG#QmL#jCM-^M$BZaQK!{xGR8T6Fj7g|AD+rN{ zYT;Zix9*utpqk`@xmMH4WR&m04m#1Gm6yHKcsE2yWUee?s!2)4N7_37Ti=NYHb8=pwydPq&I!I4wQ|0p*5fG>B%XA~XQD+pgB9 zo#@N8t)L+3?#OMn$wryDzjwX0sWl(!1{PkK&J6mIu@f5I61>vx^FF>I_NUB3;zyJUM07*qoM6N<$f{Tui-~a#s literal 0 HcmV?d00001 diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (4).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (4).png.import new file mode 100644 index 0000000..7f3f077 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (4).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bv5xyjlbyftle" +path="res://.godot/imported/1_Stone (4).png-fac442b59a76c7f8916ab594135af36a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (4).png" +dest_files=["res://.godot/imported/1_Stone (4).png-fac442b59a76c7f8916ab594135af36a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (5).png b/TEST/Ranged Weapon/Bullet/1_Stone (5).png new file mode 100644 index 0000000000000000000000000000000000000000..de4c986c3ed254d582d18640a4239300b894df0e GIT binary patch literal 895 zcmV-_1AzRAP)uABzR2p16z<_(gPD)AG< zeuBhL5b^|uE?o#6m9M0*CBT)dI1M8qTXMuo#8lCo_M+o_wvXM--QFi5Vf%J(e$UR# z`exU_5{Ov0HCKo!5nU&_P)i6RZUewu05}8y7EsbOGzn7x@BrY9h|aADK}0tAlM=E0 zAB|rGd#6Q2Ui9-sLX-!-0KkW|EM7sIh(3oeDXbcSi2Ut$0pLwWM#oVXLX@PGKZ4Je z3PD8n!U+IuWnt|KszQk0Qpzh>wzLqj9hAN zMpR&*A@3cu?M1vo z#Hy{`Yq41L|8yA+hw$+5peID_WR2L}-Gy4M1{)h2M)Ta=-5CivG`V@bUWZDhVlssl zI7X_v6O~FOCq#e}qFp-<4i4;EV?gYtF$p_6J0OI}zmUz%O}myDqAkQVoDwpd&9uil zC1f(0XpeP92p2;GM$QNsjYdYpoe=W$^yKfe42XaDkT!$Cz!zh{P3A&)lX!c3YdVdW zxsc1tOH*%L6On$5jK^b>oBMd4XOwakXJC?k`CHV@G(46?7zTKN-)dkX+Ig?n>%Dkc zum>(KE^LW7bH6oe4msClh3%j4rC+~40rxm<=qVfll74(fit?|XvBS)wJS^o6V; zVl#Mtsta%D_xJaGLE)dfY&=(NUV?@NFAk50j)M2sa{NrI94sqlUA;)uaCC@vSOf%( z9wEfc#?zFP;JR@fy_KJSiRjcMd!-0>cpGuI3)hi$4urH8_1&K}dJwUz`sOauP%9^v zXk~9G_qoPW5fBxkGQqpNiGaBFG*?O?#4iW37_W?DBKnr(;@EwKl=3=bF&xlGM0AyO zz|tce>cr3Y6kBrag|E@$8A(`q7DY8lJ1KaF<6y30CnfReAmyEoBo!$`L^%LQdQ8lkV*tBS%8s=R5wXDc8AW3pJdUbT z%JZlm5gL)vGZu?HnN=@iFi|Kh&GvO@ zU1gt$Lf5u|2|&N;$YBv5p52}eFS5gt`84xxnUU5RG(cZQ&lWDH*D#gg8LppZMAVqm z!e|4hTi#z(Q}{m>FPaE+y1n;*d8DtlJ714Np@3X2hn1C;(ATf8uW@yCg?78`Jx&PT zFY>sUM3PHrPQ~S-W3~DsZ_?MRTTWWt*tFDJuUHuNy=tA=4fQIS=)}FTrS5- z(J=U5_p!U?X-Gl@IzlXDiJeT`aWV=1Vl2O$r&cmav$3&Z(_-2wnS4HP^YM~XGN!Yl z#;wS}avUyYTxBWaDoYtxS<1MImCWt!ty5Z7G8Y#Y$@L@wQo3Yd1mB!+NhoDoM@;ah zgf)Je8CQKdI<;CY5g~5FCer@h8NLDd+_aIKn;SHnP4s#_tgfzNZEY=f8!W<6<}b&P zj(^{bWg4cfIKruyX1ZQzHFg}J9h{mE7hL8nSOwsl(7zn3W5(feKQg*3u(uH19)*vp zbOv?+Qp(Q&BJ1rA@&#kIGgV#0SrktFV<{stdPlIkAR?V$UqcTyD5ZXKy*;TS)IIVx zcvvV@Mhl%gF60%Mf=^6ys;Q*U2Dns-9udK$$oMFw{sia9HBRQJl&@lM}iN~@u|Sby`%N%*}xeBmU>~^ ho)-8KTtB7)z(2F12=E4tqI&=U002ovPDHLkV1h>ake>hm literal 0 HcmV?d00001 diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (6).png.import b/TEST/Ranged Weapon/Bullet/1_Stone (6).png.import new file mode 100644 index 0000000..377664b --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/1_Stone (6).png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://m4axta8kmju3" +path="res://.godot/imported/1_Stone (6).png-ac181f528405c74bb604c71e9c291350.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/1_Stone (6).png" +dest_files=["res://.godot/imported/1_Stone (6).png-ac181f528405c74bb604c71e9c291350.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/TEST/Ranged Weapon/Bullet/1_Stone (7).png b/TEST/Ranged Weapon/Bullet/1_Stone (7).png new file mode 100644 index 0000000000000000000000000000000000000000..de0b504dd088e232e4be878112cb51f81963a877 GIT binary patch literal 1184 zcmV;R1Yi4!P)Idu{{w(p*e(~lG-apLoR z{ocL%@yNI72lOo4URfR zVJw&|xefqt3`IuK0)RRI>}6qnBf(P2EfU(#WjR1=Z*y8bm0)t+8nw?nVH2KMu$1yG z0KCsxXgBEUn@XvcX#t4@ODSvAUW)*V-B3z>Vi!z->F@zuI0-vSsm-(}#R>jMT}@HJ zHocn0#Ulk5%#HhjUDxxZqDx^1rIhOfA{MB*9a8g)rN_cjN*qLd%b}0uCXuDXEL<#rsuzP^T=n;W>iy!1Y2giE4(+Vi8p=QWONPfSd}!oq_09`(Bq3O_$ThqJRY z?=vG9cyTD)(>y&3Q%L`1d%dNlC77L^H98kX9~~XR{rx?s@QPB(4Ic1rvCe~?O z(Z&~SJUI|Tc&^L|-n`}IW$y+s@Qzh52B<73m&;r?awRzIEOnbaE!g#B1zMUxv=f~1 zm24K^u!~`GyGSrTM0If~Xve6~*-}z)aFGWLL9D~V#*B`R<{}saD6I25QR|IKJTTre&Z@!G5@IQxNvajYg))`}TEg2nyb_tqith6rGiOGc5eM z?R9Cb^-m#0)pq*=R_Nm50vyM&ji?>qO*}X_@Roo~!E9s4Lc9>-2S-i`D}}3(T5B(= z+6EdwMqFK8*%Z^%TJMJCme?2LgKN}i^`w?ZZ^41h$;k;vGx74tVS-r~jKj5fkFjSPGiFbSe1cl;2!u&Z10Qdu-fr*Ea+d8lS0000J)ST?CdiGHL z1Z|H!wfzLzPoUns)p`pE+KcpN@Sw$u>BYGy1RSvOAmv$R!)kWT?mn}d-OxXTn8cl# zAJ5CYJC!_TKodYiDb+|~JYHD=mQoVf5`eb=77S=y9Rm0XU{@(s zw=q7iSin+Bf_raZlMq>c3&1y9){g~jKtCI6rX{lcSEbZpYQV;IHxsmI80`Z17}w&@ z!~Ua`k{}O4B%!1=31C$S(b8J~irQBw3ri`#7#Gf($i0`9QcY{XQc7~+)eOSAY8dEH z8U0D%9KgCF3s=KH7lM9}Qhvw@EX=%rAf@b@UwkcWrk#UChL)_lTDk++Og$IO)lx52 zH_*O`%+ICQa|{bJZEgnr_+TD3uDp@Tu#(lJ5aN&4y2G^}TR4kzZCtIJ@O+@6`@v*5 zYir|yfdPz=hS68^czP1fauoRwa-Y?rp%hsGLguvX~ z9400vB0Wdo=jZ1*IXS`I-5qxrUX{J;?sg0dA!r-+g3~fVE-o%&Y-}v@vx9?!jz>&Q zO`%vU;_~v6GZe3ewbnn}&yI!7#^5`rRf1huu(w+z7vJ04vt{jf@(0WfqyNBB)M~X@o%f%t3Z6 z(T*lfXzGi3P|zrFuOW|)j%;t(eMNmxUmOvu>(a5WAT94(eMN28YBjEPodZ4R#6t){ ztB_Z5Te`iy#p&rO?(grNlZ&CDAk@gU%1E2GS= zX6Z)4dx&>o3Q_t|R50W0JiOD=b{|`}&E^H(FqcvNrl$8crF~4Rwf;+G1OVRj8Sp1> zA&lSc;c*7)IBcn|l$!On<+rq4?i1H0hULd!b^x1|*V^OnbEq}HRitm(lGge+T{rf) z9*ZM_-SK-quuhBaR&xqXuv~wg)B{&yFMW*7$;C#NW?E12k;L+ WZA0iwxsQeb0000$wASfJM}QGD?oUE` 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 i@7Wxsk0X^2BKjW@741rTsqY^E0000 literal 0 HcmV?d00001 diff --git a/TEST/Ranged Weapon/Bullet/3_Shuriken.png.import b/TEST/Ranged Weapon/Bullet/3_Shuriken.png.import new file mode 100644 index 0000000..1fa6fc0 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/3_Shuriken.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dpysapdru7mb6" +path="res://.godot/imported/3_Shuriken.png-416d7026b4cf3a52217d8f9c3ebd31a5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/3_Shuriken.png" +dest_files=["res://.godot/imported/3_Shuriken.png-416d7026b4cf3a52217d8f9c3ebd31a5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/TEST/Ranged Weapon/Bullet/4_Kunai.png b/TEST/Ranged Weapon/Bullet/4_Kunai.png new file mode 100644 index 0000000000000000000000000000000000000000..b284c2d77f593bdedd83ebe79dfcbe59959766df GIT binary patch literal 2024 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 URTi9e%>V!Z07*qoM6N<$g7QGTK>z>% literal 0 HcmV?d00001 diff --git a/TEST/Ranged Weapon/Bullet/5_Snowball.png.import b/TEST/Ranged Weapon/Bullet/5_Snowball.png.import new file mode 100644 index 0000000..b7ab110 --- /dev/null +++ b/TEST/Ranged Weapon/Bullet/5_Snowball.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3ckn2ypt81yh" +path="res://.godot/imported/5_Snowball.png-71a9f5e8b230b54360d0abc0cb80c583.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://TEST/Ranged Weapon/Bullet/5_Snowball.png" +dest_files=["res://.godot/imported/5_Snowball.png-71a9f5e8b230b54360d0abc0cb80c583.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/autoload/database/database.gd b/autoload/database/database.gd index d8ff216..048a5c9 100644 --- a/autoload/database/database.gd +++ b/autoload/database/database.gd @@ -31,3 +31,35 @@ func get_init_favour(self_type:String,other_type:String): pass + +static func pre_proces_data(dic:Dictionary): + var new_dic=dic.duplicate(true) + for i in new_dic.keys(): + new_dic[i]["id"]=i + for j in other_unit_data.keys(): + new_dic[i][j]=other_unit_data[j] + return new_dic +static var other_unit_data={ + + + "hungry":0, + "fatigue":0, + "rage":0, + "tensity":0, + + "panic":0, + #压力 + "pressure":0, + + "hp_max":100, + "hp":100, + + "atk":10, +} +#角色数据 +@onready var character_data:Dictionary=pre_proces_data(preload("res://json/character.json").data) +func get_unit_data(id:String): + if character_data.has(id): + return character_data[id].duplicate(true) + else: + return null diff --git a/json/character.json b/json/character.json new file mode 100644 index 0000000..d986d5a --- /dev/null +++ b/json/character.json @@ -0,0 +1,24 @@ +{ + "test_character_base":{ + "unit_id":"default", + "unit_type":"default", + "sprite_frames":"res://res/animation/other_character_default.tres", + "sprite_offset":[0,-80], + "sprite_scale":[5,5], + "hp_base":100, + "atk_base":10, + "speed_base":1, + "attack_scene":"res://scene/character/attack/base/attack_scene_base.tscn", + }, + "test_character_ranged":{ + "unit_id":"default", + "unit_type":"default", + "sprite_frames":"res://res/animation/other_character_default.tres", + "sprite_offset":[0,-80], + "sprite_scale":[5,5], + "hp_base":100, + "atk_base":10, + "speed_base":1, + "attack_scene":"res://scene/character/attack/ranged/attack_scene_ranged.tscn", + } +} diff --git a/scene/behavour_tree/base/base_behaviour_tree.tscn b/scene/behavour_tree/base/base_behaviour_tree.tscn new file mode 100644 index 0000000..3ee4436 --- /dev/null +++ b/scene/behavour_tree/base/base_behaviour_tree.tscn @@ -0,0 +1,67 @@ +[gd_scene load_steps=15 format=3 uid="uid://dirg8ytcjol3c"] + +[ext_resource type="Script" path="res://addons/beehave/nodes/beehave_tree.gd" id="1_56xd6"] +[ext_resource type="Script" path="res://addons/beehave/nodes/composites/selector.gd" id="2_nj431"] +[ext_resource type="Script" path="res://addons/beehave/nodes/composites/sequence.gd" id="3_gw4kq"] +[ext_resource type="PackedScene" uid="uid://dukqa6ha8aeic" path="res://scene/test/condition_hungry.tscn" id="4_wp4ax"] +[ext_resource type="PackedScene" uid="uid://b65amfq474sv7" path="res://scene/test/action_move_to_target.tscn" id="5_nj8r8"] +[ext_resource type="PackedScene" uid="uid://k7sldgn2joe0" path="res://scene/test/action_eat.tscn" id="6_20yyb"] +[ext_resource type="PackedScene" uid="uid://hgsb64hg78m5" path="res://scene/test/condition_accuse.tscn" id="7_pm41v"] +[ext_resource type="PackedScene" uid="uid://cm7nelq3tbye6" path="res://scene/test/action_move_to_unit.tscn" id="8_gb1l0"] +[ext_resource type="PackedScene" uid="uid://c3pouwk6mbovv" path="res://scene/test/action_accuse.tscn" id="9_qjbcp"] +[ext_resource type="PackedScene" uid="uid://jkwn820drv43" path="res://scene/test/await_time.tscn" id="10_2383g"] +[ext_resource type="PackedScene" uid="uid://qrl0pc72e3q6" path="res://scene/test/condition_attack.tscn" id="11_35qx1"] +[ext_resource type="PackedScene" uid="uid://bcr5oa32fvxwa" path="res://scene/test/action_attack.tscn" id="12_h43ad"] +[ext_resource type="PackedScene" uid="uid://ldjrnwapxefe" path="res://scene/test/action_set_rand_pos.tscn" id="13_vko5r"] +[ext_resource type="PackedScene" uid="uid://dg0gnl5n62gq6" path="res://scene/test/run_await.tscn" id="14_pbpal"] + +[node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard", "actor")] +script = ExtResource("1_56xd6") +blackboard = NodePath("@Node@17291") +actor = NodePath("") + +[node name="SelectorComposite" type="Node" parent="."] +script = ExtResource("2_nj431") + +[node name="eat" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gw4kq") + +[node name="condition_hungry" parent="SelectorComposite/eat" instance=ExtResource("4_wp4ax")] + +[node name="action_move_to_target" parent="SelectorComposite/eat" instance=ExtResource("5_nj8r8")] + +[node name="action_eat" parent="SelectorComposite/eat" instance=ExtResource("6_20yyb")] + +[node name="accuse" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gw4kq") + +[node name="condition_accuse" parent="SelectorComposite/accuse" instance=ExtResource("7_pm41v")] + +[node name="action_move_to_unit" parent="SelectorComposite/accuse" instance=ExtResource("8_gb1l0")] + +[node name="action_accuse" parent="SelectorComposite/accuse" instance=ExtResource("9_qjbcp")] + +[node name="await_time" parent="SelectorComposite/accuse" instance=ExtResource("10_2383g")] +await_time = 2.0 + +[node name="attack" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gw4kq") + +[node name="condition_attack" parent="SelectorComposite/attack" instance=ExtResource("11_35qx1")] + +[node name="action_move_to_unit" parent="SelectorComposite/attack" instance=ExtResource("8_gb1l0")] + +[node name="action_attack" parent="SelectorComposite/attack" instance=ExtResource("12_h43ad")] + +[node name="await_time" parent="SelectorComposite/attack" instance=ExtResource("10_2383g")] +await_time = 1.0 + +[node name="rand_walk" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gw4kq") + +[node name="await_time" parent="SelectorComposite/rand_walk" instance=ExtResource("10_2383g")] +await_time = 2.0 + +[node name="action_set_rand_pos" parent="SelectorComposite/rand_walk" instance=ExtResource("13_vko5r")] + +[node name="run_await" parent="SelectorComposite/rand_walk" instance=ExtResource("14_pbpal")] diff --git a/scene/behavour_tree/ranged/action_move_to_unit_ranged.gd b/scene/behavour_tree/ranged/action_move_to_unit_ranged.gd new file mode 100644 index 0000000..4344e38 --- /dev/null +++ b/scene/behavour_tree/ranged/action_move_to_unit_ranged.gd @@ -0,0 +1,55 @@ +extends ActionLeaf +#执行成功后是否抹除黑板目标数据 +@export var should_erase_target_id:bool=false + +#用于移动到特定单位的可交互范围内 +func tick(actor:Node,black_board:Blackboard): + var unit:Unit=actor + if black_board.has_value("target_unit_id"): + var target_id:String=black_board.get_value("target_unit_id") + if Global.get_unit_instance(target_id)==null: + #移除目标 + black_board.erase_value("target_unit_id") + return FAILURE + #获取要移动到的目标实例 + var target_instance:Unit=Global.get_unit_instance(target_id) + + if not unit.is_unit_instance_in_touch_area(target_instance): + unit.set_target_pos(target_instance.global_position) + match unit.get_dir(): + 0: + unit.play_animation("up") + 1: + unit.play_animation("down") + 2: + unit.play_animation("left_right") + 3: + unit.play_animation("left_right") + return RUNNING + else: + unit.stop_move() + if should_erase_target_id: + black_board.erase_value("target_unit_id") + match unit.get_dir(): + 0: + unit.play_animation("up_idle") + 1: + unit.play_animation("down_idle") + 2: + unit.play_animation("left_right_idle") + 3: + unit.play_animation("left_right_idle") + return SUCCESS + else: + black_board.erase_value("target_unit_id") + match unit.get_dir(): + 0: + unit.play_animation("up_idle") + 1: + unit.play_animation("down_idle") + 2: + unit.play_animation("left_right_idle") + 3: + unit.play_animation("left_right_idle") + return FAILURE + diff --git a/scene/behavour_tree/ranged/action_move_to_unit_ranged.tscn b/scene/behavour_tree/ranged/action_move_to_unit_ranged.tscn new file mode 100644 index 0000000..ef0f40b --- /dev/null +++ b/scene/behavour_tree/ranged/action_move_to_unit_ranged.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://sxe0f3fvvkh0"] + +[ext_resource type="Script" path="res://scene/behavour_tree/ranged/action_move_to_unit_ranged.gd" id="1_5b1jd"] + +[node name="action_move_to_unit_ranged" type="Node"] +script = ExtResource("1_5b1jd") diff --git a/scene/behavour_tree/ranged/ranged_behaviour_tree.tscn b/scene/behavour_tree/ranged/ranged_behaviour_tree.tscn new file mode 100644 index 0000000..a680d27 --- /dev/null +++ b/scene/behavour_tree/ranged/ranged_behaviour_tree.tscn @@ -0,0 +1,67 @@ +[gd_scene load_steps=15 format=3 uid="uid://pgntryipq1n5"] + +[ext_resource type="Script" path="res://addons/beehave/nodes/beehave_tree.gd" id="1_4oqpx"] +[ext_resource type="Script" path="res://addons/beehave/nodes/composites/selector.gd" id="2_fltu2"] +[ext_resource type="Script" path="res://addons/beehave/nodes/composites/sequence.gd" id="3_gvxjj"] +[ext_resource type="PackedScene" uid="uid://dukqa6ha8aeic" path="res://scene/test/condition_hungry.tscn" id="4_oa75w"] +[ext_resource type="PackedScene" uid="uid://b65amfq474sv7" path="res://scene/test/action_move_to_target.tscn" id="5_ehseb"] +[ext_resource type="PackedScene" uid="uid://k7sldgn2joe0" path="res://scene/test/action_eat.tscn" id="6_2ghtm"] +[ext_resource type="PackedScene" uid="uid://hgsb64hg78m5" path="res://scene/test/condition_accuse.tscn" id="7_68ri4"] +[ext_resource type="PackedScene" uid="uid://cm7nelq3tbye6" path="res://scene/test/action_move_to_unit.tscn" id="8_pawul"] +[ext_resource type="PackedScene" uid="uid://c3pouwk6mbovv" path="res://scene/test/action_accuse.tscn" id="9_qbv7q"] +[ext_resource type="PackedScene" uid="uid://jkwn820drv43" path="res://scene/test/await_time.tscn" id="10_3kn43"] +[ext_resource type="PackedScene" uid="uid://qrl0pc72e3q6" path="res://scene/test/condition_attack.tscn" id="11_5kbxa"] +[ext_resource type="PackedScene" uid="uid://bcr5oa32fvxwa" path="res://scene/test/action_attack.tscn" id="12_p0fu4"] +[ext_resource type="PackedScene" uid="uid://ldjrnwapxefe" path="res://scene/test/action_set_rand_pos.tscn" id="13_gb573"] +[ext_resource type="PackedScene" uid="uid://dg0gnl5n62gq6" path="res://scene/test/run_await.tscn" id="14_ub8eh"] + +[node name="BeehaveTree" type="Node" node_paths=PackedStringArray("blackboard", "actor")] +script = ExtResource("1_4oqpx") +blackboard = NodePath("@Node@17286") +actor = NodePath("") + +[node name="SelectorComposite" type="Node" parent="."] +script = ExtResource("2_fltu2") + +[node name="eat" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gvxjj") + +[node name="condition_hungry" parent="SelectorComposite/eat" instance=ExtResource("4_oa75w")] + +[node name="action_move_to_target" parent="SelectorComposite/eat" instance=ExtResource("5_ehseb")] + +[node name="action_eat" parent="SelectorComposite/eat" instance=ExtResource("6_2ghtm")] + +[node name="accuse" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gvxjj") + +[node name="condition_accuse" parent="SelectorComposite/accuse" instance=ExtResource("7_68ri4")] + +[node name="action_move_to_unit" parent="SelectorComposite/accuse" instance=ExtResource("8_pawul")] + +[node name="action_accuse" parent="SelectorComposite/accuse" instance=ExtResource("9_qbv7q")] + +[node name="await_time" parent="SelectorComposite/accuse" instance=ExtResource("10_3kn43")] +await_time = 2.0 + +[node name="attack" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gvxjj") + +[node name="condition_attack" parent="SelectorComposite/attack" instance=ExtResource("11_5kbxa")] + +[node name="action_move_to_unit" parent="SelectorComposite/attack" instance=ExtResource("8_pawul")] + +[node name="action_attack" parent="SelectorComposite/attack" instance=ExtResource("12_p0fu4")] + +[node name="await_time" parent="SelectorComposite/attack" instance=ExtResource("10_3kn43")] +await_time = 1.0 + +[node name="rand_walk" type="Node" parent="SelectorComposite"] +script = ExtResource("3_gvxjj") + +[node name="await_time" parent="SelectorComposite/rand_walk" instance=ExtResource("10_3kn43")] +await_time = 2.0 + +[node name="action_set_rand_pos" parent="SelectorComposite/rand_walk" instance=ExtResource("13_gb573")] + +[node name="run_await" parent="SelectorComposite/rand_walk" instance=ExtResource("14_ub8eh")] diff --git a/scene/character/attack/base/attack_scene_base.gd b/scene/character/attack/base/attack_scene_base.gd new file mode 100644 index 0000000..5d14b5e --- /dev/null +++ b/scene/character/attack/base/attack_scene_base.gd @@ -0,0 +1,53 @@ +extends Area2D +class_name AttackModel +func attack(): + player().show_action("伤害") + match player().get_dir(): + 0: + player().play_animation("up_attack") + 1: + player().play_animation("down_attack") + 2: + player().play_animation("left_right_attack") + 3: + player().play_animation("left_right_attack") + +#判断单位是否再攻击范围内 +func is_unit_instance_in_attack_area(instance:Node): + if instance is PhysicsBody2D: + return instance in get_overlapping_bodies() + if instance is Area2D: + return instance in get_overlapping_areas() +func _ready() -> void: + player().animation.frame_changed.connect(frame_changed) + pass +var attack_frames=2 +func player()->Unit: + return get_parent().get_parent() +func frame_changed(): + if player().animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and player().animation.frame==attack_frames: + use_attack_damage() + +#在固定帧使用攻击 +func use_attack_damage(): + print("使用攻击") + for i in %attack_area.get_overlapping_bodies(): + print(i) + if i is Unit and i!=player(): + i.attacked(player().unit_id,player().get_atk()) +#if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and not animation.is_playing(): + #return true + #else: + #return false +func is_attack_finished(): + if player().animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and not player().animation.is_playing(): + return true + else: + return false +func is_attacking(): + return player().animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and player().animation.is_playing() +#攻击复位 +func attack_reset(): + + + pass diff --git a/scene/character/attack/base/attack_scene_base.tscn b/scene/character/attack/base/attack_scene_base.tscn new file mode 100644 index 0000000..d7102fc --- /dev/null +++ b/scene/character/attack/base/attack_scene_base.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=4 format=3 uid="uid://daj4pnrtakfby"] + +[ext_resource type="Script" path="res://scene/character/attack/base/attack_scene_base.gd" id="1_wkpgy"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_dqxim"] +radius = 104.12 + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ho5n7"] +size = Vector2(121, 136) + +[node name="attack_scene_base" type="Area2D"] +script = ExtResource("1_wkpgy") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_dqxim") + +[node name="attack_area" type="Area2D" parent="."] +unique_name_in_owner = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="attack_area"] +position = Vector2(60.5, 3) +shape = SubResource("RectangleShape2D_ho5n7") diff --git a/scene/character/attack/ranged/attack_range_bullet.gd b/scene/character/attack/ranged/attack_range_bullet.gd new file mode 100644 index 0000000..5208467 --- /dev/null +++ b/scene/character/attack/ranged/attack_range_bullet.gd @@ -0,0 +1,24 @@ +extends Area2D + +var speed=1000 + +var unit_id:String="" +var atk:float=10 +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + self.global_position+=Vector2(cos(self.global_rotation),sin(self.global_rotation))*speed*delta + pass + + +func _on_body_entered(body: Node2D) -> void: + if body is Unit and body!=Global.get_unit_instance(unit_id): + body.attacked(unit_id,atk) + if body!=Global.get_unit_instance(unit_id): + queue_free() + + pass # Replace with function body. diff --git a/scene/character/attack/ranged/attack_range_bullet.tscn b/scene/character/attack/ranged/attack_range_bullet.tscn new file mode 100644 index 0000000..9d34052 --- /dev/null +++ b/scene/character/attack/ranged/attack_range_bullet.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=4 format=3 uid="uid://bpk3f8nuoxeff"] + +[ext_resource type="Texture2D" uid="uid://bc54jgmswd7x4" path="res://TEST/Ranged Weapon/Bullet/2_Arrow.png" id="1_2txil"] +[ext_resource type="Script" path="res://scene/character/attack/ranged/attack_range_bullet.gd" id="1_qqft1"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_d6whh"] +size = Vector2(71, 20) + +[node name="attack_range_bullet" type="Area2D"] +script = ExtResource("1_qqft1") + +[node name="Sprite2D" type="Sprite2D" parent="."] +scale = Vector2(0.43, 0.43) +texture = ExtResource("1_2txil") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(0.5, 0) +shape = SubResource("RectangleShape2D_d6whh") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scene/character/attack/ranged/attack_scene_ranged.gd b/scene/character/attack/ranged/attack_scene_ranged.gd new file mode 100644 index 0000000..7ca929b --- /dev/null +++ b/scene/character/attack/ranged/attack_scene_ranged.gd @@ -0,0 +1,52 @@ +extends AttackModel + + +func attack(): + %AnimatedSprite2D.play("attack") + attack_state=1 +var attack_state:int=0 +#判断单位是否再攻击范围内 +func is_unit_instance_in_attack_area(instance:Node): + if instance is PhysicsBody2D: + return instance in get_overlapping_bodies() + if instance is Area2D: + return instance in get_overlapping_areas() +func _ready() -> void: + %AnimatedSprite2D.frame_changed.connect(frame_changed) + pass +func player()->Unit: + return get_parent().get_parent() +func frame_changed(): + print(%AnimatedSprite2D.frame) + if %AnimatedSprite2D.frame==attack_frames: + use_attack_damage() + if %AnimatedSprite2D.frame==2: + attack_state=2 +const ATTACK_RANGE_BULLET = preload("res://scene/character/attack/ranged/attack_range_bullet.tscn") +#在固定帧使用攻击 +func use_attack_damage(): + print("使用攻击") + #for i in %attack_area.get_overlapping_bodies(): + #print(i) + #if i is Unit and i!=player(): + #i.attacked(player().unit_id,player().get_atk()) + var new_bullet=ATTACK_RANGE_BULLET.instantiate() + new_bullet.global_position=player().global_position + new_bullet.global_rotation=global_rotation + new_bullet.unit_id=player().unit_id + new_bullet.atk=player().get_atk() + player().get_parent().add_child(new_bullet) + +#if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and not animation.is_playing(): + #return true + #else: + #return false +func is_attack_finished(): + return attack_state ==2 +func is_attacking(): + return attack_state ==1 + +func attack_reset(): + attack_state=0 + + pass diff --git a/scene/character/attack/ranged/attack_scene_ranged.tscn b/scene/character/attack/ranged/attack_scene_ranged.tscn new file mode 100644 index 0000000..6b00a3e --- /dev/null +++ b/scene/character/attack/ranged/attack_scene_ranged.tscn @@ -0,0 +1,44 @@ +[gd_scene load_steps=6 format=3 uid="uid://dao1drdc1dla6"] + +[ext_resource type="Script" path="res://scene/character/attack/ranged/attack_scene_ranged.gd" id="1_rpaof"] +[ext_resource type="Texture2D" uid="uid://bs81okrb5bf1" path="res://TEST/Ranged Weapon/3_Longbow.png" id="2_1o465"] +[ext_resource type="Texture2D" uid="uid://se3khy8uem13" path="res://TEST/Ranged Weapon/3_Longbow_pull.png" id="3_i46q8"] + +[sub_resource type="SpriteFrames" id="SpriteFrames_35llq"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("2_1o465") +}, { +"duration": 1.0, +"texture": ExtResource("3_i46q8") +}, { +"duration": 1.0, +"texture": ExtResource("2_1o465") +}], +"loop": false, +"name": &"attack", +"speed": 5.0 +}, { +"frames": [], +"loop": true, +"name": &"normal", +"speed": 5.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_5ekof"] +radius = 486.901 + +[node name="attack_scene_ranged" type="Area2D"] +z_index = 1 +scale = Vector2(0.992374, 0.996413) +script = ExtResource("1_rpaof") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +unique_name_in_owner = true +scale = Vector2(0.515, 0.515) +sprite_frames = SubResource("SpriteFrames_35llq") +animation = &"attack" + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_5ekof") diff --git a/scene/character/dead_scene_sprite/dead_scene.tscn b/scene/character/dead_scene_sprite/dead_scene.tscn index 41bda40..f3b692c 100644 --- a/scene/character/dead_scene_sprite/dead_scene.tscn +++ b/scene/character/dead_scene_sprite/dead_scene.tscn @@ -2,6 +2,21 @@ [ext_resource type="Script" path="res://scene/character/dead_scene_sprite/dead_scene.gd" id="1_ugaxh"] +[sub_resource type="Animation" id="Animation_mdkhy"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + [sub_resource type="Animation" id="Animation_w6wlf"] resource_name = "modulutehide" length = 0.5 @@ -18,21 +33,6 @@ tracks/0/keys = { "values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] } -[sub_resource type="Animation" id="Animation_mdkhy"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:modulate") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 1, 1, 1)] -} - [sub_resource type="AnimationLibrary" id="AnimationLibrary_a2cak"] _data = { "RESET": SubResource("Animation_mdkhy"), diff --git a/scene/class/game_data.gd b/scene/class/game_data.gd new file mode 100644 index 0000000..a250ca4 --- /dev/null +++ b/scene/class/game_data.gd @@ -0,0 +1,14 @@ +class_name GameData + +var data:Dictionary={ + +} +func _init(use_character_id:String) -> void: + var cdata=Database.get_character_data(use_character_id) + if cdata!=null: + data["character_data"]=cdata + else: + push_error("未找到角色数据") + pass +func get_character_data(): + return data["character_data"] diff --git a/scene/test/action_attack.gd b/scene/test/action_attack.gd index a8343c8..610ca6a 100644 --- a/scene/test/action_attack.gd +++ b/scene/test/action_attack.gd @@ -10,6 +10,16 @@ func tick(actor:Node,black_board:Blackboard): return RUNNING if unit.is_attack_finished(): black_board.erase_value("target_unit_id") + match unit.get_dir(): + 0: + unit.play_animation("up_idle") + 1: + unit.play_animation("down_idle") + 2: + unit.play_animation("left_right_idle") + 3: + unit.play_animation("left_right_idle") + unit.attack_reset() return SUCCESS if black_board.has_value("target_unit_id") and not unit.is_attacking(): unit.attack() diff --git a/scene/test/action_move_to_unit.gd b/scene/test/action_move_to_unit.gd index 4344e38..5add8df 100644 --- a/scene/test/action_move_to_unit.gd +++ b/scene/test/action_move_to_unit.gd @@ -14,7 +14,7 @@ func tick(actor:Node,black_board:Blackboard): #获取要移动到的目标实例 var target_instance:Unit=Global.get_unit_instance(target_id) - if not unit.is_unit_instance_in_touch_area(target_instance): + if not unit.is_unit_instance_in_attack_area(target_instance): unit.set_target_pos(target_instance.global_position) match unit.get_dir(): 0: diff --git a/scene/test/character.gd b/scene/test/character.gd index 27b5156..f0b93f6 100644 --- a/scene/test/character.gd +++ b/scene/test/character.gd @@ -34,19 +34,6 @@ var action_emoji:Dictionary={ #状态值 #饥饿,疲劳,怒气,紧张,恐慌,压力 - "hungry":0, - "fatigue":0, - "rage":0, - "tensity":0, - - "panic":0, - #压力 - "pressure":0, - - "hp_max":100, - "hp":100, - - "atk":10, } #允许的状态队列 var state_value_array:Array=["hungry","fatigue","rage","tensity","panic","pressure","hp_max","hp","atk"] @@ -109,27 +96,21 @@ const JUMP_VELOCITY = -400.0 ##与其他单位交互的范围,目标进入此范围内才进行交互 @export var touch_area:Area2D -##感知范围 +##行为感知范围 @export var sense_area:Area2D - +#攻击范围 +@export var attack_sense_area:Area2D +#攻击检测 @export var attack_area:Area2D +#攻击模组 +var attack_scene:AttackModel - - - - -#var hungry:float=0: - #set(val): - #hungry=val - #if %hungry!=null: - #%hungry.text="饥饿值:"+str(val) -func _ready() -> void: +#使用数据进行初始化角色 +func init_from_data(): Global.set_unit_instance(unit_id,self) agent.max_speed=unit_speed agent.velocity_computed.connect(safe_speed) - if animation!=null: - animation.frame_changed.connect(frame_changed) second_timer=Timer.new() second_timer.autostart=true second_timer.one_shot=false @@ -141,11 +122,27 @@ func _ready() -> void: new_sprite_animation.sprite_frames=load(unit_data["sprite_frames"]) add_child(new_sprite_animation) - new_sprite_animation.position=unit_data["sprite_offset"] - new_sprite_animation.scale=unit_data["sprite_scale"] + + new_sprite_animation.position=Vector2(unit_data["sprite_offset"][0],unit_data["sprite_offset"][1]) + new_sprite_animation.scale=Vector2(unit_data["sprite_scale"][0],unit_data["sprite_scale"][1]) animation=new_sprite_animation - animation.frame_changed.connect(frame_changed) - #state_machine.launch() + if unit_data.has("attack_scene"): + if %rotate!=null: + var new_attack_scene=load(unit_data["attack_scene"]).instantiate() + %rotate.add_child(new_attack_scene) + attack_scene=new_attack_scene + + + +#var hungry:float=0: + #set(val): + #hungry=val + #if %hungry!=null: + #%hungry.text="饥饿值:"+str(val) +func _ready() -> void: + unit_data=Database.get_unit_data("test_character_ranged") + init_from_data() + pass func set_target_pos(target:Vector2): agent.target_position=target @@ -198,15 +195,19 @@ func is_unit_instance_in_touch_area(instance:Node): #判断单位是否再攻击范围内 func is_unit_instance_in_attack_area(instance:Node): - if attack_area==null: + #if attack_sense_area==null: + #return false + #else: + #if instance is PhysicsBody2D: + #return instance in attack_sense_area.get_overlapping_bodies() + #if instance is Area2D: + #return instance in attack_sense_area.get_overlapping_areas() + # + #pass + if attack_scene==null: return false else: - if instance is PhysicsBody2D: - return instance in attack_area.get_overlapping_bodies() - if instance is Area2D: - return instance in attack_area.get_overlapping_areas() - - pass + return attack_scene.is_unit_instance_in_attack_area(instance) #指责(口角) func accuse(unit_id:String): show_action("指责") @@ -224,36 +225,50 @@ func accused(by_unit_id:String): #攻击 func attack(): - show_action("伤害") - match get_dir(): - 0: - play_animation("up_attack") - 1: - play_animation("down_attack") - 2: - play_animation("left_right_attack") - 3: - play_animation("left_right_attack") - pass + #show_action("伤害") + #match get_dir(): + #0: + #play_animation("up_attack") + #1: + #play_animation("down_attack") + #2: + #play_animation("left_right_attack") + #3: + #play_animation("left_right_attack") + #pass + if attack_scene: + print("攻击") + attack_scene.attack() -func frame_changed(): - if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and animation.frame==attack_frames: - use_attack_damage() +#func frame_changed(): + #if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and animation.frame==attack_frames: + #use_attack_damage() func is_attack_finished(): - if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and not animation.is_playing(): + #if animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and not animation.is_playing(): + #return true + #else: + #return false + if attack_scene is AttackModel: + return attack_scene.is_attack_finished() + else: return true +func is_attacking(): + #return animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and animation.is_playing() + if attack_scene is AttackModel: + return attack_scene.is_attacking() else: return false -func is_attacking(): - return animation.animation in [&"up_attack",&"down_attack",&"left_right_attack"] and animation.is_playing() -#在固定帧使用攻击 -func use_attack_damage(): - print("使用攻击") - for i in attack_area.get_overlapping_bodies(): - if i is Unit and i!=self: - i.attacked(unit_id,get_atk()) - - pass +##在固定帧使用攻击 +#func use_attack_damage(): + #print("使用攻击") + #for i in attack_area.get_overlapping_bodies(): + #if i is Unit and i!=self: + #i.attacked(unit_id,get_atk()) + # + #pass +func attack_reset(): + if attack_scene: + attack_scene.attack_reset() func attacked(by_unit_id:String,damage:float): show_action("受伤") Global.set_unit_favour(unit_id,by_unit_id,Global.get_unit_favour(unit_id,by_unit_id)-20) diff --git a/scene/test/other_character.tscn b/scene/test/other_character.tscn index 58d40cb..aa9071c 100644 --- a/scene/test/other_character.tscn +++ b/scene/test/other_character.tscn @@ -1,32 +1,16 @@ -[gd_scene load_steps=28 format=3 uid="uid://dl1axae8yeeeh"] +[gd_scene load_steps=14 format=3 uid="uid://dl1axae8yeeeh"] [ext_resource type="Script" path="res://scene/test/other_character.gd" id="1_6f8fy"] [ext_resource type="Texture2D" uid="uid://csk8u15wepd1w" path="res://icon.svg" id="2_tbr4x"] -[ext_resource type="Script" path="res://addons/beehave/nodes/beehave_tree.gd" id="2_twyt5"] -[ext_resource type="Script" path="res://addons/beehave/nodes/composites/selector.gd" id="3_0pv7j"] -[ext_resource type="PackedScene" uid="uid://ldjrnwapxefe" path="res://scene/test/action_set_rand_pos.tscn" id="3_a6loo"] -[ext_resource type="Script" path="res://addons/beehave/nodes/composites/sequence.gd" id="3_gehdk"] -[ext_resource type="PackedScene" uid="uid://jkwn820drv43" path="res://scene/test/await_time.tscn" id="4_hl4be"] -[ext_resource type="PackedScene" uid="uid://dg0gnl5n62gq6" path="res://scene/test/run_await.tscn" id="4_hydke"] -[ext_resource type="PackedScene" uid="uid://hgsb64hg78m5" path="res://scene/test/condition_accuse.tscn" id="5_tomxt"] -[ext_resource type="PackedScene" uid="uid://dukqa6ha8aeic" path="res://scene/test/condition_hungry.tscn" id="6_qkap5"] -[ext_resource type="PackedScene" uid="uid://cm7nelq3tbye6" path="res://scene/test/action_move_to_unit.tscn" id="6_wkm0p"] -[ext_resource type="PackedScene" uid="uid://b65amfq474sv7" path="res://scene/test/action_move_to_target.tscn" id="7_phvf1"] -[ext_resource type="PackedScene" uid="uid://c3pouwk6mbovv" path="res://scene/test/action_accuse.tscn" id="7_wxwf6"] -[ext_resource type="PackedScene" uid="uid://k7sldgn2joe0" path="res://scene/test/action_eat.tscn" id="8_xfqbv"] -[ext_resource type="PackedScene" uid="uid://qrl0pc72e3q6" path="res://scene/test/condition_attack.tscn" id="10_85ndl"] -[ext_resource type="PackedScene" uid="uid://bcr5oa32fvxwa" path="res://scene/test/action_attack.tscn" id="11_7tlfn"] +[ext_resource type="PackedScene" uid="uid://dirg8ytcjol3c" path="res://scene/behavour_tree/base/base_behaviour_tree.tscn" id="3_5u10o"] [sub_resource type="CircleShape2D" id="CircleShape2D_s46hi"] -[sub_resource type="RectangleShape2D" id="RectangleShape2D_lphpm"] -size = Vector2(121, 136) - [sub_resource type="CircleShape2D" id="CircleShape2D_fp36j"] radius = 104.12 [sub_resource type="CircleShape2D" id="CircleShape2D_0d77h"] -radius = 472.662 +radius = 847.191 [sub_resource type="Animation" id="Animation_tov45"] length = 0.001 @@ -77,13 +61,12 @@ colors = PackedColorArray(0, 1, 0, 1, 0, 1, 0, 1) [sub_resource type="GradientTexture1D" id="GradientTexture1D_6t72h"] gradient = SubResource("Gradient_qd3pc") -[node name="other_character" type="CharacterBody2D" node_paths=PackedStringArray("agent", "rotate", "touch_area", "sense_area", "attack_area")] +[node name="other_character" type="CharacterBody2D" node_paths=PackedStringArray("agent", "rotate", "touch_area", "sense_area")] script = ExtResource("1_6f8fy") agent = NodePath("agent") rotate = NodePath("rotate") touch_area = NodePath("touch_area") sense_area = NodePath("sense_area") -attack_area = NodePath("rotate/attack_area") [node name="Sprite2D" type="Sprite2D" parent="."] visible = false @@ -99,63 +82,7 @@ debug_enabled = true shape = SubResource("CircleShape2D_s46hi") [node name="rotate" type="Node2D" parent="."] - -[node name="attack_area" type="Area2D" parent="rotate"] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="rotate/attack_area"] -position = Vector2(60.5, 3) -shape = SubResource("RectangleShape2D_lphpm") - -[node name="BeehaveTree" type="Node" parent="." node_paths=PackedStringArray("blackboard", "actor")] -script = ExtResource("2_twyt5") -blackboard = NodePath("@Node@113329") -actor = NodePath("..") - -[node name="SelectorComposite" type="Node" parent="BeehaveTree"] -script = ExtResource("3_0pv7j") - -[node name="eat" type="Node" parent="BeehaveTree/SelectorComposite"] -script = ExtResource("3_gehdk") - -[node name="condition_hungry" parent="BeehaveTree/SelectorComposite/eat" instance=ExtResource("6_qkap5")] - -[node name="action_move_to_target" parent="BeehaveTree/SelectorComposite/eat" instance=ExtResource("7_phvf1")] - -[node name="action_eat" parent="BeehaveTree/SelectorComposite/eat" instance=ExtResource("8_xfqbv")] - -[node name="accuse" type="Node" parent="BeehaveTree/SelectorComposite"] -script = ExtResource("3_gehdk") - -[node name="condition_accuse" parent="BeehaveTree/SelectorComposite/accuse" instance=ExtResource("5_tomxt")] - -[node name="action_move_to_unit" parent="BeehaveTree/SelectorComposite/accuse" instance=ExtResource("6_wkm0p")] - -[node name="action_accuse" parent="BeehaveTree/SelectorComposite/accuse" instance=ExtResource("7_wxwf6")] - -[node name="await_time" parent="BeehaveTree/SelectorComposite/accuse" instance=ExtResource("4_hl4be")] -await_time = 2.0 - -[node name="attack" type="Node" parent="BeehaveTree/SelectorComposite"] -script = ExtResource("3_gehdk") - -[node name="condition_attack" parent="BeehaveTree/SelectorComposite/attack" instance=ExtResource("10_85ndl")] - -[node name="action_move_to_unit" parent="BeehaveTree/SelectorComposite/attack" instance=ExtResource("6_wkm0p")] - -[node name="action_attack" parent="BeehaveTree/SelectorComposite/attack" instance=ExtResource("11_7tlfn")] - -[node name="await_time" parent="BeehaveTree/SelectorComposite/attack" instance=ExtResource("4_hl4be")] -await_time = 1.0 - -[node name="rand_walk" type="Node" parent="BeehaveTree/SelectorComposite"] -script = ExtResource("3_gehdk") - -[node name="await_time" parent="BeehaveTree/SelectorComposite/rand_walk" instance=ExtResource("4_hl4be")] -await_time = 2.0 - -[node name="action_set_rand_pos" parent="BeehaveTree/SelectorComposite/rand_walk" instance=ExtResource("3_a6loo")] - -[node name="run_await" parent="BeehaveTree/SelectorComposite/rand_walk" instance=ExtResource("4_hydke")] +unique_name_in_owner = true [node name="touch_area" type="Area2D" parent="."] unique_name_in_owner = true @@ -210,5 +137,9 @@ nine_patch_stretch = true texture_under = SubResource("GradientTexture1D_ioncu") texture_progress = SubResource("GradientTexture1D_6t72h") +[node name="BeehaveTree" parent="." node_paths=PackedStringArray("blackboard", "actor") instance=ExtResource("3_5u10o")] +blackboard = NodePath("@Node@34592") +actor = NodePath("..") + [connection signal="state_value_changed" from="." to="." method="_on_state_value_changed"] [connection signal="body_entered" from="sense_area" to="." method="_on_sense_area_body_entered"] diff --git a/scene/test/test_main.gd b/scene/test/test_main.gd index 5399d7e..ba614d8 100644 --- a/scene/test/test_main.gd +++ b/scene/test/test_main.gd @@ -32,7 +32,7 @@ func get_closest_node(self_node:Node2D,array:Array,target_class): var node=null for i in range(0,array.size()): print(is_instance_of(i,target_class)) - if is_instance_of(array[i],target_class): + if is_instance_of(array[i],target_class) and array[i]!=self_node: var l=(array[i].global_position-self_node.global_position).length() if l